2013-01-22 57 views
2

可能重複:
What’s the difference between eval, exec, and compile in Python?在python中eval和exec有什麼區別?

我知道

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

    I型(FUNC)返回

    func = eval(func)
    <type 'function'>
    我讀了eval的文檔,但是我不知道爲什麼eval可以做 這個。

  2. 使用變量存儲模塊名稱,並使用此變量導入模塊。
    例如。

    m = 'sys' 
    exec "import " + m 
    

    就是這個道理:
    import module_name是一個聲明,而不是體現在哪裏?
    和:
    eval只計算表達式
    exec是否在str中運行語句?

+0

@avasal你好,我看過這篇文章,但我不知道我的問題的兩個例子,你可以看到它。 –

+0

@TankyWoo要添加一個新行,請添加兩個空格,然後從下一行開始寫入。 :) – pradyunsg

+0

這個問題詢問有關eval/exec的高級用法,甚至在建議的重複中都沒有提及,它是示例,所以它不是重複的,只是更具體。 –

回答

3

您對存儲函數的名稱問題的部分可以通過這樣的事實,這將是等效的解釋:

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

在你的榜樣,以eval()的調用是不超過就像一個呼叫不同:

y = eval('x + 1') 

我相信你的第二個問題是一樣的this one,答案可能會有所幫助。

+0

但我不知道'func = eval(func)'可以使str成爲函數類型嗎? –

相關問題