Przeprowadzka do Pythona z C/Java tła, Niedawno miałem do wdrożenia wzajemnej rekursji, ale coś w Pythonie przeszkadza mi:W jaki sposób Python implementuje wzajemną rekursję?
ponieważ program python interpretuje wiersz po wierszu, jeśli mam dwie funkcje jeden po drugim w tym samym pliku 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)
Gdy interpreter czyta A
, B
nie jest jeszcze zdefiniowany, jednak ten kod nie nie dają mi błąd
TL; DR moim rozumieniu jest to, że kiedy def
jest interpretowany, Python dodaje wpis do jakiejś nazwy lokalnej przestrzeni locals()
z {"function name": function address}
, ale jak dla ciała funkcji, to tylko zrobić sprawdzenie składni:
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
"SyntaxError" zostanie przechwycony podczas kompilacji, ale większość innych błędów ('NameError',' ValueError', itp.) Zostanie przechwyconych tylko w środowisku wykonawczym, a następnie tylko wtedy, gdy ta funkcja zostanie wywołana. – TigerhawkT3
łatwe do sprawdzenia, prawda? 'def f(): błąd sytax' czy produkt jest błędem ... – yurib