I'm in IDLE:
>>> import mymodule
>>> # ???
After importing a module with:
if __name__ == '__main__':
doStuff()
How do I actually call main
from IDLE?
I'm in IDLE:
>>> import mymodule
>>> # ???
After importing a module with:
if __name__ == '__main__':
doStuff()
How do I actually call main
from IDLE?
if 条件__name__ == '__main__'
是为了让代码在直接执行模块时运行,而不是在导入模块时运行。确实没有像 Java 这样的“主要”概念。在解释 Python 时,在导入/运行模块时会读取并执行所有代码行。
Python 提供了__name__
一种机制来区分导入情况和将模块作为脚本运行时的情况,即python mymodule.py
. 在第二种情况下__name__
将具有价值'__main__'
如果您想要一个可以运行的 main(),只需编写:
def main():
do_stuff()
more_stuff()
if __name__ == '__main__':
main()
如果你导入一些东西,它不是主要的。当您开始空闲时,您需要从菜单或作为参数运行它。
I suppose that you are calling 'main' what you have after if __name__ == '__main__'
. So to call it:
>> import mymodule
>> mymodule.doStuff()
Otherwise if you actually have a main function in your module then,
>> import mymodule
>> mymodule.main()
我在 Python 2.6 中找到了另一种按名称运行模块的方法:
>>> import runpy
>>> runpy.run_module('mypack.mymodule')
run_module 返回一个包含所有创建属性的字典
http://docs.python.org/library/runpy.html?highlight=runpy#runpy.run_module
编辑:更新了这个旧答案,因为execfile
它在 Python 3 中被删除了。
使用execfile (ie execfile(file_path)
) 而不是使用 import。
按照Carles Barrobés 的回答中的建议使用runpy模块。
更新:
条件的目的是在导入模块时不if __name__ == '__main__'
执行“if”块内的代码。此类代码仅在文件直接运行时才会运行,例如通过从命令行运行“python文件名”或使用.execfile(_filename_)
根据要求,使用 execfile 的示例。在C:\my_code.py
:
if __name__ == '__main__':
print "Hello World!"
然后,在解释器中:
>>> execfile("C:\\my_code.py")
Hello world!
关于taleinat提到的execfile。
建议使用 Python 3.5 已弃用的 execfile 代替以下方法。
删除了 execfile()。代替 execfile(fn) 使用 exec(open(fn).read())。
PS:由于stackoverflow中缺乏声誉点,我无法评论taleinat的解决方案。
您所要做的就是像 joaquin 所说的那样调用 main 函数本身。我的做法是在文件所在位置保持一个终端打开,并在需要时重新运行该命令。最后一种方法是使用 geany 或 Idle 之类的 IDE 并使用 (file>open) 打开它,然后按 F5。
这:
if __name__ == '__main__':
doStuff()
如果它被导入,你实际上是为了阻止 main 函数运行。