2

可能重复:
Python 中的 eval、exec 和 compile 有什么区别?

我知道

  1. 评估是一个function
  2. 执行是一个statement

两者的简单用法是:

eval('1+2')
exec 'print 1+2'

但是还有其他一些我无法理解的用法。

  1. 使用变量存储函数名,并使用此变量调用函数,
    例如:

    def test():
        print 'hello world'
    func = 'test'
    func = eval(func)
    func() # this will call test()
    


    func = eval(func)
    我在它返回后键入(func)
    <type 'function'>
    我阅读了 的文档eval,但我不知道为什么 eval 可以这样做。

  2. 使用变量存储模块名称,并使用此变量导入模块。
    例如。

    m = 'sys'
    exec "import " + m
    

    是不是这个原因:
    import module_name是陈述,不是表达?
    和:
    eval是否只计算一个表达式
    exec是否运行str中的语句?

4

1 回答 1

3

您关于存储函数名称的部分问题可以通过以下事实来解释:这将是等效的:

def test():
    print 'hello world'
func = test
func() # this will call test()

您的示例中的调用eval()与以下调用没有什么不同:

y = eval('x + 1')

我相信您的第二个问题与此相同,答案可能会有所帮助。

于 2013-01-22T10:23:02.940 回答