python的傳遞方式具有兩種值傳遞和引用傳遞。除此之外,python中還允許包裹方式的參數傳遞,這未不確定參數個數和參數類型的函數調用提供了基礎:
值傳遞
- int、float等值傳遞
**特點,區別於C語言參數需要一一對應
上面代碼的運行結果是:#eg1: def f(a,b,c): print(a,b,c) return f(1,2,3) f(b=1,a=2,c=3)
1 2 3
2 1 3
引用傳遞
- 以字典、列表等非值對象數據類型為代表
- def f(*a,**b)
*所對應的形參(如上面的a)會被解釋為一個元組(tuple,而**所對應的形參(如上面的b)會被解釋為一個字典。
上面代碼的運行結果是:#eg2: def f(*a,**b): print(a) print(b) a=8 b=4 f(a,b,m=1,n=2)
(8 4)
{'m': 1, 'n': 2}
可見,對於不使用關鍵字傳遞的變量,會被作為元組的一部分傳遞給*a,而使用關鍵字傳遞的變量作為字典的一部分傳遞給了**b。
python中規定非關鍵字傳遞的變量必須寫在關鍵字傳遞變量的前面,所以混合使用*和**時肯定時*形參在**形參的前面,如def f(*a,**b);
