Переходя к python с фоном C/Java, мне недавно пришлось реализовать взаимную рекурсию, но что-то в 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
еще не определен, однако этот код не дает мне ошибку
TL; DR
Я понимаю, что, когда def
интерпретируется, python добавляет запись в какое-то локальное пространство имен 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