即使执行后,我也找不到执行的功能。
这是功能:
# function illustrating how exec() functions.
def exec_code():
LOC = """
def factorial(num):
fact=1
for i in range(1,num+1):
fact = fact*i
return fact
print(factorial(5))
"""
exec(LOC)
print(factorial)
# Driver Code
exec_code()
但是,这会产生错误:
NameError Traceback (most recent call last)
<ipython-input-10-d403750cbbfb> in <module>
13
14 # Driver Code
---> 15 exec_code()
<ipython-input-10-d403750cbbfb> in exec_code()
10 """
11 exec(LOC)
---> 12 print(factorial)
13
14 # Driver Code
NameError: name 'factorial' is not defined
我真的很想执行一个字符串函数作为上述模式。有人知道如何解决吗?如果不建议执行,是否还有其他解决方案?
答案 0 :(得分:1)
根据exec(object[, globals[, locals]])
的文档
https://docs.python.org/3/library/functions.html#exec
注意:默认的本地语言按照下面对函数locals()的描述操作: 对默认本地字典的修改不应 尝试。如果需要查看,通过一个明确的本地字典 函数exec()返回后,代码对本地语言的影响。
因此,您需要以全局变量和本地变量的形式传递自己的本地变量:
mylocals = {}
exec(your_code, mylocals, mylocals)
然后您可以通过mylocals调用它:
print(mylocals['factorial']())
答案 1 :(得分:1)
您可以将globals()赋予exec调用,以使其将函数添加到当前模块中:
exec(LOC,globals())