浅析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 中 Meta Classes详解
Feb 13 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
python requests爬取高德地图数据的实例
Nov 10 Python
numpy.where() 用法详解
May 27 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
基于python实现从尾到头打印链表
Nov 02 Python
python多进程下的生产者和消费者模型
May 07 Python
python实现文法左递归的消除方法
May 22 Python
Python Http请求json解析库用法解析
Nov 28 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
用python画城市轮播地图
May 28 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写的serv-u的web申请账号的程序
2006/10/09 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php自动加载方式集合
2016/04/04 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
javascript数据类型详解
2017/02/07 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
简介Django框架中可使用的各类缓存
2015/07/23 Python
如何在Python中编写并发程序
2016/02/27 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
浅谈Python中的字符串
2020/06/10 Python
python能做哪方面的工作
2020/06/15 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
2015年保安个人工作总结
2015/04/02 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
社区宣传标语口号
2015/12/26 职场文书