Tôi muốn thực hiện một số mã Python, gõ khi chạy, vì vậy tôi có được chuỗi và gọiSử dụng exec() với chức năng đệ quy
exec(pp, globals(), locals())
nơi pp là chuỗi. Nó hoạt động tốt, ngoại trừ các cuộc gọi đệ quy, e. . G, ví dụ, mã này là OK:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
while True:
horse()
Nhưng lần này không phải là:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
horse()
horse()
NameError: global name 'horse' is not defined
Có cách nào để chạy mã đệ quy không?
CẬP NHẬT
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
trình nếu đưa vào cấp cao nhất. Nhưng nếu chuyển bên trong một hàm:
def fn1():
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
fn1()
lỗi tương tự xảy ra: NameError: tên toàn cầu 'rec' không được định nghĩa
Xin vui lòng cho tôi chuỗi exec đây không phải là từ người dùng đầu vào. –
@Nadia, tại sao, có, nó _is_ :) – Headcrab