我想执行一些 Python 代码,在运行时输入,所以我得到了字符串并调用
执行(pp,全局(),本地())
其中pp是字符串。它工作正常,除了递归调用,例如,这个代码是好的:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
while True:
horse()
但这不是:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
horse()
horse()
NameError:未定义全局名称“马”
有没有办法运行递归代码?
更新
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
如果放在顶层就可以工作。但如果在函数内部移动:
def fn1():
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
fn1()
发生同样的错误: NameError: global name 'rec' is not defined