在Python中定义Main函数

在Python中定义Main函数许多编程语言都有一个特殊的函数 当操作系统开始运行程序时会自动执行该函数 这个函数通常被命名为 main 并且依据语言标准具有特定的返回类型和参数 另一方面 Python 解释器从文件顶部开始执行脚本 并且没有自动执行的特殊函数 尽管如此 为程序的执行定义一个起始点有助于理解程序是如何运行的 Python 程序员提出了几种方式对此进行实现 本文结束时 您将了解以下内容 什么是特殊的 n

许多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。

尽管如此,为程序的执行定义一个起始点有助于理解程序是如何运行的。Python程序员提出了几种方式对此进行实现。

本文结束时,您将了解以下内容:

什么是特殊的__name__变量以及Python中如何定义它

为什么要在Python中使用main()函数

在Python中定义main()函数有哪些约定

main()函数中应该包含哪些代码的最佳实践

Python中的基本main()函数

一些Python脚本中,包含一个函数定义和一个条件语句,如下所示:

在Python中定义Main函数

此代码中,包含一个main()函数,在程序执行时打印Hello World!。此外,还包含一个条件(或if)语句,用于检查__name__的值并将其与字符串”__main__”进行比较。当if语句为True时,Python解释器将执行main()函数。更多关于Python条件语句的信息可以由此获得。

这种代码模式在Python文件中非常常见,它将作为脚本执行并导入另一个模块。为了帮助理解这段代码的执行方式,首先需要了解Python解释器如何根据代码的执行方式设置__name__。

Python中的执行模式

Python解释器执行代码有两种方式:

通过命令行方式执行Python脚本。

将代码从一个文件导入另一个文件或者解释器。

更多内容可参考如何运行Python脚本。无论采用哪种方式,Python都会定义一个名为__name__的特殊变量,该变量包含一个字符串,其值取决于代码的使用方式。

本文将如下示例文件保存为execution_methods.py,以探索代码如何根据上下文改变行为:

在Python中定义Main函数

在此文件中,定义了三个对print()函数的调用。前两个打印一些介绍性短语。第三个print()会先打印短语The value __name__ is,之后将使用Python内置的repr()函数打印出__name__变量。

在Python中,repr()函数将对象转化为供解释器读取的形式。上述示例通过使用repr()函数来强调__name__的值为字符串。更多关于repr()的内容可参考Python文档。

在本文中,您将随处可见文件(file),模块(module)和脚本(script)这三个字眼。实际上,三者之间并无太大的差别。不过,在强调代码目的时,还是存在细微的差异:

文件:通常,Python文件是包含代码的任何文件。大多数Python文件的扩展名为.py。

脚本:Python脚本是基于命令行执行以完成某项任务的一类文件。

模块:Python模块是从另一个模块、脚本或解释器中导入的文件。更多关于Python模块的内容可参考Python文档。

“如何运行Python脚本”一文也讨论了三者的差别。

基于命令行执行

在这类方法中,Python脚本将通过命令行来执行。

执行脚本时,无法与Python解释器正在执行的代码交互。关于如何通过命令行执行代码的详细信息对本文而言并不重要,但您可以通过展开下框阅读更多有关Windows,Linux和macOS之间命令行差异的内容。

命令行环境

不同的操作系统在使用命令行执行代码时存在细微的差异。

在Linux和macOS中,通常使用如下命令:

在Python中定义Main函数

美元符号($)之前的内容可能有所不同,具体取决于您的用户名和计算机名称。您键入的命令位于$之后。在Linux或macOS上,Python3的可执行文件名为python3,因此可以通过输入python3 script_name.py来运行python脚本。

在Windows上,命令提示符通常如下所示:

在Python中定义Main函数

根据您的用户名,>之前的内容可能会有所不同,您输入的命令位于>之后。在Windows上,Python3的可执行文件通常为python。因此可以通过输入python script_name.py来运行python脚本。

无论哪种操作系统,本文的Python脚本的输出结果都是相同的。因此本文以Linux和macOS为例。

使用命令行执行execution_methods.py,如下所示:

在Python中定义Main函数

在这个示例中,__name__具有值’__main__’,其中引号(‘)表明该值为字符串类型。

请记住,在Python中,使用单引号(‘)和双引号(“)定义的字符串没有区别。更多关于字符串的内容请参考Python的基本数据类型。

如果在脚本中包含”shebang行”并直接执行它(./execution_methods.py),或者使用IPython或Jupyter Notebook的%run,将会获取相同的结果。

您还可以通过向命令行添加-m参数的方法实现以模块的方式执行。通常情况下,推荐如下方式pip: python3 -m pip install package_name。

添加-m参数将会运行包中__main__.py的代码。更多关于__main__.py文件的内容可参考如何将开源Python包发布到PyPI中。

在三种情况中,__name__都具有相同的值:字符串’__main__’。

技术细节:Python文档中具体定义了__name__何时取值为’__main__’。

当通过标准输入,脚本或者交互提示中读取数据时,模块的__name__将取值为’__main__’。(来源)

__name__与__doc__,__package__和其他属性一起存储在模块的全局命名空间。更多关于属性的信息可参考Python数据模型文档,特别是关于模块和包的信息,请参阅Python Import文档。

导入模块或解释器

接下来是Python解释器执行代码的第二种方式:导入。在开发模块或脚本时,可以使用import关键字导入他人已经构建的模块。

在导入过程中,Python执行指定模块中定义的语句(但仅在第一次导入模块时)。要演示导入execution_methods.py文件的结果,需要启动Python解释器,然后导入execution_methods.py文件:

在Python中定义Main函数

在此代码输出中,Python解释器执行了三次print()函数调用。前两行由于没有变量,在输出方面与在命令行上作为脚本执行时完全相同。但是第三个输出存在差异。

当Python解释器导入代码时,__name__的值与要导入的模块的名称相同。您可以通过第三行的输出了解这一点。__name__的值为’execution_methods’,是Python导入的.py文件。

注意如果您在没有退出Python时再次导入模块,将不会有输出。

注意:更多关于导入在Python中如何工作的内容请参考官方文档和Python中的绝对和相对导入。

英文原文:https://realpython.com/python-main-function/

Python学习交流群:

译者:我是昵称耶~

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

【Python教程】全网最容易听懂的1000集python系统学习教程(答疑在最后四期,满满干货)

2021年Python最新最全100个爬虫完整案例教程,数据分析,数据可视化,记得收藏哦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178469.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:13
下一篇 2026年3月26日 下午5:14


相关推荐

  • 关于安装QCAT/QXDM异常的问题

    关于安装QCAT/QXDM异常的问题第一种情况安装之后报licenseerror原因:可能安装时出错;解决:卸载QXDM和QCAT之后,删除注册表的信息,删除C盘文件夹内容:注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Qualcomm\QIKC盘内容位置:C:\ProgramData\Qualcomm\QIKC:\ProgramFiles(x86)\Qualcomm\QIKTool…

    2022年10月2日
    2
  • 谷歌收购DNNresearch能获得什么?

    谷歌收购DNNresearch能获得什么?nbsp 谷歌收购 DNNresearch 能获得什么 据国外媒体上周报道 谷歌收购了加拿大神经网络方面的创业公司 DNNresearch DNNresearch 公司是由多伦多大学教授 GeoffreyHint 与他的两个研究生 AlexKrizhevs 和 IlyaSutskeve 于去年成立 由于谷歌在本次收购中没有获得任何实际的产品或服务 所以本次收购实质上属于人才性收购 收购的主体实为了这三人团

    2026年3月18日
    2
  • 阿里最年轻 P10 林俊旸离职尘埃落定:为千问,我只能做这么多了

    阿里最年轻 P10 林俊旸离职尘埃落定:为千问,我只能做这么多了

    2026年3月13日
    2
  • QGIS使用之基本介绍和安装教程

    QGIS使用之基本介绍和安装教程今天,小崇想和大家介绍一下QGIS的基本知识。希望我们互相学习,共同进步!何为QGIS?QGIS(QuantumGIS)是一款免费的桌面GIS软件,可运行在Linux、Unix、MacOSX和Windows等平台。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统。它主要提供GIS数据的显示、编辑和分析、制图等功能。QGIS的主要特点有:(1)免费开源。(正版ArcGIS价格不菲)(2)支持PostGIS数据库。(3)支持从WMS,WFS服务器中获取

    2022年6月17日
    34
  • IntelliJ Idea 常用12款插件(提高开发效率),附优秀主题插件[通俗易懂]

    插件安装方式:新版本IDE安装方式略有不同,不一一赘述1、BackgroundImagePlus这款插件并不能直接提高你的开发效率,但是可以让你面对的IDE不再单调,当把背景设置成你自己心仪的的图片,是不是会感觉很赏心悦目,编码效率会不会因此间接的提高?!使用方法:2、MybatisLogPluginMybatis现在是j…

    2022年4月4日
    449
  • qmake中文官方文档

    qmake中文官方文档qmakeQMake提供了一个用于管理应用程序,库,其他组件的构建过程的面向工程系统QMake扩展了每个工程文件的信息,生成一个执行编译和连接过程的Makefile本文翻译自Qt4.8官方文档。一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的Mak

    2022年5月19日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号