时更具体地说,我有一个文件如何使__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