如何使用带lambda表达式的DefaultDict使默认值可更改?

2024-03-29 12:56:58 发布

您现在位置:Python中文网/ 问答频道 /正文

DefaultDict是一个有用的对象,它可以使用一个用于定义默认值的可调用函数动态创建新的键。例如,使用str将空字符串设为默认值。在

>>> food = defaultdict(str)
>>> food['apple']
''

也可以使用lambda使表达式成为默认值。在

^{pr2}$

但是,您不能将任何参数传递给这个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)

即使你试图提供参数

>>> 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)

这些lambda函数如何响应而不是一个僵化的表达式?在


Tags: lambda函数applemostfood表达式linecall
1条回答
网友
1楼 · 发布于 2024-03-29 12:56:58

在表达式中使用变量实际上可以在一定程度上避免这种情况。在

>>> from collections import defaultdict
>>> baseLevel = 0
>>> food = defaultdict(lambda: baseLevel)
>>> food['banana']
0
>>> baseLevel += 10
>>> food['apple']
10
>>> food['banana']
0

默认lambda表达式绑定到一个变量,该变量可以更改而不影响其已创建的其他键。当它可以与只在访问不存在的键时求值的其他函数绑定时,这一点特别有用。在

^{pr2}$

相关问题 更多 >