【Python】if __name__ == '__main__' 含义解析
相信大家在看别人的python程序时,可能会在大部分的程序后看到标题这段代码,这里解释下它的意义。总的来说,这句代码的作用就是既能保证当前的.py文件直接运行,也能保证其可以作为模块被其他.py文件导入。
下面我将通过几个例子帮助大家理解
demo1.py
# encoding=utf-8
# -*- coding: UTF-8 -*- # print(__name__)
输出结果:
查看类型:
这说明__name__本身其实就是一个变量,不过比较特殊。
实际上,它是在程序执行前就被创建并赋值的,而赋值的机制是这里的关键。
在当前程序被当作主程序运行时, __ name__被自动赋值为固定的字符串__main__;
当它被当作模块被其他文件调用时,自动被赋值为模块所在的文件名。
对于以下demo2.py代码:
def printhello():
print("Hello World")
print(__name__) if __name__ == '__main__':
printhello()
输出的结果为:
Hello World
__main__
因为此时上述代码没有在其他程序中作为模块导入,而是直接执行的,所以 __name__变量被赋值为"__main__" ;
其实上述带有if判断的代码和下述demo_f.py 代码执行结果相同:
def printhello():
print("Hello World")
print(__name__) printhello()
可见这句if判断代码的作用就是既能保证当前的.py文件直接运行,也能保证其可以作为模块被其他.py文件导入。所以它也可以在当前文件被当作一个模块导入时发挥关键作用。
但当其不要判断语句且它被作为模块导入时,输出的结果可能就与大家想的有点偏差了。
from demo_f import printhello printhello()
程序执行输出的结果为:
Hello World
demo_f
Hello World
demo_f
首先,可以看到p_l.py在被作为模块调入时,对应的__name__被赋值为对应的文件名
虽然只运行了一遍demo_f.py文件,但我们可以发现函数执行了两次
这是因为,不带判断语句的demo_f.py文件作为模块被引入时,printhello函数已经自动执行了一次,之后在4.py被主动调用时执行了一次,所以一共执行两次。
那么,此带if判断的代码的作用已经十分清楚了,它保证模块文件的函数既能在模块文件单独执行,又能保证它被其它.py文件导入时,相应的函数不会执行两次。
————————(我是分割线)————————
参考:
1. https://blog.csdn.net/forever_wen/article/details/84787021
备注:
初次编辑时间:2019年10月5日14:25:15
环境:Windows 7 / Python 3.7.2
【Python】if __name__ == '__main__' 含义解析的更多相关文章
- 对于python的__name__="__main__"的含义的理解
学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...
- 浅析python 中__name__ = '__main__' 的作用
引用http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...
- 【转】浅析python 中__name__ = '__main__' 的作用
原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ ...
- 002_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- 理解 python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- python的__name__ == \'__main__\' 意义
转自http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...
- 【Python中if __name__ == '__main__': 的解析】
在很多Python代码中,在代码的最下方会看到 if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.p ...
- Python常见经典 python中if __name__ == '__main__': 的解析
当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...
- Python if __name__ == "__main__" 的含义
一.概念 我们在Python中经常可以看到一个程序会有if __name__ == "__main__",同时这通常是写在程序的入口位置,那么他有什么特殊含义呢?在了解这个之前,我 ...
随机推荐
- 洛谷P4317 花神的数论题
洛谷题目链接 数位$dp$ 我们对$n$进行二进制拆分,于是就阔以像十进制一样数位$dp$了,基本就是套模板.. 接下来是美滋滋的代码时间~~~ #include<iostream> #i ...
- 【线性代数】2-4:矩阵操作(Matrix Operations)
title: [线性代数]2-4:矩阵操作(Matrix Operations) toc: true categories: Mathematic Linear Algebra date: 2017- ...
- 《30天自制操作系统》学习笔记--番外篇之Mac环境下的工具介绍
这几天又有点不务正业了,书也没看,一直在搞这个破环境,尝试各种做法,网上各种垃圾信息,浪费了很多时间,说的基本都是废话,不过还是找到了一些,赶紧写下来,不然这个过几天又忘了 首先是环境,我用的是Max ...
- Linux之静态库
命名规则: lib + 库的名字 + .a 制作步骤 生成对应.o文件 .c à .o 将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o 发布 ...
- 反省——关于csp-s模拟50
本人于搜索csp-s模拟49题解时,有意识地点开了一篇关于csp-s模拟50T2的题解,并知道了题解是二维前缀和以及四维偏序. 更重要的是,那篇博客说有解法二,叫二维莫队. 于是我上网搜索二维莫队,结 ...
- python小技巧之把list组合成chain
a=[] for i in range(10): a.append(i) for i,j in zip(a[:-1],a[1:]): print('%s=>%s'%(i,j)) 输出结果: 0= ...
- BUUCTF平台-web-边刷边记录-1
1.WarmUp 思路很清晰,文件包含,漏洞点在代码会二次解码,只需注入一个?就可以使用../../进行路径穿越,然后去包含flag,flag路径在hint.php里面有 2.easy_tornado ...
- 黑马lavarel教程---9、缓存操作
黑马lavarel教程---9.缓存操作 一.总结 一句话总结: legend2项目中自己写的哪些文件操作都可以通过这里的缓存实现,简单方便 1.lavarel中如何使用后端主流的缓存如 Memcac ...
- ansible-playbook的YAML语法学习
YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...
- iView分页组件之分页使用
基于表格简单示例 <template> <div style="margin:0 auto;"> <Table :loading="load ...