转向具有 C/Java 背景的 python,我最近不得不实现一个相互递归,但是 python 中的一些东西困扰着我:
由于一个python程序是逐行解释的,如果我在同一个python文件中一个接一个地有两个函数:
def A(n):
B(n-1)
# if I add A(1) here, it gives me an error
def B(n):
if n <= 0:
return
else:
A(n-1)
当解释器正在阅读A
时,B
尚未定义,但是这段代码不会给我一个错误
我的理解是,当被解释时,python 会在一些本地名称空间中def
添加一个条目,但对于函数体,它只进行语法检查:locals()
{"function name": function address}
def A():
blabla # this will give an error
def B():
print x # even though x is not defined, this does not give an error
A() # same as above, NameError is only detected during runtime