1分鐘掌握 Python 函式引數

weixin_34279579發表於2019-01-14

任何程式語言函式都是非常重要的一部分,而在進行函式呼叫時,瞭解函式的引數傳遞方式是非常有必要的。Python中支援哪些傳參方式呢?

Python中的傳參方式是比較靈活的,主要包括以下六種:

  • 按照位置傳參

  • 按照關鍵字傳參

  • 預設引數

  • 元組傳參

  • 字典傳參

  • 綜合傳參

按照位置傳參

顧名思義,實參與形引數目一致,並且是按照位置一一對應的。

def func(a, b):
    return a+b*2

當呼叫函式func(1,2)時,則按照a=1,b=2的方式形參與實參對應,返回結果為5。

按照關鍵字傳參

這種方式在呼叫函式時既傳實參,也傳形參。因而,不需要根據位置對應了,位置可以顛倒:

def func(a, b):
    return a+b*2

當呼叫函式func(b=1,a=2)時,則按照b=1,a=2的方式形參與實參對應,匹配的方式是關鍵字而非位置,返回結果為4。

預設引數

預設引數必須放在前兩類引數之後,在呼叫函式的時候可以傳參,也可以不傳。不傳則採用預設的引數值。

def func(a, b, c = 3):
    return a+b*2+c

其中,c為預設引數。當通過func(1,2)呼叫函式時,c的取值為預設值3,函式的執行結果為8;當通過func(1,2,5)呼叫函式時,c的取值為實參值5,函式的執行結果為10。

元組傳參

傳入的引數以元組的形式呈現,長度不限,可以通過元組的訪問方式依次訪問各個入參:

def func(*args):
    for eacharg in args:
        print ('tuple arg:', eacharg)

呼叫方式如下:func('I', 'Love', 'PythonSomething')

呼叫結果為:

tuple arg: I
tuple arg: Love
tuple arg: PythonSomething

字典傳參

傳入的引數以字典的形式呈現,長度不限,可以通過字典的訪問方式依次訪問各個入參:

def func(**kwargs):
    for eachkwarg in kwargs.keys():
        print('Dict Arg', eachkwarg, ':', kwargs[eachkwarg])

呼叫方式如下:

func(English_name = 'PythonSomething',  Chinese_name= 'Python')

呼叫結果為:

Dict Arg English_name : ***
Dict Arg Chinese_name : ***

綜合傳參

是以上幾種傳參方式的綜合。實際上,大家從上面的例子也可以發現,元組傳參和字典傳參已經能夠滿足大部分傳參場景。所以,通常所的綜合傳參指的是這兩種的組合,大家在原始碼中也經常會發現它們的身影:

def func(*args,**kwargs):
    for eacharg in args:
        print('tuple arg:', eacharg)

    for eachkwarg in kwargs.keys():
        print('Dict Arg', eachkwarg, ':', kwargs[eachkwarg])

呼叫示例為:

func('I', 'Love', 'PythonSomething', English_name = 'PythonSomething',  Chinese_name= 'Python那些事')

呼叫結果為:

tuple arg: I
tuple arg: Love
tuple arg: PythonSomething
Dict Arg Chinese_name : ***
Dict Arg English_name : ***

相關文章