Python函數中,常見會令人一頭霧水的特殊參數應該就屬args和*kwargs了。
今天就把所有可能會遇見的Python參數做一次整理,共七種,以後見到就不會再害怕了!
定位參數非常簡單,如下例,這種沒有什麼變化的參數,都屬於定位參數,如:
>>> def test(a,b):
print(a-b)
>>> test(1,2)
3
但是!"定位"參數的定位很重要:
他表明了,呼叫函數時,Python是依照你給的"定位",去判斷參數對應什麼值。
如下例,test(1,2)並不等同於test(2,1):
>>> def test(a,b):
print(a-b)
>>> test(1,2)
-1
>>> test(2,1)
1
預設參數,就是一般參數有了預設值,就是預設參數,如:
>>> def test(a,b=5):
print(a+b)
>>> test(0)
5
這不太算構成參數的一種方法,而是呼叫函數"如何代入參數"的一種方法,如:
>>> test(a=0) #指定了參數關鍵字a
5
所謂僅限關鍵字參數就是,他只能通過關鍵字參數指定,它一定不會捕獲未命名的定位參數,如果沒有使用關鍵字參數,那就會報錯,如:
>>> def test(a,*,b):
print(a-b)
>>> test(1,2)
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
test(1,2)
TypeError: test() takes 1 positional argument but 2 were given
>>> test(1,b=2)
-1
看到四,大概可以猜得出*參數是什麼用途了嗎?
沒錯,其用途,就是用來限定其身後參數必須是僅限關鍵字參數(keyword-only argument) 。
*代表此參數代表其實他是一個tuple,可以放入很多的參數,函數要使用時,可以迭代出來使用,如:
>>> def test(a,*nums,b):
for c in nums:
print(a+c-b)
>>> test(1,1,1,1,1,b=2)
0
0
0
0
由於args也帶有,所以其後面的參數,必須只能使用僅限關鍵字參數(keyword-only argument)
kwargs跟*args其實很像,只是kwargs代表的是dictionary
kw代表keyword,有key的tuple,那就是dict哩。
例:
>>> def test(a,b,**nums):
print('v1+v2',a+b,nums,sep='=')
>>> test(1,2,v1=1,v2=2)
v1+v2=3={'v1': 1, 'v2': 2}
特別要注意的是,*kwargs一定要放在最後面,也是就是定位參數/預設參數/關鍵字參數/限定關鍵字參數/args 後面!
參數大概就是這七種,然而上面還可以有很多變化阿,如:
*args混合**kwargs :
>>> def test(*args, **kwargs):
print(args,kwargs,sep=';')
>>> test(1,2,3,4,a=1,b=2,c=3,d=4)
(1, 2, 3, 4);{'a': 1, 'b': 2, 'c': 3, 'd': 4}
其他變化,舉一反三吧,大致上就是這些拉~
Reference:
https://skylinelimit.blogspot.com/2018/04/python-args-kwargs.html
https://www.books.com.tw/products/0010706172
Share on Twitter Share on FacebookSQL Server Analytics Service 1
SEO(1) Github(2) Title Tag(2) ML(1) 李宏毅(1) SQL Server(18) Tempdb(1) SSMS(1) Windows(1) 自我成長(2) Excel(1) python Flask(1) python(5) Flask(2)
Max Chen (159)