【发布时间】:2010-01-24 03:42:27
【问题描述】:
这是这个星球上最大的新手问题,但我不确定。我编写了一堆执行某些任务的函数,我想要一个“主”函数,例如,当我调用“someProgram.py”时,运行函数 1、函数 2 并退出。我依稀记得一些关于“main”的内容,但我不知道。
【问题讨论】:
-
+1 这是一个很棒的新手问题!
标签: python
这是这个星球上最大的新手问题,但我不确定。我编写了一堆执行某些任务的函数,我想要一个“主”函数,例如,当我调用“someProgram.py”时,运行函数 1、函数 2 并退出。我依稀记得一些关于“main”的内容,但我不知道。
【问题讨论】:
标签: python
Python 脚本不是函数的集合,而是语句的集合 - 函数和类定义只是将名称绑定到函数或类对象的语句。
如果您在程序的顶部或中间放置一条打印语句,它将正常运行而无需在任何函数中。这意味着您可以将所有主要代码放在文件末尾,它会在脚本运行时运行。但是,如果您的脚本曾经被导入而不是直接运行,那么该代码也会运行。这通常不是您想要的,因此您希望避免这种情况。
Python 提供了__name__ 全局变量来区分脚本何时被导入并直接运行——它被设置为脚本运行的名称。如果脚本被导入,它将是脚本文件的名称。如果直接运行,它将是"__main__"。因此,您可以在程序底部放置一个if __name__ == '__main__':,并且此 if 块中的所有内容只有在脚本直接运行时才会运行。
示例。
if __name__ == "__main__":
the_function_I_think_of_as_main()
【讨论】:
__name__ 实际上是“当前”模块的名称,它可以方便地为__main__ 工作(我敢肯定,这不是偶然的)(这是特殊的,但仍然是一个模块)。这很方便与日志记录或stackoverflow.com/questions/2000861/… 结合使用
第一次导入 python 模块时,它的主块运行。您可以区分是自己运行还是导入到另一个程序中:
if __name__ == "__main__":
function1()
function2()
else:
# loaded from another module
【讨论】:
if __name__ == '__main__':
run_main()
【讨论】:
run_main 函数,那么您需要做的就是调用它。 Max S 的回答对我来说更可取。
【讨论】:
当我阅读您的问题时,您正在询问如何定义主要功能。这实际上可以通过以下方式完成:
def main():
function1()
function2()
return 0
然后你会在你的所有主文件的函数之外放置类似这样的代码:
if __name__ == "__main__":
sys.exit(main())
(当然,您需要在某处导入系统才能使上述工作。)
一个(现在有点旧,但仍然相关)post from Guido 告诉更多。
【讨论】:
return 0 ?这是 Python,不是 C :)。
sys.exit 的上下文中阅读它。