浅析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实现从字典中删除元素的方法
May 04 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
python 基于opencv实现图像增强
Dec 23 Python
python math模块的基本使用教程
Jan 16 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 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
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
python中list循环语句用法实例
2014/11/10 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python内存管理机制原理详解
2019/08/12 Python
用python对oracle进行简单性能测试
2020/12/05 Python
康拓普公司Java笔面试
2016/09/23 面试题
保荐人的岗位职责
2013/11/19 职场文书
婚庆司仪主持词
2014/03/15 职场文书
汇源肾宝广告词
2014/03/20 职场文书
2014年法务工作总结
2014/12/11 职场文书
大国崛起英国观后感
2015/06/02 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
redis protocol通信协议及使用详解
2022/07/15 Redis