您好,登錄后才能下訂單哦!
Python中*args 和 **kwargs有哪些用法?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
1、*args的用法
*args和**kwargs主要用于函數(shù)定義。你可以將不定數(shù)量的參數(shù)傳遞給一個(gè)函數(shù)。這里的不定指的是預(yù)先并不知道函數(shù)使用者會(huì)傳遞多少個(gè)參數(shù)給你,所以在這個(gè)場(chǎng)景下使用這兩個(gè)關(guān)鍵字。*args是用來(lái)發(fā)送一個(gè)非鍵值對(duì)的可變數(shù)量的參數(shù)列表給一個(gè)函數(shù).下面舉個(gè)例子幫你理解這個(gè)概念:
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' )
這會(huì)產(chǎn)生如下輸出:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv : test
2、**kwargs的用法
**kwargs允許你將不定長(zhǎng)度的鍵值對(duì),作為參數(shù)傳遞給一個(gè)函數(shù)。 如果你想要在一個(gè)函數(shù)里處理帶名字的參數(shù),你應(yīng)該使用**kwargs。這里有個(gè)讓你上手的例子:
def greet_ me (**kwargs) :
for key, value in kwargs. items () :
print("{0} == {1}". format (key, value) )
>>> greet me (name="yasoob")
name == yasoob
現(xiàn)在你可以看出我們?cè)鯓釉谝粋€(gè)函數(shù)里,處理了一個(gè)鍵值對(duì)參數(shù)了。這就是**kwargs的基礎(chǔ),而且你可以看出它有多么管用。
3、使用*args和**kwargs來(lái)調(diào)用函數(shù)
假設(shè)你有這樣一個(gè)小函數(shù):
def test_ _args_ kwargs (arg1, arg2, arg3) :
print ("arg1:",arg1)
print("arg2:", arg2) .
print ("arg3:",arg3)
你可以使用*args或** kwargs來(lái)給這個(gè)小函數(shù)傳遞參數(shù)。下面是怎樣做:
#口先使口 *args .
>>> args = ("two", 3, 5)
>>> test_ args_ kwargs (*args)
arg1: twO
arg2: 3
arg3: 5
# 現(xiàn)在使口 **kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_ args_ kwargs (** kwargs)
arg1: 5
arg2: two
arg3: 3
4、標(biāo)準(zhǔn)參數(shù)與*args、**kwargs在使用時(shí)的順序
那么如果你想在函數(shù)里同時(shí)使用所有這三種參數(shù),順序是這樣的:
some_ func(fargs, *args, **kwargs)
5、什么時(shí)候使用Python中*args 和 **kwargs?
這還真的要看你的需求而定。最常見(jiàn)的用例是在寫函數(shù)裝飾器的時(shí)候。此外它也可以用來(lái)做猴子補(bǔ)丁。猴子補(bǔ)丁的意思是在程序運(yùn)行時(shí),(runtime)修改某些代碼。打個(gè)比方,你有一個(gè)類,里面有個(gè)叫get_ info的函數(shù)會(huì)調(diào)用一個(gè)API并返回相應(yīng)的數(shù)據(jù)。如果我們想測(cè)試它,可以把API調(diào)用替換成一些測(cè)試數(shù)據(jù)。例如:
import someclass
def get_ info(self, *args) :
return "Test data"
someclass.get_ info = get_ info
看完上述內(nèi)容,你們掌握Python中*args 和 **kwargs有哪些用法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。