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: 3
Enter the secode number to add: 3
add() executed under the scope: __main__
3 + 3 = 6
Code executed under the scope: __main__

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

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

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

Python Shell

>>> import addition
Enter the first number to add: 3
Enter the secode number to add: 3
add() executed under the scope:  addition
3 + 3 = 6
Code 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 z

if __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:  addition
6 

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

Python Shell

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

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

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

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

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

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

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

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

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/129249.html

(0)
简单一点的头像简单一点
上一篇 2024-10-03
下一篇 2024-10-03

相关推荐

  • 提高Web服务器性能的一个重要步骤——启动Nginx

    随着互联网的快速发展,Web服务器的承载能力变得越来越重要,优化Web服务器的性能成为了运维工程师日常工作的重中之重。而启动Nginx作为优化Web服务器性能的一个重要步骤,不仅可…

    编程 2024-10-03
  • python中可哈希(python中可哈希的数据类型)

    1、python字典的构成形式为 2、什么是可哈希(hashable)性? 3、Python如何哈希字符串 4、Python中冷门但非常好用的内置函数 5、Python字典的底层实…

    编程 2024-10-03
  • 以ps放大图层为中心

    一、概述 众所周知,Adobe Photoshop(简称PS)是一款常用的图片处理软件。其中,放大图层作为一项重要的操作,在图片处理中的应用十分广泛。放大图层是指将图层中的内容在保…

    编程 2024-10-04
  • ClickHouse日期函数详解

    一、介绍 ClickHouse是一个用于高速分析的列式数据库管理系统。它支持分布式的复制和负载均衡,同时也提供了丰富的日期函数用于时间序列分析。在ClickHouse中日期和时间都…

    编程 2024-10-14
  • Java数组转集合详解

    在Java开发中,数组和集合类都是很常见的数据结构。具体来说,数组是固定长度的线性结构,而集合是可变长度的线性结构。由于二者在数据结构和使用上的不同,因此需要在实际开发中进行转化。…

    编程 2024-10-04
  • Python any函数的实际应用场景

    Python中有一个any函数,它是一个内置函数,通过返回True或False来判断一个可迭代对象中是否至少有一个元素返回True。在这篇文章中,我们将介绍any函数的几个实际应用…

    编程 2024-10-03
  • java实现avl树的重构,java 树 数据结构

    本文目录一览: 1、用C++来实现AVL树的程序,要求建立,插入,删除,单旋,双旋,前序和后序遍历 2、用Java实现一个树形结构,并对其进行遍历 3、如何用Java实现树形结构啊…

    编程 2024-10-04
  • Python的私有方法详解

    一、引言 Python作为一门非常受欢迎的编程语言,尤其因其简单易学,优雅而有效的语法,以及广泛的应用领域而备受欢迎。在Python中,私有方法是一种可以帮助提高代码质量,并保护变…

    编程 2024-10-04
  • 安格拉斯大学:推动科技创新与社会发展的领先机构

    一、大学概况 安格拉斯大学是一所拥有悠久历史的国际知名大学,创建于1575年,位于荷兰乌得勒支省的城市格罗宁根。大学的前身是一所公立拉丁文学校,经过400余年的发展,现已成为荷兰最…

    编程 2024-10-03
  • 通过php将带有app,PHP用于

    本文目录一览: 1、PHP可以用来开发移动端APP吗 2、如何使用 php 写 app 接口 3、如何用PHP搭建个移动APP的服务器 4、如何利用PHP实现 APP端微信支付功能…

    编程 2024-10-03

发表回复

登录后才能评论