为什么使用def 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)

我只是想知道是否有什么押韵的?

730140 次浏览

如果没有主哨兵,即使脚本作为模块导入,代码也会被执行。

考虑第二个脚本。如果你将它导入到另一个文件中,指令将被执行,就像在“全局级别”一样。

如果foo.py的内容

print __name__
if __name__ == '__main__':
print 'XXXX'

文件foo.py可以用两种方式使用。

  • 导入到另一个文件:import foo

在这种情况下,__name__foo,代码部分不会被执行,也不会打印XXXX

  • 直接执行:python foo.py

当它直接执行时,__name____main__相同,并且执行该部分中的代码并打印XXXX

这个功能的一个用途是在同一个模块中编写各种单元测试。

if __name__==“__main__”:做什么?”已经有了答案。

使用main() 函数可以在模块import的情况下调用它的功能。这样做的主要好处(恕我直言)是你可以对它进行单元测试。

其他人都已经回答了,但我想我还有一些东西要补充。

使用if语句调用main()的原因(顺序不分先后):

  • 其他语言(如C和Java)有一个main()函数,在程序执行时被调用。使用这个if,我们可以让Python像他们一样工作,这对许多人来说感觉更熟悉。

  • 代码将是更清洁的,更容易阅读,更好地组织。(是的,我知道这很主观)

  • import将有可能将python代码作为一个模块,而不会产生讨厌的副作用。

  • 这意味着可以对该代码运行测试。

  • 这意味着我们可以将代码导入交互式python shell并测试/调试/运行它。

  • def main内部的变量是当地的,而它外部的变量是全球。这可能会引入一些错误和意想不到的行为。

但是,你是不是必需的编写一个main()函数,并在if语句中调用它。

我自己通常开始编写没有任何函数的小脚本。如果脚本变得足够大,或者如果我觉得把所有代码都放在一个函数中会对我有好处,那么我就会重构代码并执行它。当我编写bash脚本时也会发生这种情况。

即使您将代码放在主函数中,也不需要完全按照这种方式编写。一个简洁的变体可以是:

import sys


def main(argv):
# My code here
pass


if __name__ == "__main__":
main(sys.argv)

这意味着您可以从传递自定义参数的其他脚本(或交互式shell)调用main()。这在单元测试或批处理中可能很有用。但是请记住,上面的代码将需要解析argv,因此使用传递已解析参数的不同调用可能会更好。

在我写的一个面向对象的应用程序中,代码是这样的:

class MyApplication(something):
# My code here


if __name__ == "__main__":
app = MyApplication()
app.run()

因此,请随意编写更适合您的代码。:)