浅析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
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
python3图片文件批量重命名处理
Oct 31 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python常量折叠基础知识点讲解
Feb 28 Python
Python入门之使用pandas分析excel数据
May 12 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
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
Add a Table to a Word Document
2007/06/15 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python 正则式 概述及常用字符
2009/05/07 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
绿化工程实施方案
2014/03/17 职场文书
真诚的求职信
2014/07/04 职场文书
学籍证明模板
2014/11/21 职场文书
教代会闭幕词
2015/01/28 职场文书
投标售后服务承诺书
2015/04/29 职场文书