<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    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')  # 編譯為表達

    posted on 2009-06-04 22:07 周銳 閱讀(13413) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 久久亚洲免费视频| 亚洲国产精品成人久久| 99999久久久久久亚洲| 午夜不卡久久精品无码免费| 亚洲国产精品国自产拍AV| 国产羞羞的视频在线观看免费| 一本色道久久综合亚洲精品| 成人毛片100免费观看| 国产精品亚洲片在线| 亚在线观看免费视频入口| 婷婷精品国产亚洲AV麻豆不片| 99re免费在线视频| 亚洲日本在线观看网址| 免费无码AV片在线观看软件| 亚洲AV无码国产剧情| 亚洲国产香蕉人人爽成AV片久久| 一区二区三区免费在线观看| 亚洲国产精品一区第二页 | 亚洲人成网站在线观看播放青青| www视频在线观看免费| 亚洲一区二区无码偷拍| 免费在线观看一级毛片| 99久久免费国产特黄| 亚洲美女激情视频| 在线观看免费大黄网站| 午夜免费国产体验区免费的| 亚洲2022国产成人精品无码区| 国产精品成人免费福利| 99亚洲男女激情在线观看| 久久亚洲av无码精品浪潮| 精品一区二区三区免费毛片爱 | 亚洲A丁香五香天堂网| 免费国产99久久久香蕉| 亚洲国产一区二区三区在线观看| 亚洲国产精品自在拍在线播放 | 噼里啪啦电影在线观看免费高清| 国产尤物在线视精品在亚洲| 亚洲成av人片天堂网| 午夜一级免费视频| 精品免费视在线观看| 国产偷国产偷亚洲清高APP|