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 23:26
下一篇 2024-10-03 23:26

相关推荐

  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论