對于大部分Python新手來說,*args和**kwargs這兩個魔法變量需要花大量的時間來解釋。那麼它們到底是什麼呢?在什麼時候使用它們呢?要搞清楚這些問題,首先你要明白,其實并不是必須寫成*args和**kwargs。隻有變量前面的*(星号)才是必須的。那下面就讓我們先看看在Python中*args 和 **kwargs的用法總結吧。
1、*args的用法
*args和**kwargs主要用于函數定義。你可以将不定數量的參數傳遞給一個函數。這裡的不定指的是預先并不知道函數使用者會傳遞多少個參數給你,是以在這個場景下使用這兩個關鍵字。*args是用來發送一個非鍵值對的可變數量的參數清單給一個函數.下面舉個例子幫你了解這個概念:
def test_ var_ args(f_ _arg, *argv) :
print ("first normal arg:", f_ arg)
for arg in argv :
print ( " another arg through *argv:", arg)
test_ var_ args(' yasoob',' python',' eggs' ,' test' )
這會産生如下輸出:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv : test
2、**kwargs的用法
**kwargs允許你将不定長度的鍵值對,作為參數傳遞給一個函數。 如果你想要在一個函數裡處理帶名字的參數,你應該使用**kwargs。這裡有個讓你上手的例子:
def greet_ me (**kwargs) :
for key, value in kwargs. items () :
print("{0} == {1}". format (key, value) )
>>> greet me (name="yasoob")
name == yasoob
現在你可以看出我們怎樣在一個函數裡,處理了一個鍵值對參數了。這就是**kwargs的基礎,而且你可以看出它有多麼管用。
3、使用*args和**kwargs來調用函數
假設你有這樣一個小函數:
def test_ _args_ kwargs (arg1, arg2, arg3) :
print ("arg1:",arg1)
print("arg2:", arg2) .
print ("arg3:",arg3)
你可以使用*args或** kwargs來給這個小函數傳遞參數。下面是怎樣做:
#口先使口 *args .
>>> args = ("two", 3, 5)
>>> test_ args_ kwargs (*args)
arg1: twO
arg2: 3
arg3: 5
# 現在使口 **kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_ args_ kwargs (** kwargs)
arg1: 5
arg2: two
arg3: 3
4、标準參數與*args、**kwargs在使用時的順序
那麼如果你想在函數裡同時使用所有這三種參數,順序是這樣的:
some_ func(fargs, *args, **kwargs)
5、什麼時候使用Python中*args 和 **kwargs?
import someclass
def get_ info(self, *args) :
return "Test data"
someclass.get_ info = get_ info