if __name__ == '__main__'的作用和原理
最简单的理解就是这样:
__name__ 是当前模块名,当模块被直接运行时,模块名为 __main__。
所以 if __name__ == '__main__' 这句话的意思就是当前模块被直接运行时,以下代码将被执行,
当模块是被其它程序导入时,代码块不会被执行。
1️⃣ 举例分析
第一步,新建一个.py文件。命名为 test.py,写入如下代码:
# -*-coding:utf-8 -*-
print('测试程序--函数外')
def main():
print('测试程序--函数内')
if __name__ == '__main__':
main()
print('hello world')
运行后,输出如下:
测试程序--函数外
测试程序--函数内
hello world
第二步,在同一个文件夹下,新建一个文件,命名为 import_test.py,写入代码如下:
# -*-coding:utf-8 -*- import test
运行后结果如下:
测试程序--函数外
通过对比不难发现,import_test.py与之前的test.py相比,只输出了 “测试程序--函数外”,也就是意味着 if __name__ == "__main__": 之前的语句被执行,
之后的没有执行。
这是为什么呢?我们接着来分析!
我们在 test.py程序中 if __name__ == "__main__":之前加入如下代码:
print(__name__) # 将 __name__指定的内容打印出来
现在test.py程序运行的结果如下:
测试程序--函数外
__main__ # 打印__name__的结果
测试程序--函数内
hello world
可以看出,此时变量__name__的值为"__main__"。
又到了对比的时候了,运行 import_test.py 程序,见证奇迹的时刻!
import_test.py代码如下:
# -*- coding:utf-8-*- import test
结果如下:
测试程序--函数外
test # 导入后,print(__name__)指向的是被导入的模块名
此时,import_test.py中的__name__变量值为 test,不满足 __name__ == "__main__"的条件,因此,无法执行 if __name__ == "__main__": 后面的代码。
2️⃣ 原理分析
具体原理如下:
由于每个Python模块(Python文件)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)。如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,__name__ == '__main__'结果为真;而当模块被import到其他模块中时,__name__ == '__main__'结果为假,就不调用对应的方法。
简而言之
_name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被运行。
原文出自 https://mp.weixin.qq.com/s/QlLziPsuBO2rI0Q__xs9TQ,本文根据自己的理解有部分改动,感谢原作者的分享。
if __name__ == '__main__'的作用和原理的更多相关文章
- Python 中if __name__ == '__main__': 的作用和原理
转自https://blog.csdn.net/weixin_42660771/article/details/84035153 1.代码的功能 一个python的文件有两种使用的方法,第一是直接作为 ...
- if __name__ == 'main': 的作用和原理
if __name__ == 'main': 功能 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行. if __na ...
- 浅析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__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- 理解 python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- __name__ == "__main__"的作用是什么?
问题: __name__ == "__main__" 的作用是什么? # Threading example import time, thread def myfunction( ...
随机推荐
- Hadoop 2.2 & HBase 0.96 Maven 依赖总结
由于Hbase 0.94对Hadoop 2.x的支持不是非常好,故直接添加Hbase 0.94的jar依赖可能会导致问题. 但是直接添加Hbase0.96的依赖,由于官方并没有发布Hbase 0.96 ...
- 《DSP using MATLAB》示例Example 8.19
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- dda的fpga实现(转载)
The general approach using DDAs will be to simulate a system of first-order differential equations, ...
- LG1155 双栈排序
题意 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈\(S_1\)和\(S_2\),Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈\(S_ ...
- springboot中 简单的SpringMvc全局异常处理
1.全局异常处理类:GlobalExceptionHandler.java package com.lf.exception; import java.util.HashMap; import jav ...
- 5.JMeter测试mysql数据库
1.使用jmeter测试mysql数据库时,需要导入jar包,jar包网盘地址为:链接: https://pan.baidu.com/s/1-5-s7HccudT4GirpmBVn6Q 密码: bea ...
- Java中如何查看一个类依赖的包
Java中如何查看一个类依赖的包 如图, 我如何知道JSONArray是依赖的哪一个包呢,这里有两个json-lib包? 测试语句: public static void main(Strin ...
- java代码----------实现创建DataInputStream和DataOutputStream进行读写
总结: 主要是 捕获异常 package com.a.b; import java.io.*; public class testData { public static void main(Stri ...
- kubernetes 学习 常用命令
1 kubectl get nodes #查看nodes节点情况 2 kubectl describe node node_name_XXXX # 查看nodes详 ...
- 简单IOCP例子
使用IOCP模型编程的优点 ① 帮助维持重复使用的内存池.(与重叠I/O技术有关) ② 去除删除线程创建/终结负担. ③ 利于管理,分配线程,控制并发,最小化的线程上下文切换. ④ 优化线程调度,提高 ...