浅析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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
跟老齐学Python之重回函数
Oct 10 Python
python中list循环语句用法实例
Nov 10 Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python格式化日期时间操作示例
Jun 28 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
python数字转对应中文的方法总结
Aug 02 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实现MVC开发得最简单的方法――模型
2007/04/10 PHP
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
JS实现星星海特效
2019/12/24 Javascript
python实用代码片段收集贴
2015/06/03 Python
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
简单谈谈Python中的闭包
2016/11/30 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
详解Python的三种拷贝方式
2020/02/11 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
火车的故事教学反思
2014/02/11 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
酒店前台辞职书
2015/02/26 职场文书