浅析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 08 Python
Django的session中对于用户验证的支持
Jul 23 Python
Python实现excel转sqlite的方法
Jul 17 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
详解Python核心对象类型字符串
Feb 11 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
python文件读写代码实例
Oct 21 Python
Python web如何在IIS发布应用过程解析
May 27 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
Python面向对象特殊属性及方法解析
Sep 16 Python
python3排序的实例方法
Oct 20 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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不用正则采集速度探究总结
2008/03/24 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
Python协程的用法和例子详解
2017/09/09 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
单利模式及python实现方式详解
2018/03/20 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python五子棋游戏的设计与实现
2019/06/18 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
五水共治一句话承诺
2014/05/30 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
代理人委托书
2014/08/01 职场文书
初中政治教学反思
2016/02/23 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL