为什么Python中没有main()函数
在这篇文章中,我们将学习为什么Python中没有main()函数。
毫无疑问,Python没有所谓的“main函数”,但是互联网上的文章经常提到“Python的main函数”和“建议编写主函数”。
他们的目的可能是复制原始的主要方法,但很多人被误导(或误解)而导致代码变得非常复杂。
在我们开始之前,我们将回答以下两个问题:
- “main函数”到底是什么?
-
为什么有些编程语言需要使用主函数?
一些编程语言(如C / C ++,C#,Java,Go,Rust等)将主函数用作程序的执行入口,它们具有特定的含义:
- 需要main函数这个名称,意味着必须有一个主要函数。
-
因为只能有一个主函数,每次进入程序都是独特的。
-
语法格式有特定要求并遵循非常一致(固定)的模板。
为什么必须要有主入口函数
这些是编译语言,需要将代码编译成可执行文件,以便操作系统/引导加载程序找到程序的起始位置,因此您必须定义此一个函数。
简而言之,在大量可执行代码中必须定义一个重要的起始位置。
主函数是这些语言中重要的有机特征。
然而,当我们回到Python时,情况发生了巨大变化。
- Python是一种解释型语言,也称为脚本语言。运行过程从上到下逐行执行,这意味着其启动点是已知的。
-
每个.py文件都是一个可执行文件,可以用作程序的入口点,这意味着程序的入口点是灵活的,不需要遵循任何约定。
-
当不指定入口文件时执行Python项目(更典型的命令行,如“python -m http.server 8000”),可能是因为存在main.py文件,它作为一个“文件”在包中执行操作。
总之,脚本语言Python与编译语言不同。它可以选择在单个模块(即.py文件)的级别上灵活地执行,或者在由许多模块组成的包级别上执行,而其他语言则不能在没有定义良好的入口的情况下实现。
换句话说,在Python中,程序员不需要在语法层面上指定统一的入口(无论是函数、类还是其他)。
由于经常遇到或写以下代码,某些用户可能感到困惑 –
# defining the main function using the def keyword
def main():
……
if __name__ == '__main__':
main()
这难道不是Python的main函数吗?我相信很多人都同意!−
不,这不是。
除了函数名为” main “, 它与我们之前描述的正统main函数没有任何联系,也不是必需的, 也不能控制程序执行的顺序。没有它不会引起任何语法问题。
一些人希望确认一个” main “函数以强调它的”主要”地位,并将其人为地放在第一个执行的函数。
他们可能认为带有这样的名称的函数更容易记住。
他们可能希望写成 if name =='main'
来表明main()只在当前脚本直接执行时运行,并在 导入其他模块时不应该执行。
然而,我们不建议这种写法。
最常见的示例是:只有几十行代码或一个脚本文件实现了一个简单的功能(一个小爬虫,用乌龟画画等), 但它们都以与以前相同的方式编写。
由于以下原因,不建议写 if name__ == '__main'
−
- 首先,如果只有一个文件,因为没有导出选项。
-
其次,如果有多个文件,强烈不建议在入口文件(main.py)中写这个句子。因为它是起始点,它的内容不应该被其他模块导入使用。
-
最后,不建议在包含大量文件的非入口文件中写这个判断,因为最多只能创建一些这样的测试程序。 然而,测试代码应该被分离并存储在单独的目录或文件中。
每次遇到这个复杂的代码,我都感到担忧而不假思索地进行。你为什么要写那个if语句呢?如果可能的话,甚至不要将main函数包装在函数中拆分!
总结
- 摆脱惯性思维,构建真实的代码。主入口函数在某些语言中是唯一的,不应该在Python中使用。你应该理解脚本语言的特性, 并以简单而吸引人的方式编写代码。
-
使用 main.py 而不是 main() 。因为Python的程序执行单元是一个脚本文件,而不是函数或类, 入口文件应该命名为main.py,内部函数由需求决定。
-
如果可行,使用main.py作为入口文件。这个文件可以与命令行上的” -m “参数轻松结合使用。
结论
在本文中,我们了解了为什么Python与其他编程语言不同,缺少一个main()函数。我们还了解了关于条件 __name__ == '__main__'
的内容。