浅析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实现基本进制转换的方法
Jul 11 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python中函数参数调用方式分析
Aug 09 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
对python模块中多个类的用法详解
Jan 10 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
python绘制规则网络图形实例
Dec 09 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
浅析Python 条件控制语句
Jul 15 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 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
表单提交验证类
2006/07/14 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
几种响应式文字详解
2017/05/19 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
实例讲解Python爬取网页数据
2018/07/08 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python笔记之工厂模式
2019/11/20 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
材料专业毕业生求职信
2014/02/26 职场文书
幼儿园开学寄语
2014/04/03 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014年行政工作总结
2014/11/19 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
muduo TcpServer模块源码分析
2022/04/26 Redis
微信小程序实现轮播图指示器
2022/06/25 Javascript