浅析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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
python基于queue和threading实现多线程下载实例
Oct 08 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
python实现手机销售管理系统
Mar 19 Python
python openpyxl使用方法详解
Jul 18 Python
python获取Linux发行版名称
Aug 30 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 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将数组存储为文本文件方法汇总
2015/10/28 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
Python os模块介绍
2014/11/30 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
大学四年个人自我小结
2014/03/05 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技