溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python獲取函數(shù)所有入?yún)⒌膋ey-value

發(fā)布時(shí)間:2020-07-20 18:36:11 來(lái)源:網(wǎng)絡(luò) 閱讀:4494 作者:騎士救兵 欄目:編程語(yǔ)言

需要拿到一個(gè)函數(shù)里所有的傳入的參數(shù),并且存在一個(gè)字典里。
下面的方法確實(shí)拿到了字典,不過(guò)要求函數(shù)必須用非固定參數(shù)**kwargs定義,而且對(duì)調(diào)用函數(shù)很不友好

def func1(**kwargs):
    d = 'local_d'
    return kwargs

res = func1(a=1, b=2, c=3)
print(res)
# 結(jié)果:
# {'a': 1, 'b': 2, 'c': 3}

locals()函數(shù)會(huì)以字典類(lèi)型返回當(dāng)前位置的全部局部變量,看著很符合現(xiàn)在的需求:

def func2(a, b, c):
    d = 'local_d'
    return locals()

res = func2(1, 2, 3)
print(res)
# 結(jié)果:
# {'d': 'local_d', 'c': 3, 'b': 2, 'a': 1}

想著很好,但是實(shí)際用的時(shí)候,最后會(huì)把函數(shù)內(nèi)部其他變量也返回。不完美,只想要入?yún)⒌淖值洹?br/>最后機(jī)制的小伙伴想到了,其實(shí)還是上面的方法:

def func3(a, b, c):
    kwargs = locals()
    d = 'local_d'
    return kwargs

res = func3(1, 2, 3)
print(res)
# 結(jié)果
# {'c': 3, 'b': 2, 'a': 1}

其實(shí)就是在函數(shù)的開(kāi)始,其他變量還沒(méi)有出現(xiàn)的時(shí)候,就想把當(dāng)前的locals()取出來(lái),等到最后再返回。完美!

向AI問(wèn)一下細(xì)節(jié)
AI