Python 中的递归定义

Recursive definitions in Python

我刚 运行 进入 the following way of implementing AutoVivification 在 Python:

from collections import defaultdict

Tree = lambda: defaultdict(Tree)

# common name by class, order, genus, and type-species
common_name = Tree()
common_name['Mammalia']['Primates']['Homo']['H. sapiens'] = 'human being'

下面的构造是如何工作的?

Tree = lambda: defaultdict(Tree)

Tree好像没有在lambda函数体之前定义,也没有作为参数传递。

lambda 函数的主体如何在定义之前知道 Tree?该语言还支持哪些其他类型的递归定义?

这就是像 python 这样的动态语言的伟大之处 -- Tree 在您调用它时定义的。它实际上与任何其他递归函数没有什么不同...

例如你可能不会眨眼看到这个:

def recurse(i):
    if i > 0:
        recurse(i-1)

之所以有效,是因为 python 创建了递归函数。然后当你调用它时,python 在到达该行时查找递归函数并调用它并...

在这种情况下,它确实没有太大区别 -- 您的 lambda 可以这样写(也许更清楚):

def Tree():
    return defaultdict(Tree)

相当于:

def Tree():
    return defaultdict(Tree)

函数的内容不会立即求值,只有在它被调用时才会求值,此时它可以知道关于Tree。这就是递归函数可以工作的原因。