python 为什么要使用def main()?[副本]

sbdsn5lh  于 2023-05-16  发布在  Python
关注(0)|答案(5)|浏览(110)

此问题已在此处有答案

What does if name == "main": do?(46答案)
3年前关闭。
我已经看到一些代码示例和教程使用

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)

我只是想知道是否有任何押韵的主要?

5ssjco0h

5ssjco0h1#

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

v7pvogib

v7pvogib2#

其他人都已经回答了,但我想我还有别的要补充。
使用if语句调用main()的原因(不分先后):

  • 其他语言(如C和Java)有一个main()函数,在程序执行时调用。使用这个if,我们可以让Python的行为像它们一样,这对许多人来说感觉更熟悉。
  • 代码将更清晰,更容易阅读,更好地组织。(我知道这是主观的)
  • 将python代码作为一个模块进行import,而不会产生讨厌的副作用。
  • 这意味着可以对该代码运行测试。
  • 这意味着我们可以将代码导入到交互式python shell中并测试/调试/运行它。
  • def main内部变量为local,外部变量为global。这可能会引入一些错误和意外行为。

但是,您不需要编写main()函数并在if语句中调用它。
我自己通常开始写一些没有任何功能的小的一次性脚本。如果脚本变得足够大,或者如果我觉得将所有代码放在一个函数中会对我有好处,那么我会重构代码并执行它。在编写bash脚本时也会发生这种情况。
即使你把代码放在main函数中,你也不需要完全像那样编写它。一个简单的变化可能是:

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()

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

cotxawn7

cotxawn73#

如果www.example.com的内容foo.py

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

www.example.com文件foo.py有两种使用方式

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

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

  • 直接执行:python foo.py

直接执行时,__name____main__相同,执行该部分中的代码并打印XXXX
使用此功能在同一个模块中编写各种单元测试。

5lhxktic

5lhxktic4#

What does if __name__==“__main__”: do?”已被回答。
如果您import模块,则main() * 函数 * 允许您调用其功能。这是一个很大的好处,你可以测试它。

qmelpv7a

qmelpv7a5#

考虑第二个脚本。如果您将其导入到另一个中,则将执行“全局级别”的指令。

相关问题