Python函數的參數詳解
1、Python的函數參數的類型
- 必傳參數:調用函數時必須傳入的參數,函數定義時只定義參數名
- 關鍵字參數:傳入時以函數的參數名值對的方式傳入
- 默認參數:函數定義時為參數默認設置一個值,調用時不傳輸參數即以默認值處理
- 不定長參數:以*修飾或者**修飾的參數;*修飾的參數是一個元組(tuple),**修飾的參數必須是字典(dict),通常寫作*args或者**args
2、Python的必傳參數
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
def demo01(a,b):
print(a, type(a))
print(b, type(b))
# demo01(1) #TypeError missing 1 required positional argument: 'b' 缺少一個未知的參數,demo01必須傳2個參數
# demo01(1, 2, 3) #TypeError demo01() takes 2 positional arguments but 3 were given, demo01函數有2個位置參數,但是接收到了3個;
# 必傳參數 : 調用函數時必須傳入的參數,函數定義時只定義參數名
# 傳入的參數個數必須與形參的數量一致
demo01(1, 2) # yes
demo01(1, [1, 2]) # yes
demo01([2, 3], (1, 2)) # yes
demo01(1, {2, 3, 4}) # yes
demo01(2, {"code":'1001', "name":"zhang", "age":18}) # yes
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
3、關鍵字參數
- 以參數名和參數值的關聯在一起的方式進行傳參,鍵值對的模式,參數名為鍵。
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
def demo01(a,b):
print(a, type(a), end="__")
print(b, type(b))
# 第一個關鍵字出入的參數位置之前的參數比遜選擇關鍵字傳參;如下面的示例中,第一個關鍵字傳參的變量是a,a在函數定義的第二個位置,那麼第二個位置之前的參數都必須以關鍵字傳參的形式傳參。
# demo01(1, a=2) # demo01() got multiple values for argument 'a'
demo01(a=1, b=2) # yes
demo01(1, b=2) # yes
demo01(b=1, a=2) # yes
demo01(b=1, a=[1, 2]) # yes
demo01(b=[2, 3], a=(1, 2)) # yes
demo01(b=1, a={2, 3, 4}) # yes
demo01(b=2, a={"code":'1001', "name":"zhang", "age":18}) # yes
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
4、默認參數
- 調用函數時不傳入參數an默認值處理,傳入時按傳入的參數值處理
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
## 默認參數
def demo02(City = "LongNan"):
print("City是默認參數,默認值是:中國,當前值是:", City)
# 不傳入參數
demo02()
# 傳入參數
demo02("Beijing")
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
5、不定長參數
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
## 不定長參數
def demo03(*args):
print(args,type(args))
# 傳入的參數會生成一個元組類型的變量供函數內部使用
demo03(1)
demo03("code")
demo03(1,"code")
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 傳入的參數不能少於必傳參數的個數
- *args 後面的形參,必須以關鍵字參數進行傳參
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
# *args 後面的形參,必須以關鍵字參數進行傳參,
def demo04(a, b, *args,c):
print("a傳入的參數值是:{},b傳入的參數值是:{}, args傳入的參數是:{}, c出入的參數是:{}".format(a, b, args,c))
# 傳入的參數不能少於必傳參數的個數,a,b,c三個為必傳參數
# demo04(1, 2) # TypeError
# demo04(1, 2, 3) # TypeError
demo04(1, 2, c=3)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- *args 之前的參數只能按位置傳參,不可以關鍵字傳參
- 傳入的參數個數比必傳參數多時,首先給必傳參數按位置賦值,然後將剩余的參數生成一個元組傳遞給args
- **修飾的參數必須以關鍵字的參數方式傳參,Python解釋器會將傳入的關鍵字和關鍵字的值生成一個字典供函數內部使用
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
def demo05(**kwargs):
print("kwargs傳入的參數是:{}".format(kwargs),type(kwargs))
kwargs = {"code":'1002', "name":"zhang"}
# demo05(kwargs) # TypeError
# **修飾的參數必須以關鍵字的參數方式傳參,Python解釋器會將傳入的關鍵字和關鍵字的值生成一個字典供函數內部使用
demo05(**kwargs) # kwargs傳入的參數是:{'code': '1002', 'name': 'zhang'} <class 'dict'>
demo05(code='1002',name="zhang") # kwargs傳入的參數是:{'code': '1002', 'name': 'zhang'} <class 'dict'>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng
# **修飾的參數必須是最後一個
""" # SyntaxError: invalid syntax def demo06(a, b, *args, c, **kwargs, d): pass """
def demo06(a, b, *args, c, **kwargs):
print("a傳入的參數值是:{},b傳入的參數值是:{}, args傳入的參數是:{}".format(a, b, args),end='')
print(",c傳入的參數是:{},kwargs傳入的參數是:{}".format(c,kwargs))
demo06(1, 2, 3, 4, 5, c=3, code='1002', name="zhang", d=3)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.