python中函式傳遞引數有四種形式
四種中最常見是前兩種,基本上一般點的教程都會涉及,後兩種一般很少單獨出現,常用在混合模式中fun1(a,b,c)
fun2(a=1,b=2,c=3)
fun3(*args)
fun4(**kargs)
第一種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)
,但四種方式混用時要遵守:
按順序把傳給args的實參賦值給對應的行參舉例args = value 形式的實參賦值給行參
將多餘出的即鍵值對行後的零散實參打包組成乙個tuple傳遞給*args
將多餘的key=value形式的實參打包正乙個dicrionary傳遞給**kargs
定義
呼叫結果def test(x,y=5,*,**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中函式傳遞引數有四種形式 fun1 a,b,c fun2 a 1,b 2,c 3 fun3 args fun4 kargs 四種中最常見是前兩種,基本上一般點的教程都會涉及,後兩種一般很少單獨出現,常用在混合模式中 第一種fun1 a,b,c 是直接將實參賦予行參,根據位置做匹配,即嚴格...
python函式的四種引數定義方式和傳遞方式
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 是直接將實...
四種傳遞引數的方法
主程式在呼叫子程式時,往往要向子程式傳遞一些引數 同樣,子程式執行後也經常要把一些結果引數傳回給主程式。主程式與子程式之間的這種資訊傳遞稱為引數傳遞。引數傳遞有四種方法 暫存器引數傳遞,約定儲存單元引數傳遞,利用call後續區進行引數傳遞,利用堆疊進行引數傳遞。一 暫存器引數傳遞 優點是實現簡單方便...