Trasferirsi in pitone con C/Java sfondo, di recente ho dovuto implementare una ricorsione mutua, ma qualcosa in python mi dà fastidio:In che modo Python implementa la ricorsione reciproca?
dal momento che un programma Python è interpretato riga per riga, se ho due funzioni una dopo l'altra nello stesso file 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)
Quando l'interprete sta leggendo A
, B
non è ancora definita, ma questo codice non non mi danno un errore
TL; DR mia comprensione è che, quando def
viene interpretato, pitone aggiunge una voce un pò di spazio nome locale locals()
con {"function name": function address}
, ma come per il corpo della funzione, solo fare un controllo della sintassi:
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
Un errore "SyntaxError" verrà catturato in fase di compilazione, ma la maggior parte degli altri errori ('NameError',' ValueError', ecc.) Verranno rilevati solo in fase di esecuzione e solo se tale funzione viene chiamata. – TigerhawkT3
abbastanza facile da controllare non è vero? 'def f(): sytax error' produce un errore ... – yurib