3 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以用**kwargs要讓您的函數(shù)接受任意數(shù)量的關(guān)鍵字參數(shù)(“kwargs”意思是“關(guān)鍵字參數(shù)”):
>>> def print_keyword_args(**kwargs):
...? ? ?# kwargs is a dict of the keyword args passed to the function
...? ? ?for key, value in kwargs.iteritems():
...? ? ? ? ?print "%s = %s" % (key, value)
...?
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe
您還可以使用**kwargs通過(guò)構(gòu)造關(guān)鍵字參數(shù)字典并將其傳遞給函數(shù)來(lái)調(diào)用函數(shù)時(shí)的語(yǔ)法:
>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith
這個(gè)Python教程包含了對(duì)它的工作原理的一個(gè)很好的解釋,還有一些很好的例子。
<--Update-->
對(duì)于使用Python 3的人,使用Item()而不是iterItem()

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
kwargs只是一個(gè)字典,它被添加到參數(shù)中。
字典可以包含鍵值對(duì)。那就是小矮人。好吧,就是這樣。
事情并不那么簡(jiǎn)單。
例如,(非常假設(shè)的)您有一個(gè)接口,它只調(diào)用其他例程來(lái)完成任務(wù):
def?myDo(what,?where,?why): ???if?what?==?'swim': ??????doSwim(where,?why) ???elif?what?==?'walk': ??????doWalk(where,?why) ???...
現(xiàn)在,您得到了一種新的方法“驅(qū)動(dòng)”:
elif?what?==?'drive': ???doDrive(where,?why,?vehicle)
但是等一下,有一個(gè)新的參數(shù)“Vehicle”-你以前不知道?,F(xiàn)在,您必須將它添加到mydo函數(shù)的簽名中。
在這里,你可以把kwargs扔進(jìn)游戲中-你只需在簽名中添加kwargs:
def?myDo(what,?where,?why,?**kwargs): ???if?what?==?'drive': ??????doDrive(where,?why,?**kwargs) ???elif?what?==?'swim': ??????doSwim(where,?why,?**kwargs)
這樣,您不需要每次調(diào)用例程更改時(shí)都更改接口函數(shù)的簽名。
添加回答
舉報(bào)