時更具體地說,我有一個文件如何使__name__ == '__main__' 運行模塊
文件file1.py:
if __name__ == '__main__':
a = 1
,並從文件file2.py,我想要做的事像
import file1
print file1.a
,而無需修改file1.py
時更具體地說,我有一個文件如何使__name__ == '__main__' 運行模塊
文件file1.py:
if __name__ == '__main__':
a = 1
,並從文件file2.py,我想要做的事像
import file1
print file1.a
,而無需修改file1.py
import imp
m = imp.find_module('file1')
file1 = imp.load_module('__main__', *m)
這就是說,你應該真的考慮修改file1.py
而不是使用這個黑客。
完美,謝謝! – Colin 2011-05-24 17:48:03
您將需要申報a
outsid e的if __name__ == '__main__'
範圍。目前,它只存在於if
區塊的範圍內。
a = 0
if __name__ == '__main__':
a = 1
不正確。 python中的語句沒有自己的作用域。只有模塊,功能和類可以。在這種特殊情況下,'a'是全局名稱,如果執行'if',則可以在'if'之外訪問。 – 2011-05-24 23:48:02
謝謝你的糾正! – mwcz 2011-05-26 15:46:47
你不能;這首先是主要哨兵的目的。如果主標記中定義的變量在其外部是有用的,那麼它們應該在其之外定義以便開始。
雖然我同意這是一個壞主意,但你可以(如果需要'execfile'&co)。查看我的答案,爲'__name__'更改*相對乾淨的黑客*。 – phihag 2011-05-24 17:33:36
from runpy import run_module
data = run_module("file1", run_name="__main__")
print data["a"]
你不需要惹導入內部做這樣的事情的話(並作爲額外的獎勵,你會避免阻塞你的真正__main__
模塊命名空間訪問)
我我敢打賭,如果你說出爲什麼需要這個原因,我們可以給你一個更好的實現方法。 – RoeeK 2011-05-24 17:31:04
描述手頭的任務可以幫助您獲得更好的解決方案 – 2011-05-24 18:15:08
知道這是否可行,無論它是否是一個好主意,仍然很好。 – mwcz 2011-05-24 18:17:54