python中eval和exec有什么区别?

时间:2013-01-22 10:14:41

标签: python exec eval

  

可能重复:
  What’s the difference between eval, exec, and compile in Python?

我知道

  1. eval是function
  2. exec是statement
  3. 两者的简单用法是:

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

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

    1. 使用变量存储函数名称,并使用此变量 叫功能
      例如:

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

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

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

      m = 'sys'
      exec "import " + m
      

      这是原因:
      import module_name是一个陈述,而不是表达? 和:
      eval仅用于计算表达式
      exec会在str?

    3. 中运行语句

1 个答案:

答案 0 :(得分:3)

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

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

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

y = eval('x + 1')

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