为什么Python中没有main()函数

为什么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__' 的条件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程