【问题标题】:what is the difference between eval and exec in python? [duplicate]python中的eval和exec有什么区别? [复制]
【发布时间】:2013-01-05 12:57:05
【问题描述】:

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

我知道

  1. eval 是function
  2. exec 是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 中的语句?

【问题讨论】:

  • @avasal你好,我看过这篇文章,但是我的问题我不知道这两个例子,你可以看看。
  • @TankyWoo 要添加新行添加两个空格并从下一行开始写入。 :)
  • 这个问题询问 eval/exec 的高级用法,在提议的副本和示例中甚至都没有提到它,所以它不是重复的,只是更具体。

标签: python exec eval


【解决方案1】:

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

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

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

y = eval('x + 1')

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

【讨论】:

  • 但是我不知道func = eval(func)怎么能把str变成函数类型?
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 2015-05-18
  • 2010-12-10
  • 2016-08-24
相关资源
最近更新 更多