とのexec()を使用して、私は、実行時に入力されたいくつかのPythonコードを実行したいので、私は文字列を取得し、頁は文字列です再帰関数
exec(pp, globals(), locals())
を呼び出します。再帰呼び出しを除いて正常に動作します。 。
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
while True:
horse()
しかし、これではありません::gが、例えば、このコードはOKです
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
horse()
horse()
NameError: global name 'horse' is not defined
も同様に再帰的なコードを実行する方法はありますか?
UPDATE
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」が
により示唆されるように、「グローバルfuncnameに」ディレクティブを入れることで地元の人々は、このexecの文字列は、ユーザからのものではない教えてください入力。 –
@Nadiaなぜ、はい、それは_is_ :) – Headcrab