当前位置:首页 > 编程技术 > 正文内容

Python 中的__main__和__name__

yc8881年前 (2023-08-15)编程技术307

Python 中的__main__和__name__

用 C 族语言(C、C++、Java、C# 等)编写的程序。)需要main()功能来指示执行的起点。

另一方面,在 Python 中,没有main()函数的概念,因为它是一种基于解释器的语言,同样可以在交互 Shell中使用。 扩展名为.py的 Python 程序文件包含多个语句。Python 程序文件的执行从第一条语句开始。

Python 包含名为__name__的特殊变量,该变量包含作为字符串执行的代码的范围。__main__是顶层代码执行的顶层作用域的名称。

例如,解释器 Shell 中执行的代码的范围将是__main__,如下所示。

Python Shell

>>>__name__'__main__'

所有的功能和模块都将在解释器 Shell 的顶层范围__main___内执行。

Python Shell

>>> def f1():
    print(__name__)>>> f1()

甚至内部功能都是在顶层范围__main__内执行的:

Python Shell

>>> def f1():
    print(__name__)
    def f2():
        print(__name__)
    f2()>>> f1()__main__
__main__

一个 Python 文件可以包含多个可以独立执行的函数和语句。例如,考虑以下addition.py:

addition.py

def add(x,y):
    z=x+y    print('add() executed under the scope: ', __name__)
    return z

x=input('Enter the first number to add: ')y=input('Enter the secode number to add: ')result = add(int(x),int(y))print(x, '+', y,'=', result)print('Code executed under the scope: ', __name__)

Python 程序文件可以通过以下方式执行:

  1. 使用命令提示符/终端将 Python 文件作为脚本执行。

  2. 使用 Import 语句将 Python 代码从一个文件导入到另一个文件

C:\Python37> python addition.py
Enter the first number to add: 3Enter the secode number to add: 3add() executed under the scope: __main__3 + 3 = 6Code executed under the scope: __main__

可以看到,顶层范围__main__下执行的addition.py

addition.py文件可以作为模块在另一个文件中使用,也可以通过导入在交互 Shell 中使用。

让我们看看当你在交互 Shell 中导入addition模块时会发生什么。

Python Shell

>>> import addition
Enter the first number to add: 3Enter the secode number to add: 3add() executed under the scope:  addition3 + 3 = 6Code executed under the scope:  addition

上面,导入语句从第一条语句开始执行。但是,我们只想使用add()方法,不想执行其他语句。

这里我们可以使用特殊变量__name__来检查addition.py文件的作用域和执行语句,只有当它从命令提示符/终端独立执行时,而不是当它被导入到其他文件/模块中时。 重写addition.py,如下图。

addition.py

def add(x, y):
    z=x+y    print('add() executed under the scope: ', __name__)
    return zif __name__ == '__main__':
    x=input('Enter the first number to add: ')
    y=input('Enter the secode number to add: ')
    result = add(int(x),int(y))
    print(x, '+', y,'=', result)
    print('Code executed under the scope: ', __name__)

以上,if 条件检查如果范围是__main__,那么只执行接受用户输入并添加它们的代码。

现在,让我们看看当我们在交互 Shell 中导入上面的addition模块时会发生什么。

Python Shell

>>> import addition>>> addition.add(3,3)add() executed under the scope:  addition6

也可以使用from import语句,如下所示:

Python Shell

>>> from addition import add>>> add(3,3)add() executed under the scope:  addition6

如您所见,因为我们使用了一个 if 条件来检查作用域,所以它在导入addition模块后不会执行用户输入的代码,因为它是在模块的作用域下执行的,也就是addition作用域。 只进口add()法。在其他模块中导入addition模块也会发生同样的情况。

现在,让我们看看当您从命令提示符/终端执行它时会发生什么。

C:\Python37> python addition.py
Enter the first number to add: 3Enter the secode number to add: 3add() executed under the scope: __main__3 + 3 = 6Code executed under the scope: __main__

可以看到,由于addition.py是在顶级范围__main__内执行的,所以还是执行同样的代码。

因此,name的值允许 Python 解释器确定模块是否是可执行脚本。如果其值为main,将执行函数定义之外的语句。如果没有,模块的内容将被填充到顶层模块(或解释器名称空间)中,而不包含可执行部分。

注意:从命令提示符/终端执行的 Python 脚本文件将在顶层作用域__main__作用域下执行。但是,导入模块将在模块自己的范围内执行。因此,顶层范围将是__main__,第二个范围将是模块的范围。

因此,使用特殊变量__name__和顶级范围__main__增加了可重用性。Python 脚本文件可以作为独立脚本从命令提示符/终端执行,也可以作为模块导入。


本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10693.html

标签: Python
分享给朋友:

“Python 中的__main__和__name__” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...

【说站】Java从resources读取文件内容的方法有哪些

【说站】Java从resources读取文件内容的方法有哪些

本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构├── main│ ├── java│ │ └── ...