我想了解以下內容。將字典傳遞給一個函數**
def exp(**argd):
print(argd)
a={1:'a',2:'b'}
exp(**a)
This will give TypeError: exp() keywords must be strings.
這工作正常,如果我使用a = {'1':'a','2':'b'}。爲什麼我無法將字典鍵作爲數字傳遞給exp函數?
我想了解以下內容。將字典傳遞給一個函數**
def exp(**argd):
print(argd)
a={1:'a',2:'b'}
exp(**a)
This will give TypeError: exp() keywords must be strings.
這工作正常,如果我使用a = {'1':'a','2':'b'}。爲什麼我無法將字典鍵作爲數字傳遞給exp函數?
exp(**a)
在你的榜樣字面上擴展到exp(1='a', 2='b')
,這是一個錯誤,因爲整數文字不能是變量名稱。
您可能會認爲,爲什麼**過程不將字符串轉換爲字符串作爲擴展的一部分?沒有一個單一的理由,但總的來說,Python的哲學是「顯式優於隱式」,隱式轉換可能有一些缺陷 - 例如,許多彼此不同的對象類型將轉換爲相同的字符串,如果您在擴展期間依靠隱式字符串強制轉換,可能會導致意想不到的後果。
既不能''一個變量名''...但它會接受 –
這是一個很好的點,實際上,我讀了你的答案之前我不知道的東西。我只能假設這是一個漏洞或不明確的行爲,而不是一種可接受的方式來創建通常無效的變量名稱! –
我不同意......但是這個事實基本上使很多這個答案imho(這表示它仍然是一個堅實的答案)無效 –
,因爲你不能(圭多大概是唯一一個誰可以告訴你爲什麼)......這讓他們堅持局部變量的命名規則...的**a_dict
拆包字典
a={1:'a',2:'b'}
exp(**a) #is basically exp(1='a',2='b')
這顯然是語法錯誤
雖然它允許有趣的事情像
a = {'a variable':7,'some$thing':88}
exp(**a)
只要他們是字符串...看來,他們執行的唯一規則是他們串...這是有可能保證他們是可哈希(一個巨大的猜測...)
免責聲明:這可能是一個過於簡單化
在python中檢查** kwargs http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python –