浅析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的Flask框架中实现单元测试的教程
Apr 20 Python
python运行时间的几种方法
Jun 17 Python
对python中return和print的一些理解
Aug 18 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
在脚本中单独使用django的ORM模型详解
Apr 01 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHP对象相关知识总结
2017/04/09 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
layui实现table加载的示例代码
2018/08/14 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
利用python画一颗心的方法示例
2017/01/31 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
python简单贪吃蛇开发
2019/01/28 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
JPA的优势都有哪些
2013/07/04 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
李培根演讲稿
2014/05/22 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书