def printall(**kargs):
for k in kargs:
print k, ':', kargs[k]
printall(a=1, b=2, c=3)
printall(x=4, y=5)
print '------'
def func(x, y=5, *a, **b):
print x, y, a, b
func(1)
func(1,2)
func(1,2,3)
func(1,2,3,4)
func(x=1)
func(x=1,y=1)
func(x=1,y=1,a=1)
func(x=1,y=1,a=1,b=1)
func(1,y=1)
func(1,2,3,4,a=1)
func(1,2,3,4,k=1,t=2,o=3)
結果:
a : 1
c : 3
b : 2
y : 5
x : 4
------
1 5 () {}
1 2 () {}
1 2 (3,) {}
1 2 (3, 4) {}
1 5 () {}
1 1 () {}
1 1 ()
1 1 ()
1 1 () {}
1 2 (3, 4)
1 2 (3, 4)
注意:在混合使用時,首先要注意函式的寫法,必須遵守:
帶有預設值的形參(arg=)須在無預設值的形參(arg)之後;
元組引數(*args)須在帶有預設值的形參(arg=)之後;
字典引數(**kargs)須在元組引數(*args)之後
呼叫時也需要遵守:
指定引數名稱的引數要在無指定引數名稱的引數之後;
不可以重複傳遞,即按順序提供某引數之後,又指定名稱傳遞。
而在函式被呼叫時,引數的傳遞過程為:
1.按順序把無指定引數的實參賦值給形參;
2.把指定引數名稱(arg=v)的實參賦值給對應的形參;
3.將多餘的無指定引數的實參打包成乙個 tuple 傳遞給元組引數(*args);
4.將多餘的指定引數名的實參打包成乙個 dict 傳遞給字典引數(**kargs)。
Python的函式引數傳遞
原址 我想,這個標題或許是很多初學者的問題。尤其是像我這樣的對c c 比較熟悉,剛剛進入python殿堂的朋友們 c c 的函式引數的傳遞方式根深蒂固的影響這我們的思維 引用?傳值?究竟是那種呢。呵呵,語言的特性決定了是使用的方法,那麼,現在我們來 一下python的函式引數傳遞方式。在開始之前,我...
Python的函式引數傳遞
看兩個例子 a 1 deffun a a 2 fun a print a 1a deffun a fun a print a 1 所有的變數都可以理解是記憶體中乙個物件的 引用 或者,也可以看似c中void 的感覺。a 1 deffun a print func in id a func in 41...
Python的函式引數傳遞
看兩個例子 python a 1 def fun a a 2 fun a print a 1 a 1 def fun a a 2 fun a print a 1 python a def fun a fun a print a 1 所有的變數都可以理解是記憶體中乙個物件的 引用 或者,也可以看似c中...