0

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

这是功能:

# 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

我真的很想像上面的模式那样执行一个字符串函数。有谁知道如何解决它?如果不推荐 exec,还有其他解决方案吗?

4

2 回答 2

1

根据文档exec(object[, globals[, locals]])

https://docs.python.org/3/library/functions.html#exec

注意 默认本地变量的作用与下面函数 locals() 的描述相同:不应尝试修改默认的 locals 字典。如果您需要在函数 exec() 返回后查看代码对局部变量的影响,请传递显式局部变量字典。


因此,您需要将自己的 locals dict 作为 globals 和 locals 传递:

mylocals = {}
exec(your_code, mylocals, mylocals)

然后你可以通过 mylocals 调用它:

print(mylocals['factorial']())
于 2019-06-22T02:54:41.493 回答
1

您可以将 globals() 赋予 exec 调用以使其将函数添加到当前模块:

exec(LOC,globals()) 
于 2019-06-22T02:58:45.257 回答