此问题已在此处有答案:
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)
我只是想知道是否有任何押韵的主要?
5条答案
按热度按时间5ssjco0h1#
如果没有主哨兵,即使脚本作为模块导入,代码也会被执行。
v7pvogib2#
其他人都已经回答了,但我想我还有别的要补充。
使用
if
语句调用main()
的原因(不分先后):main()
函数,在程序执行时调用。使用这个if
,我们可以让Python的行为像它们一样,这对许多人来说感觉更熟悉。import
,而不会产生讨厌的副作用。def main
内部变量为local,外部变量为global。这可能会引入一些错误和意外行为。但是,您不需要编写
main()
函数并在if
语句中调用它。我自己通常开始写一些没有任何功能的小的一次性脚本。如果脚本变得足够大,或者如果我觉得将所有代码放在一个函数中会对我有好处,那么我会重构代码并执行它。在编写
bash
脚本时也会发生这种情况。即使你把代码放在main函数中,你也不需要完全像那样编写它。一个简单的变化可能是:
这意味着您可以通过自定义参数从其他脚本(或交互式shell)调用
main()
。这在单元测试或批处理时可能很有用。但请记住,上面的代码需要解析argv,因此使用传递已解析参数的不同调用可能会更好。在我编写的一个面向对象的应用程序中,代码看起来像这样:
所以,请随意编写更适合您的代码。:)
cotxawn73#
如果www.example.com的内容foo.py
www.example.com文件foo.py有两种使用方式
import foo
在这种情况下,
__name__
是foo
,代码段不会被执行,也不会打印XXXX
。python foo.py
直接执行时,
__name__
与__main__
相同,执行该部分中的代码并打印XXXX
使用此功能在同一个模块中编写各种单元测试。
5lhxktic4#
“What does
if __name__==“__main__”:
do?”已被回答。如果您
import
模块,则main()
* 函数 * 允许您调用其功能。这是一个很大的好处,你可以测试它。qmelpv7a5#
考虑第二个脚本。如果您将其导入到另一个中,则将执行“全局级别”的指令。