浅析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中实现三目运算的方法
Jun 21 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Python建立Map写Excel表实例解析
Jan 17 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
python中sympy库求常微分方程的用法
Apr 28 Python
基于Python测试程序是否有错误
May 16 Python
python中绕过反爬虫的方法总结
Nov 25 Python
Python中threading库实现线程锁与释放锁
May 17 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
咖啡的植物学知识
2021/03/03 咖啡文化
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
理解JavaScript的prototype属性
2012/02/11 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
Vue计算属性的使用
2017/08/04 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
python中将字典转换成其json字符串
2014/07/16 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python实现Const详解
2015/01/27 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
十八届三中全会个人学习材料
2014/02/13 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
信用卡收入证明范本
2015/06/12 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang