可能重复:如果__name __ ==“__ main__”怎么办?
我见过一些使用的代码示例和教程
def main():
# my code here
if __name__ == "__main__":
main()
但为什么?是否有任何理由不在文件顶部定义您的函数,然后只在其下编写代码?即
def my_function()
# my code here
def my_function_two()
# my code here
# some code
# call function
# print(something)
我只是想知道主要有没有押韵?
5 回答
如果没有主要的标记,即使脚本作为模块导入,代码也会被执行 .
其他人已经回答了,但我想我还有别的东西需要补充 .
让
if
语句调用main()
(没有特定顺序)的原因:其他语言(如C和Java)具有
main()
函数,该函数在执行程序时调用 . 使用这个if
,我们可以使Python像他们一样,这对许多人来说更为熟悉 .代码将更清晰,更易于阅读和更有条理 . (是的,我知道这是主观的)
这个python代码可以作为一个没有讨厌的副作用的模块 .
这意味着可以针对该代码运行测试 .
这意味着我们可以将该代码导入交互式python shell并测试/调试/运行它 .
def main
中的变量是 local ,而其外部的变量是 global . 这可能会引入一些错误和意外行为 .但是,你是 not required 来编写
main()
函数并在if
语句中调用它 .我自己通常开始编写没有任何功能的小型一次性脚本 . 如果脚本变得足够大,或者如果我觉得将所有代码放在函数中会使我受益,那么我重构代码并执行它 . 当我编写
bash
脚本时也会发生这种情况 .即使您将代码放在main函数中,也不需要完全按照它编写代码 . 一个整洁的变化可能是:
这意味着您可以从其他脚本(或交互式shell)调用
main()
来传递自定义参数 . 这可能在单元测试或批处理时很有用 . 但请记住,上面的代码需要解析argv,因此使用传递已经解析的参数的不同调用可能会更好 .在我编写的面向对象的应用程序中,代码如下所示:
所以,随意编写更适合您的代码 . :)
如果foo.py的内容
A file foo.py can be used in two ways.
在这种情况下
__name__
是foo
,代码部分未执行且不打印XXXX
.当它直接执行时,
__name__
与__main__
相同,并执行该部分中的代码并打印XXXX
使用此功能之一在同一模块中编写各种单元测试 .
“What does if name==“main”: do?”已经回答了 .
如果您使用
main()
函数,则可以使用main()
函数调用其功能 . 这个(恕我直言)的主要(没有双关语)的好处是你可以对它进行单元测试 .考虑第二个脚本 . 如果您在另一个中导入它,将执行“全局级别”的指令 .