python中eval, exec, execfile,和compile [轉載]

來源:互聯網
上載者:User

eval(str [,globals [,locals ]])函數將字串str當成有效Python運算式來求值,並返回計算結果。

同樣地, exec語句將字串str當成有效Python代碼來執行.提供給exec的代碼的名稱空間和exec語句的名稱空間相同.

最後,execfile(filename [,globals [,locals ]])函數可以用來執行一個檔案,看下面的例子:

>>> eval('3+4')
7
>>> exec 'a=100'
>>> a
100
>>> execfile(r'c:\test.py')
hello,world!
>>>
預設的,eval(),exec,execfile()所啟動並執行代碼都位於當前的名字空間中. eval(), exec,和 execfile()函數也可以接受一個或兩個可選字典參數作為代碼執行的全域名字空間和局部名字空間. 例如:

1 globals = {'x': 7,
2            'y': 10,
3            'birds': ['Parrot', 'Swallow', 'Albatross']
4           }
5 locals = { }
6
7 # 將上邊的字典作為全域和局部名稱空間
8 a = eval("3*x + 4*y", globals, locals)
9 exec "for b in birds: print b" in globals, locals   # 注意這裡的文法
10 execfile("foo.py", globals, locals)

如果你省略了一個或者兩個名稱空間參數,那麼當前的全域和局部名稱空間就被使用.如果一個函數體內嵌嵌套函數或lambda匿名函數時,同時又在函數主體中使用exec或execfile()函數時, 由於牽到嵌套範圍,會引發一個SyntaxError異常.(此段原文:If you omit one or both namespaces, the current values of the global and local namespaces are used. Also,due to issues related
to nested scopes, the use of exec or execfile() inside a function body may result in a SyntaxError exception if that function also contains nested function definitions or uses the lambda operator.)

在Python2.4中俺未發現可以引起異常
注意例子中exec語句的用法和eval(), execfile()是不一樣的. exec是一個語句(就象print或while), 而eval()和execfile()則是內建函數.
exec(str) 這種形式也被接受,但是它沒有傳回值。
當一個字串被exec,eval(),或execfile()執行時,解譯器會先將它們編譯為位元組代碼,然後再執行.這個過程比較耗時,所以如果需要對某段代碼執行很多次時,最好還是對該代碼先進行先行編譯,這樣就不需要每次都編譯一遍代碼,可以有效提高程式的執行效率。
compile(str ,filename ,kind )函數將一個字串編譯為位元組代碼, str是將要被編譯的字串, filename是定義該字串變數的檔案,kind參數指定了代碼被編譯的類型-- 'single'指單個語句, 'exec'指多個語句, 'eval'指一個運算式. cmpile()函數返回一個代碼對象,該對象當然也可以被傳遞給eval()函數和exec語句來執行,例如:

1 str = "for i in range(0,10): print i"
2 c = compile(str,'','exec')      # 編譯為位元組代碼對象
3 exec c                          # 執行
4
5 str2 = "3*x + 4*y"
6 c2 = compile(str2, '', 'eval')  # 編譯為表達

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.