1 位置參數和關鍵字參數
- 根據函數定義的參數位置來傳遞參數,參數不能少;
- 關鍵字參數必須置於位置參數之後,因爲python函數在解析參數時, 是按照順序來的, 位置參數是必須先滿足, 才能考慮其他可變參數。
def print_hello(name, sex):
pass
print_hello('du', 1)
print_hello('du', sex = 1)
print_hello(name = 'du', sex = 1)
print_hello(sex = 1, name = 'du')
# 錯誤
print_hello(name = 'du', 1)
File "<ipython-input-85-0c54b0f6425d>", line 2
print_hello(name = 'du', 1)
^
SyntaxError: positional argument follows keyword argument
2 默認參數
- 爲參數提供默認值,調用函數時可傳可不傳該默認參數的值;
- 注意:所有位置參數必須出現在默認參數前,包括函數定義和調用。
# 正確的默認參數定義方式--> 位置參數在前,默認參數在後
def print_hello(name, sex=1):
pass
# 錯誤的定義方式
def print_hello(sex=1, name):
pass
print_hello('du')
print_hello('du', 2)
3 可變參數
- 當不確定參數個數時可用包裹位置參數,或者包裹關鍵字參數。
3.1 包裹packing與unpacking
a = (1, 2, 3)
a1, a2, a3 = a
print("a1=%d, a2=%d, a3=%d" % (a1, a2, a3))
3.2 包裹位置傳遞
- 傳進的所有參數被args收集,然後組合爲一個元組(tuple)
def func(*args):
sum = 0
for arg in args:
sum += arg
print(sum)
func()
func(1)
func(1, 2, 3)
3.3 包裹關鍵字參數
- 傳進的所有參數被kargs收集,然後組合爲一個字典(dict鍵值對)
def func(**kargs):
print(kargs)
func(a=1)
func(a=1, b=2, c=3)
4 混合應用
- 先後順序規則:位置參數、默認參數、包裹位置、包裹關鍵字
- 包裹位置必須在包裹關鍵字之前
def func(name, age, sex=1, *args, **kargs):
print(name)
print(age)
print(sex)
print(args)
print(kargs)
print('------------------')
func('du', 25, 2, 'music', 'sport', good=2)
func('du', 25, 'music', 'sport', good=2) # 'music'傳入給sex值,而‘sport’爲參數args收集,組合爲元組
def func1(x, *args, a=4, **kargs): # 沒辦法修改到默認參數a
pass
def func2(x, a=4, *args, **kargs): # 傳入的第二個參數爲a
pass
文章內容借鑑如下:
1、https://www.jianshu.com/p/c4c27db76f66
2、廖雪峯學習網站Python內容