为什么Python中没有main()函数
在这篇文章中,我们将学习Python中为什么没有main()函数。
毫无疑问,Python 没有所谓的main函数,然而,互联网上的文章经常提到 “Python main函数 “和 “建议编写main函数”。”
他们的目的可能是复制原始的主要方法,但许多人被误导(或误解),并因此创造了极其复杂的代码。
在我们开始之前,我们将回答以下两个问题 —
- 究竟什么是 “main函数”?
-
为什么有些编程语言需要使用main函数?
-
这个main函数名称是必须的,意味着必须有一个main函数。
-
因为只能有一个main函数,所以每一个进入程序的都是唯一的。
-
语法格式有具体的要求,并遵循一个非常一致(固定)的模板。
为什么非要把main函数变成强制性的
这些都是编译语言,需要将代码编译成可执行的二进制文件,以便操作系统/bootloader找到程序的启动,因此你必须定义这一个函数。
简单地说,在一大堆可执行代码中,有一个重要的开端必须被定义。
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函数没有任何联系,它既不是必需的,也不一定控制程序的执行顺序。没有它也不会引起任何句法问题。
有些人希望确定一个 “主 “功能,以强调其 “主 “的地位,并将其作为第一个被人为执行的功能。
他们可能认为,有这样名字的函数更容易记住。
他们可能希望写上if __name__ =='__main__'
来证明main()只在当前脚本直接执行时运行,当它被导入其他模块时不应该被执行。
然而,我们并不建议采用这种写作方式。
最常见的例子是:仅仅有几十行代码或一个脚本文件,实现了一个简单的功能(一个小爬虫,用乌龟画图,等等),但它们都是按照以前的方式写的。
由于以下原因,我们不建议写 `if name == ‘main‘“ –
- 首先,也是最重要的,如果只有一个文件,因为没有导出选项。
-
第二,如果有几个文件,强烈不建议在入口文件(main.py)中写这句话。因为它是起点,它的内容不应该被导出到其他模块中使用。
-
最后,不建议将这种判断写在有众多文件的非入口文件中,因为最多只能创建一些这样的测试程序。然而,测试代码应该被分开,并存储在一个单独的目录或文件中。
每次遇到这种复杂的代码时,我都会不假思索地担心。你为什么要写那个if语句?如果有可能的话,把主函数拆开,甚至不要用函数来包装它!这样就可以了。
总结一下
- 突破惯性思维,构建真实的代码。主入口函数是某些语言所特有的,不应该在Python中使用。你应该理解脚本语言的特点,并以简单和吸引人的风格来写。
-
使用 main.py 而不是 main() 。因为Python的程序执行单元是一个脚本文件,而不是一个函数或类,所以入口文件应该命名为main.py,而内部函数则由需求决定。
-
如果可行的话,使用main.py作为入口文件。这个文件与命令行上的” -m “参数结合使用,非常简单。
结论
在这篇文章中,我们学习了为什么 Python 与其它编程语言不同,缺少 main() 函数。我们还了解了 __name__ == '__main__'
的条件。