浅析Python __name__ 是什么


Posted in Python onJuly 07, 2020

前言

在我们浏览一下 python 文件或者自己写 python 代码的时候,时常会在代码的最后加上这样的一行代码

if __name__ == '__main__':
 func_name()

那么这一行代码有什么具体的作用呢,不加的话会对我们的结果造成影响吗?

__name__

首先对于用双下划线开头且结尾的变量,在 Python 中被称为内置变量,除了 __name__,我们常见的还有 __init____dict__ 等等.那么有多少内置变量呢?我们可以通过下面在交互界面输入下面的命令,查看 Python 全部内置变量和内置函数

>>> dir(__builtins__)

结果如下图:

浅析Python __name__ 是什么

不同情况下的 __name__ 的值

首先我们需要知道 __name__ 在不同情况下会有不同值,它的值取决于我们是如何执行脚本的.我们可以通过几个例子感受一下:

Example 0

# test.py
print(f'__name__ 在 test.py 值为 {__name__}')

然后直接执行一下代码

$ python test.py

然后看一下输出

$ python test.py 
__name__ 在 test.py 值为 __main__

在这个例子中,我们发现 __name__ 的值是 __main__

Example 1

在这个例子中,我们重新创建一个脚本 test1.py 然后我们在 test1.py 中调用 test.py

# test1.py
import test
print(f'__name__ 在 test1.py 值为 {__name__}')

接着执行一下 test1.py,再看一下输出

python test1.py 
__name__ 在 test.py 值为 test
__name__ 在 test1.py 值为 __main__

结果是不是很有意思?整个过程是什么样子的呢?简单的画了一个图

浅析Python __name__ 是什么

什么时候使用 __name__

有时候,我们用 Python 写了一个脚本,当我们既希望这个脚本可以单独运行,同样希望它可以在其他的脚本中发挥作用. 这个时候就需要考虑使用 __name__ 了. 这里通过改造上面 Example 1的例子来直观感受一下

修改一下 test.py 文件

# test.py
def hello(name):
 print(f'Hello,{name}')
if __name__ == '__main__':
 hello("test")

再修改一下 test1.py 文件

# test1.py
from test import hello
hello("test1")

然后让我们先尝试直接运行一下 test.py,很显然这个时候, if 语句条件满足,会输出 Hello,test

$ python test.py 
Hello,test

这个时候我们如果运行 test1.py,程序就会输出 Hello,test1 了

$ python test1.py 
Hello,test1

如果我们把 if __name__ == "__main__"test.py 去掉会发生什么呢?

$ python test1.py 
Hello,test
Hello,test1

参考

What does if name == “main”: do?

What's in a (Python's) name?

到此这篇关于Python __name__ 是什么的文章就介绍到这了,更多相关Python __name__ 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用递归解决全排列数字示例
Feb 11 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python中atexit模块的基本使用示例
Jul 08 Python
日常整理python执行系统命令的常见方法(全)
Oct 22 Python
用Python解决计数原理问题的方法
Aug 04 Python
教你学会使用Python正则表达式
Sep 07 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 Python
Pytorch上下采样函数--interpolate用法
Jul 07 #Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 #Python
pytorch加载自己的图像数据集实例
Jul 07 #Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 #Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 #Python
Python调用C语言程序方法解析
Jul 07 #Python
keras实现VGG16方式(预测一张图片)
Jul 07 #Python
You might like
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
PHP 类型转换函数intval
2009/06/20 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
Python Socket编程入门教程
2014/07/11 Python
Python迭代用法实例教程
2014/09/08 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Python中修改字符串的四种方法
2018/11/02 Python
python三引号输出方法
2019/02/27 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python模块相关知识点小结
2020/03/09 Python
Python爬取梨视频的示例
2021/01/29 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
学子宴答谢词
2014/01/25 职场文书
产品生产计划书
2014/05/07 职场文书
大学生村官考核材料
2014/05/23 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
交通事故调解协议书
2015/05/20 职场文书
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS