実行時に入力されたPythonコードを実行したいので、文字列を取得して呼び出します
exec(pp、globals()、locals())
ここで、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:グローバル名'horse'が定義されていません
再帰コードを実行する方法もありますか?
アップデート
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:グローバル名'rec'が定義されていません