Sup*_*Man 2 python lambda defaultdict
DefaultDicts 是有用的对象,它能够拥有一个字典,该字典可以使用用于定义默认值的可调用函数动态创建新键。例如。用于str使空字符串成为默认值。
>>> food = defaultdict(str)
>>> food['apple']
''
Run Code Online (Sandbox Code Playgroud)
您还可以使用 lambda 将表达式设为默认值。
>>> food = defaultdict(lambda: "No food")
>>> food['apple']
'No food'
Run Code Online (Sandbox Code Playgroud)
但是,您无法将任何参数传递给此 lambda 函数,这会在尝试调用该函数时导致错误,因为您实际上无法将参数传递给该函数。
>>> food = defaultdict(lambda x: "{} food".format(x))
>>> food['apple']
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
food['apple']
TypeError: <lambda>() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
即使您尝试提供参数
>>> food['apple'](12)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
food['apple']
TypeError: <lambda>() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
这些 lambda 函数如何能够响应而不是严格的表达式?
在表达式中使用变量实际上可以在某种程度上避免这种情况。
>>> from collections import defaultdict
>>> baseLevel = 0
>>> food = defaultdict(lambda: baseLevel)
>>> food['banana']
0
>>> baseLevel += 10
>>> food['apple']
10
>>> food['banana']
0
Run Code Online (Sandbox Code Playgroud)
默认 lambda 表达式与一个变量相关联,该变量可以更改而不会影响已创建的其他键。当它可以与仅在访问不存在的键时进行评估的其他函数绑定时,这特别有用。
>>> joinTime = defaultdict(lambda: time.time())
>>> joinTime['Steven']
1432137137.774
>>> joinTime['Catherine']
1432137144.704
>>> for customer in joinTime:
print customer, joinTime[customer]
Catherine 1432137144.7
Steven 1432137137.77
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |