浅析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自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python中itertools的用法详解
Feb 07 Python
详解python常用命令行选项与环境变量
Feb 20 Python
Python多线程thread及模块使用实例
Apr 28 Python
PyQt5的相对布局管理的实现
Aug 07 Python
Python如何测试stdout输出
Aug 10 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 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中路径问题的解决方案
2006/10/09 PHP
聊天室php&mysql(三)
2006/10/09 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
jquery 插件学习(四)
2012/08/06 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
Vue自定义toast组件的实例代码
2018/08/15 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
python中文乱码的解决方法
2013/11/04 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
keras中的backend.clip用法
2020/05/22 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
主持人婚宴答谢词
2014/01/28 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL