6

I'm in IDLE:

>>> import mymodule
>>> # ???

After importing a module with:

if __name__ == '__main__':
    doStuff()

How do I actually call main from IDLE?

4

7 回答 7

12

if 条件__name__ == '__main__'是为了让代码在直接执行模块时运行,而不是在导入模块时运行。确实没有像 Java 这样的“主要”概念。在解释 Python 时,在导入/运行模块时会读取并执行所有代码行。

Python 提供了__name__一种机制来区分导入情况和将模块作为脚本运行时的情况,即python mymodule.py. 在第二种情况下__name__将具有价值'__main__'

如果您想要一个可以运行的 main(),只需编写:

def main():
   do_stuff()
   more_stuff()

if __name__ == '__main__':
   main()
于 2010-05-29T16:58:17.167 回答
3

如果你导入一些东西,它不是主要的。当您开始空闲时,您需要从菜单或作为参数运行它。

于 2010-05-29T16:55:48.297 回答
1

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()
于 2010-05-29T16:54:41.907 回答
1

我在 Python 2.6 中找到了另一种按名称运行模块的方法:

>>> import runpy
>>> runpy.run_module('mypack.mymodule')

run_module 返回一个包含所有创建属性的字典

http://docs.python.org/library/runpy.html?highlight=runpy#runpy.run_module

于 2010-06-17T23:00:17.960 回答
1

编辑:更新了这个旧答案,因为execfile它在 Python 3 中被删除了。

使用 Python 2

使用execfile (ie execfile(file_path)) 而不是使用 import。

使用 Python 3

按照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!
于 2010-05-29T19:15:01.357 回答
1

关于taleinat提到的execfile。

建议使用 Python 3.5 已弃用的 execfile 代替以下方法。

删除了 execfile()。代替 execfile(fn) 使用 exec(open(fn).read())。

PS:由于stackoverflow中缺乏声誉点,我无法评论taleinat的解决方案。

于 2016-10-28T07:14:49.577 回答
0

您所要做的就是像 joaquin 所说的那样调用 main 函数本身。我的做法是在文件所在位置保持一个终端打开,并在需要时重新运行该命令。最后一种方法是使用 geany 或 Idle 之类的 IDE 并使用 (file>open) 打开它,然后按 F5。
这:

if __name__ == '__main__':
doStuff()

如果它被导入,你实际上是为了阻止 main 函数运行。

于 2010-05-29T17:28:36.320 回答