我对这一个班轮感到有点困惑
tree = lambda: defaultdict(tree)
怎么可能? (lambda应该返回默认字典,但我们如何将第一个arg作为树?)
答案 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