在python中混淆lambda表达式

时间:2014-05-04 13:42:45

标签: python lambda

我对这一个班轮感到有点困惑

tree = lambda: defaultdict(tree)

怎么可能? (lambda应该返回默认字典,但我们如何将第一个arg作为树?)

1 个答案:

答案 0 :(得分:1)

Lambdas延迟评估其内容直到被调用,因此当调用tree()并评估defaultdict(tree)时,tree将被很好地定义,因此不会导致任何问题。一个更明确的例子:

>>> foo = lambda: bar
>>> foo()
NameError: global name 'bar' is not defined
>>> bar = 5
>>> foo()
5

至于这个特殊的lambda做了什么:defaultdict的第一个参数是一个缺少密钥时使用的工厂方法(详见documentation)。所以单线

tree = lambda: defaultdict(tree)

定义一个默认包含其他词典的字典。即一棵树。

例如:

my_tree = tree()

创建一个新树,以下两行做同样的事情:

my_tree["foo"]
my_tree["foo"] = defaultdict(tree)

即创建名为" foo"的新子树。因此,可以在树中深入添加新元素,而无需手动创建每个子树。例如:

root = tree()
root["foo"]["bar"]["baz"] = False