Python在exec()之后找不到执行的函数

时间:2019-06-22 02:28:33

标签: python python-3.x python-exec

即使执行后,我也找不到执行的功能。

这是功能:

# 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

我真的很想执行一个字符串函数作为上述模式。有人知道如何解决吗?如果不建议执行,是否还有其他解决方案?

2 个答案:

答案 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())