
公衆号新增加了一個欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合适,隻希望這個面試欄目,給那些正在準備面試的同學,提供一點點幫助!
小猿會從最基礎的面試題開始,每天一題。如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和讨論,大家是要一起學習的 。
廢話不多說,開始今天的題目:
問:Python中 *args 和 **kwargs 的含義?
答:在python中,*args和**kwargs通常使用在函數定義裡。*args 和 **kwargs 都允許你給函數傳不定數量的參數,即使在定義函數的時候不知道調用者會傳遞幾個參數。ps: *args和**kwargs隻是一個大家都遵守的習慣,名字可以任意寫的 。
1. *args例子
*args能夠接收不定量的非關鍵字參數,會把位置參數轉化為tuple(非鍵值對的參數組),例子如下面代碼所示:
def func(*args):
for i in args:
print(i)
func(1,2,3,4)
運作結果:
1
2
3
4
2.**kwargs 例子
**kwargs允許你傳遞不定量個關鍵字參數。如果你需要在函數中定義不定量個命名參數,那麼你就要使用**kwargs了,它會把關鍵字參數轉化為dict(鍵值對參數組),例子如下面代碼所示:
def func(**kwargs):
for i in kwargs:
print(i,kwargs[i])
func(a=1,b=2,c=3,d=4)
運作結果:
a 1
b 2
c 3
d 4
下面示範個錯誤的案例,看到有個錯誤:"func() takes 0 positional arguments but 4 were given" ,“未定義位置型參數,卻收到了4個參數。” 也就是說,kwargs需要的是帶名稱的參數,而args代表位置型參數(無名稱參數)。從英語上來說,kwargs多出來的kw其實就是keyword的意思,表示這是“鍵值對”參數,就像字典那樣 。這樣解釋,*args 和 **kwargs 兩者的差別,大家掌握了嗎?
def func(**kwargs):
for i in kwargs:
print(i,kwargs[i])
func(1,2,3,4)
運作結果:
Traceback (most recent call last):
File "F:/pyworkspace/hello.py", line 4, in <module>
func(1,2,3,4)
TypeError: func() takes 0 positional arguments but 4 were given