我顯然在對Python範圍的理解很差的情況下工作。也許你可以幫忙。「庫」方法的範圍
背景:
我使用
if __name__ == "__main__"
結構來我模塊(S)在執行 「自檢」。每次自測都會調用各種公共方法,並在開發模塊時打印結果以進行視覺檢查。
爲了保持 「普爾蒂」 和可管理的,我創建了一個小方法來簡化方法的調用測試:
def pprint_vars(var_in):
print("%s = '%s'" % (var_in, eval(var_in)))
當
foo = "bar"
與調用pprint_vars:
pprint_vars('foo')
打印:
foo = 'bar'
一切都很好。
問題陳述:
不開心,只是吻,我有腦小雨動我的方便,花花公子「pprint_vars」的方法到一個名爲「debug_tools.py」一個單獨的文件,只需輸入「debug_tools」每當我想訪問'pprint_vars'。
這裏是事情崩潰的地方。我希望
import debug_tools
foo = bar
debug_tools.pprint_vars('foo')
繼續工作它的魔力和打印:
foo = 'bar'
相反,它招呼我:
NameError: name 'some_var' is not defined
非理性的信念:
我相信(顯然是錯誤的)該導入會將輸入方法(或多或少)與代碼「內聯」,因此變量範圍規則將保持類似於如果方法我們重新定義內聯。
請求幫助:
有人可以糾正我對誤區的理解嗎?
感謝, JS
你確定你發佈了完全相同的代碼嗎?它不應該是'foo ='bar''嗎?我找不到錯誤信息中提到的'some_var'。 – 2010-04-07 23:39:14
你是對的,菲利克斯。我很抱歉。我有(希望)糾正錯誤。 – 2010-04-07 23:49:06
'__name__'成語通常寫成'if __name__' =='__main__「:',測試是否相等。它正好使用了__in__運算符,因爲它包含了測試,但有些意外。 – Todd 2010-04-08 02:30:01