簡體   English   中英

defaultdict,functions和lambdas

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM