我有一个包含函数的字符串变量。该函数如下所示:
def program():
x[0] = y[1]
z[0] = x[0]
out = z[0]
这是一种方法:
def runExec(self, stringCode):
x = [1,2,3,4]
y = [5,6,7,8]
z = [6,7,8,9]
exec stringCode
return out
我收到一个NameError,似乎无法从stringCode exec访问x,y和z?
如何使这些变量可访问,我是否必须以某种方式传递它们?
由于
答案 0 :(得分:2)
假设您有充分的理由使用exec
,这是一个假设,您应该仔细检查。
您需要提供exec
功能的全局和本地范围。此外,“程序”字符串需要实际运行而不是仅定义一个函数。这将有效:
prog = """
x[0] = y[1]
z[0] = x[0]
out = z[0]
"""
def runExec(stringCode):
x = [1,2,3,4]
y = [5,6,7,8]
z = [6,7,8,9]
exec(stringCode, globals(), locals())
return out
print runExec(prog)
答案 1 :(得分:1)
为什么需要使用exec
?以下代码应该以相同的方式工作,只是没有exec
:
def program(x, y, z):
x[0] = y[1]
z[0] = x[0]
out = z[0]
return out
def runExec(self, func):
x = [1,2,3,4]
y = [5,6,7,8]
z = [6,7,8,9]
out = func(x, y, z)
return out
self.runExec(program)
答案 2 :(得分:1)
你可以让它们成为全球性的。
global x,y,z
def runExec(self, func):
x = [1,2,3,4]
y = [5,6,7,8]
z = [6,7,8,9]
out = func(x, y, z)
return out