python函式的四種引數定義方式和傳遞方式

2022-05-12 17:13:19 字數 1477 閱讀 5284

def fun1(a,b,c):

pass

def fun2(a=1,b=2,c=3):

pass

def fun3(*args):

pass

def fun4(**kargs):

pass

四種中最常見是前兩種,基本上一般點的教程都會涉及,後兩種一般很少單獨出現,常用在混合模式中

第一種 fun1(a,b,c)是直接將實參賦予形參,根據位置做匹配,即嚴格要求實參的數量與行參的數量位置相等,比較一般,大多數語言常用這種方式。

第二種 fun2(a=1,b=2,c=3)根據鍵值對的形式做實參與形參的匹配,通過這種式就可以忽略了引數的位置關係,直接根據關鍵字來進行賦值,同時該種傳參方式還有個好處就是可以在呼叫函式的時候作為個別選填項,不要求數量上的相等,即可以fun5(3,4)來呼叫fun2函式,這裡關鍵就是前面的3,4覆蓋了原來a、b兩個形參的值,但c還是不變採用原來的預設值3,這種模式相較第一種更加靈活,不僅可以通過fun6(c=5,a=2,b=7)來打亂行參的位置,而且可以在沒有對應形參傳遞的時候使用定義函式時的預設值。

第三種 fun3(*args),這定義方式在傳參時是可以傳入任意個引數,這些若干引數都被放到了tuple元組中賦值給行參args,之後要在函式中使用這些行參,直接操作args這個tuple元組就可以了,這樣的好處是在引數的數量上沒有了限制,但是因為是tuple,其本身還是有次序的,這就仍然存在一定的束縛,在對引數操作上也會有一些不便

第四種 fun4(**kargs)最為靈活,其是以鍵值對字典的形式向函式傳參,含有第二種位置的靈活的同時具有第三種方式的數量上的無限制。此外第三四種函式宣告的方式前的』*』,與c裡面的指標宣告一樣,這裡僅做宣告標識之用

最後要強調的是四種定義和傳遞方式混合使用(大多數情況是這種),fun7(a,b,c,**d),但四種方式混用時要遵守:定義和傳遞時,*kargs必須在*args之後

def test(x,y=5,*a,**b):

print x,y,a,b

#呼叫結果:

test(1) ===> 1 5 () {}

test(1,2) ===> 1 2 () {}

test(1,2,3) ===> 1 2 (3,) {}

test(1,2,3,4) ===> 1 2 (3,4)

test(x=1) ===> 1 5 () {}

test(x=1,y=1) ===> 1 1 () {}

test(x=1,y=1,a=1) ===> 1 1 ()

test(x=1,y=1,a=1,b=1) ===> 1 1 ()

test(1,y=1) ===> 1 1 () {}

test(1,2,y=1) ===> 出錯,說y給賦了多個值

test(1,2,3,4,a=1) ===> 1 2 (3,4)

test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4)

Python函式中定義引數的四種方式

python中函式引數的定義主要有四種方式 f arg1,arg2,這是最常見的定義方式,乙個函式可以定義任意個引數,每個引數間用逗號分割,用這種方式定義的函式在呼叫的的時候也必須在函式名後的小括號裡提供個數相等 的值 實際引數 而且順序必須相同,也就是說在這種呼叫方式中,形參和實參的個數必須一致,...

Python函式中定義引數的四種方式

python中函式引數的定義主要有四種方式 1.f arg1,arg2,這是最常見的定義方式,乙個函式可以定義任意個引數,每個引數間用逗號分割,用這種方式定義的函式在呼叫的的時候也必須在函式名後的小括號裡提供個數相等 的值 實際引數 而且順序必須相同,也就是說在這種呼叫方式中,形參和實參的個數必須一...

函式,函式的四種定義,

函式 1.函式的關鍵字 function 複習var 是js的關鍵字,用於表示宣告變數,宣告是在記憶體模組完成,定義 是執行模組完成。var 客園在記憶體模組提前 js 執行前 完成所以有變數提公升這個功能。function 也是js1的關鍵字,用於宣告和定義函式的,宣告和定義都在記憶體模組完成。f...