Je veux exécuter du code Python, tapé à l'exécution, donc j'obtenir la chaîne et appelezUtiliser exec() avec des fonctions récursives
exec(pp, globals(), locals())
où pp est la chaîne. Cela fonctionne bien, sauf pour les appels récursifs, e. . G, par exemple, ce code est OK:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
while True:
horse()
Mais celui-ci n'est pas:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
horse()
horse()
NameError: global name 'horse' is not defined
Est-il possible d'exécuter du code récursif ainsi?
MISE À JOUR
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
Works si elles sont mises sur le haut niveau. Mais si elle est déplacée dans une fonction:
def fn1():
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
fn1()
la même erreur se produit: NameError: nom global 'rec' est pas défini
S'il vous plaît dites-moi cette chaîne exec ne provient pas d'utilisateur contribution. –
@Nadia, pourquoi, oui, c'est _is_ :) – Headcrab