浅析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随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
基于Python解密仿射密码
Oct 21 Python
你可能不知道的Python 技巧小结
Jan 29 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
Python基于pandas爬取网页表格数据
May 11 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Python初识逻辑与if语句及用法大全
Aug 07 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连接mssql:pdo odbc sql server
2011/07/20 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python选课系统开发程序
2016/09/02 Python
python实现百度语音识别api
2018/04/10 Python
PyQt5实现拖放功能
2018/04/25 Python
python 动态调用函数实例解析
2019/10/21 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
区分python中的进程与线程
2020/08/13 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
家长对孩子的感言
2014/03/10 职场文书
手写实现JS中的new
2021/11/07 Javascript
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
Java线程的6种状态与生命周期
2022/05/11 Java/Android
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS