首页 > 其他分享 >__main__ --- 最高层级代码环境

__main__ --- 最高层级代码环境

时间:2022-10-13 23:23:12浏览次数:65  
标签:__ 层级 name Python --- 模块 main

在 Python 中,特殊名称__main__被用于两个重要的构造:

  • 程序的最高层级环境的名称,可以使用__name__ == '__main__'表达式来检查它;以及

  • Python 包中的 __main__.py 文件。

这两种机制都有 Python 模块有关;用户如何与它们交互以及它们之间如何交互。 下文将进行详细说明。 如果你还不了解 Python 模块,请查看教程 模块 一节的介绍。

__name__ == '__main__'
当一个 Python 模块或包被导入时,__name__ 会被设为模块的名称。 通常,这将是 Python 文件本身的名称去掉 .py 后缀:

>>>
>>> import configparser
>>> configparser.__name__
'configparser'

如果文件是包的组成部分,则 __name__ 还将包括父包的路径:

>>>
>>> from concurrent.futures import process
>>> process.__name__
'concurrent.futures.process'

不过,如果模块是在最高层级代码环境中执行的,则它的 __name__ 会被设为字符串 '__main__'。

什么是“最高层级代码环境”?

__main__ 是最高层级代码运行所在环境的名称。 “最高层级代码”即用户指定最先启动运行的 Python 模块。 它被称为“最高层级”是因为它将导入程序所需的所有其他模块。 有时“最高层级代码”也被称为应用的 入口点。

最高层级代码环境可以是:

  • 一个交互提示符的作用域:
>>>
>>> __name__
'__main__'
  • 作为文件参数传给 Python 解释器的 Python 模块:
$ python3 helloworld.py
Hello, world!
  • 作为 -m 参数传给 Python 解释器的 Python 模块或包:
$ python3 -m tarfile
usage: tarfile.py [-h] [-v] (...)
  • Python 解释器从标准输入中读取的 Python 代码:
$ echo "import this" | python3
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...
  • 作为 -c 参数传递给 Python 解释器的 Python 代码:
$ python3 -c "import this"
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...

在以上每个情形中,顶级模块的 __name__ 被设置为 '__main__'

因此,一个模块可以通过检查自己的 __name__ ,来发现它是否在顶层环境中运行。这是允许在模块没有从导入语句中初始化的情况下,有条件地执行代码的一个常见的语句:

if __name__ == '__main__':
    # Execute when the module is not initialized from an import statement.
    ...

这就是 if __name__ == '__main__' 代码块的用武之地。除非模块在顶层环境中被执行,否则该块内的代码不会运行。

标签:__,层级,name,Python,---,模块,main
From: https://www.cnblogs.com/zyl007/p/16790088.html

相关文章

  • 152-《大数据架构师》 Flink JobMaster 启动和 Slot资源管理_ev
                                     ......
  • app自动化测试元素定位
    目录一、前言1、Appium元素定位  1.1、Android页面介绍2、App常用元素定位  1.1、id定位  1.2、UIAutomator定位  1.3、Xpath定位  1.4、cont......
  • 进入python的世界_day14_python基础——算法、三元表达式、生成式、匿名函数
    一、算法1.介绍​ 算法是通过数学模型运算得到某些数据的过程,在python中通过与代码相结合,可以在特定场景下很方便的解决问题2.应用场景​ 很广,大数据推广就是利用算......
  • 微信小程序 —— 保留两位小数
    两种方法一:在utils文件夹中新建一个filters.wxs文件将下面代码写入varfilters={toFix:function(value){returnvalue.toFixed(2)//此处2为保留两位小......
  • C++学习笔记2
    类类与对象类和结构体的区别结构体相当于是只有类的数据域。但其区别有不仅仅如此。类除了数据域,还有函数域,即声明了方法,当然,一般其方法是在类外实现的。而结构体没有......
  • 函数
    算法简介及二分法1.什么是算法 算法就是解决问题的有效方法,不是所有的算法都很高效也有不合格的算法2.算法应用场景 推荐算法(抖音视频推送,淘宝商品推送)成像算法(A......
  • 关于Surge本地订阅工具sub-store删除组合订阅error
    打开surge,【工具】>【脚本编辑器】【设置】>【$persistentStore】找到【sub-store】找到“artifacts”找到你创建的组合订阅$name,删掉它!注意格式,中括号......
  • aptitude 命令(记录)
    aptitude命令aptitude与apt-get一样,是Debian及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude......
  • POI2016
    Nadajniki有一个妙妙树形DP。设\(f_{i,0/1/2,0/1/2,0/1/2}\)为第\(i\)个点,这个点上放没放,他儿子有没有放,他父亲有没有放。然后硬转移就行了。f[p][0][0][1]=f[p][......
  • 字符编码 与 文件读写模式
    字符编码    三个阶段:   1.美国:ASCII   2.各个国家独有编码(中国:GBK)   3. 万国码(unicode):兼容所有——>utf家族(utf8) 编码与解码:......