浅析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 打印对象的所有属性值的方法
Sep 11 Python
Python循环语句中else的用法总结
Sep 11 Python
git进行版本控制心得详谈
Dec 10 Python
python递归全排列实现方法
Aug 18 Python
Python实战之制作天气查询软件
May 14 Python
python实现简易淘宝购物
Nov 22 Python
python实现批量修改文件名
Mar 23 Python
Python连接Impala实现步骤解析
Aug 04 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
python如何控制进程或者线程的个数
Oct 16 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
js如何打印object对象
2015/10/16 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
python实现画出e指数函数的图像
2019/11/21 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
自荐信格式
2013/12/01 职场文书
求职信范文英文版
2014/01/05 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
联谊活动总结
2014/08/28 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python