2010年2月28日 星期日

注意 Python exec 的 scope

在 iPython 裡無法用 exec? 查到 exec 的文件, 卻能查到 eval、execfile。我才發現原來 Python 2 的 exec 是 statement! 如同 print, 到 Python 3 才改為 function。

若要讓 exec 執行後的結果能被其它 scope 的程式存取, 要改用「exec CODE in globals()」或「exec CODE in locals(), globals()」, 見下面的例子:

def add_hello():
    exec "def hello(): print 'hello'"
    hello()

add_hello()  # "hello"
hello()  # NameError: name 'hello' is not defined

def add_hello():
    exec "def hello(): print 'hello'" in locals(), globals()
    hello()

add_hello()  # "hello"
hello()  # "hello"

1 則留言:

  1. Nice blog thanks to share this with us. people find many solutions here. students can learn easily from this article.
    we are providing an all assignment service you will find all python assignment on our website.
    python assignment help

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...