Python筆記-函數的參數

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內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章