第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在Python中使用** kwargs的正確方法

在Python中使用** kwargs的正確方法

繁星coding 2019-09-18 10:44:01
**kwargs在默認(rèn)值方面,在Python中使用的正確方法是什么?kwargs返回字典,但設(shè)置默認(rèn)值的最佳方法是什么,還是有一個(gè)?我應(yīng)該只是作為字典訪問它嗎?使用get函數(shù)?class ExampleClass:    def __init__(self, **kwargs):        self.val = kwargs['val']        self.val2 = kwargs.get('val2')一個(gè)簡(jiǎn)單的問題,但我找不到好的資源。人們?cè)谖铱催^的代碼中采用不同的方式,并且很難知道要使用什么。
查看完整描述

3 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以為默認(rèn)值傳遞給get()不在字典中的鍵:


self.val2 = kwargs.get('val2',"default value")

但是,如果您計(jì)劃使用具有特定默認(rèn)值的特定參數(shù),為什么不首先使用命名參數(shù)?


def __init__(self, val2="default value", **kwargs):


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

雖然大多數(shù)答案都是這樣說的,例如,


def f(**kwargs):

    foo = kwargs.pop('foo')

    bar = kwargs.pop('bar')

    ...etc...

是相同的”


def f(foo=None, bar=None, **kwargs):

    ...etc...

這不是真的。在后一種情況下,f可以稱為f(23, 42),而前者的情況下接受命名的參數(shù)只有 -沒有位置的調(diào)用。通常,您希望允許調(diào)用者具有最大的靈活性,因此第二種形式(因?yàn)榇蠖鄶?shù)答案斷言)更可?。旱闆r并非總是如此。當(dāng)你接受許多可選參數(shù)時(shí),通常只有少數(shù)幾個(gè)被傳遞,這可能是一個(gè)很好的想法(避免在你的呼叫站點(diǎn)發(fā)生意外和不可讀的代碼?。﹣?lái)強(qiáng)制使用命名參數(shù) - threading.Thread就是一個(gè)例子。第一種形式是如何在Python 2中實(shí)現(xiàn)它。


成語(yǔ)是如此重要,以至于在Python 3現(xiàn)在有特殊的支持語(yǔ)法:?jiǎn)魏竺總€(gè)參數(shù)*的def簽名關(guān)鍵字只,也就是說,不能被作為位置參數(shù)傳遞,但只是作為一個(gè)命名的。所以在Python 3中你可以將上面的代碼編寫為:


def f(*, foo=None, bar=None, **kwargs):

    ...etc...

實(shí)際上,在Python 3中,您甚至可以使用非關(guān)鍵字的參數(shù),這些參數(shù)不是可選的(沒有默認(rèn)值的參數(shù))。


但是,Python 2仍然有很長(zhǎng)一段時(shí)間的生產(chǎn)生活,所以最好不要忘記讓你在Python 2中實(shí)現(xiàn)的技巧和習(xí)慣用法在Python 3中直接支持的重要設(shè)計(jì)思想!


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

我建議這樣的事情


def testFunc( **kwargs ):

    options = {

            'option1' : 'default_value1',

            'option2' : 'default_value2',

            'option3' : 'default_value3', }


    options.update(kwargs)

    print options


testFunc( option1='new_value1', option3='new_value3' )

# {'option2': 'default_value2', 'option3': 'new_value3', 'option1': 'new_value1'}


testFunc( option2='new_value2' )

# {'option1': 'default_value1', 'option3': 'default_value3', 'option2': 'new_value2'}

然后以您想要的任何方式使用值


dictionaryA.update(dictionaryB)添加內(nèi)容dictionaryB以dictionaryA覆蓋任何重復(fù)的鍵。


查看完整回答
反對(duì) 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 3881 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)