舉例
例1:
def multipute(x,y): x = 2 y[0] = ['spam'] return x,y X = 1 L = [1,2] X,L = multipute(X, L) print('參數,x 是函數作用域內的變量名,第一個賦值對函數沒有影響,它僅僅把本地變量x修改為引用一個完全不同的對象,並沒有改變調用者作用域中名稱x 的綁定。y也是引用的本地變量名,只有在修改的對象大於比函數生命更長的時候,才會影響到調用者') print(X,L)
例2: #默認參數和關鍵字參數 def f(a,b=2,c=3): print(a,b,c) print('###默認參數和關鍵字參數') f(1) f(1,3,4)
例3: def func1(spam,eggs,toast=0,ham=0): print(spam,eggs,toast,ham) func1(1,2,3,4) func1(toast=1,eggs=2,spam=3)
例4: ##任意參數*args,python 將所有位置相關的參數搜集到一個新的元組中,並將這個元組賦值給args def e(*args): print(args) print('###任意參數*args,python 將所有位置相關的參數搜集到一個新的元組中,並將這個元組賦值給args') e() e('a',2)
例5: ##任意參數**args,python 將所有位置相關的參數搜集到一個新的字典中,並將這個字典賦值給args def m(**args): print(args) print('##任意參數**args,python 將所有位置相關的參數搜集到一個新的字典中,並將這個字典賦值給args') m() m(a=1,b=2,c=3)
例6: ##混合參數演示 def n(a,*pargs,**args): print(a,pargs,args) print('##混合參數演示結果') n(1) n(1,2,3,4,c=5,m=6) n(1,34,c=4,m=5)
例7: ###解包參數 def l(a,b,c,d): print(a,b,c,d) print('###解包參數') args = (1,2) args += (3,4) l(*args) args = {'a':2,'b':3,'c':4} args['d'] =5 l(**args) l(1,*(2,10),**{'d':5}) l(1,*(2,11),d=10)
例8: ###下面的例子是通過傳遞任何發送進來的參數來支持具有任意參數的任意函數 def tracer(func2,*pargs,**kargs): print('calling:', func2.__name__) return func2(*pargs,**kargs) def func2(a,b,c,d): return a +b+c+d print('###tracer 搜集參數,然后var args調用語法來傳遞它') print(tracer(func2,1,2,c=20,d=40))
輸出結果
例1: 參數,x 是函數作用域內的變量名,第一個賦值對函數沒有影響,它僅僅把本地變量x修改為引用一個完全不同的對象,並沒有改變調用者作用域中名稱x 的綁定。y也是引用的本地變量名,只有在修改的對象大於比函數生命更長的時候,才會影響到調用者 2 [['spam'], 2] 例2: ###默認參數和關鍵字參數 1 2 3 1 3 4 例3: 1 2 3 4 3 2 1 0 例4: ###任意參數*args,python 將所有位置相關的參數搜集到一個新的元組中,並將這個元組賦值給args () ('a', 2) 例5: ##任意參數**args,python 將所有位置相關的參數搜集到一個新的字典中,並將這個字典賦值給args {} {'b': 2, 'c': 3, 'a': 1} 例6: ##混合參數演示結果 1 () {} 1 (2, 3, 4) {'m': 6, 'c': 5} 1 (34,) {'m': 5, 'c': 4} 例7: ###解包參數 1 2 3 4 2 3 4 5 1 2 10 5 1 2 11 10 例8: ###tracer 搜集參數,然后var args調用語法來傳遞它 calling: func2 63