这个Lambda Expression如何工作?

时间:2016-05-16 01:06:53

标签: python dictionary

我熟悉简单的lambda表达式。但是我在书中有这个lambda表达式。

dd_pair = defaultdict(lambda: [0,0])
dd_pair[2][1] = 1    #now dd_pair contains {2: [0,1]}

我没有声明任何输入变量,这不是我学习Lambdas的方式。

本书前面的例子有

dd_dict = defaultdict(dict)
dd_dict["Joel"]["City"] = "Seattle"
#this produces {"Joel" : { "City": "Seattle"}}

这是有道理的,密钥为Joel,嵌套密钥为City,值为Seattle

我的两个部分问题是,lambda如何在没有输入变量的情况下工作?我应该假设dd_pair[2][1]是要创建密钥2并在列表的索引1设置值=1

1 个答案:

答案 0 :(得分:2)

lambda: [0, 0]与以下内容完全相同:

def zero_pair():
    return [0, 0]

也就是说,它是一个不带参数的函数,并返回一个len 2数组,其中两个条目设置为0. defaultdict采用一个不带参数的可调用函数并返回一个值缺少密钥,因此您的第二个示例(dd_pair = defaultdict(lambda: [0,0]))与:

相同
dd_pair = defaultdict(zero_pair)

现在,Python中的字典可以为其键获取任何值(只要它们是hashable)。

{0: 'integer', '0': 'string'}[0]  # 'integer'

所以当我们用{2}索引dd_pair时,因为字典在2没有任何键,所以我们的lambda(相当于zero_pair)被调用并返回一个列表中有两个零。然后,我们将该列表中的第二个元素设置为1,使列表发生变异。

所以,是的,当你说:

时,你几乎可以看到
  

我应该假设dd_pair[2][1]是创建一个密钥2并且在列表的索引1处设置值= 1