[英]defaultdict, functions and lambdas
我一直在玩默認字典而且我很困惑
為什么這不起作用:
例1
def hi(name):
return "hi " + name
a = defaultdict(hi)
print(a["hello"]("jane"))
輸出示例1
TypeError: hi() missing 1 required positional argument: 'name'
但這樣做:
例2
def hi(name):
return "hi " + name
a = {"hello":hi}
print(a["hello"]("jane"))
輸出示例2
hi jane
也使用lambda會使它工作
例3
def hi(name):
return "hi " + name
a = defaultdict(lambda: hi)
print(a["hello"]("jane"))
輸出示例 3
hi jane
為什么示例1返回錯誤而示例3沒有?
這是怎么回事?
當defaultdict沒有找到鍵時,它會調用沒有任何參數的函數。 同
def hi(name):
return "hi " + name
a = defaultdict(hi)
a["hello"]
, hi
已被調用,盡管你希望它稍后才被調用。 由於在默認情況下沒有任何參數調用hi
,因此您會看到手動運行hi()
時看到的相同錯誤,即TypeError
抱怨錯誤的參數計數。
寫出lambda的另一種方法(僅用於教學目的)將是
def hi(name):
return "hi " + name
def make_hi():
return hi
a = defaultdict(make_hi)
print(a["hello"]("jane"))
在這里,訪問a["hello"]
調用make_hi
,然后返回hi
,然后使用參數("jane")
調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.