很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?

有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。

if __name__ == '__main__':的作用

一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。举例说明如下:

1) 直接执行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/2 15:42
# @File    : test.pyprint("this is one")print('__name__',__name__)if __name__ == '__main__':print("this is two")

直接执行 test.py,结果如下图,可以成功 print 两行字符串。即,if __name__=="__main__": 语句之前和之后的代码都被执行。

2) 通过 import 执行

然后在同一文件夹新建名称为 import_test.py 的脚本,输入如下代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/2 15:46
# @File    : import_test.pyimport  test

执行 import_test.py 脚本,输出结果如下:

只输出了第一行字符串。即,if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

if __name__ == '__main__':的运行原理

每个python模块(python文件,也就是此处的 test.py 和 import_test.py)都包含内置的变量 __name__,当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。

 “__main__” 始终指当前执行模块的名称(包含后缀.py)。进而当模块被直接执行,__name__ == 'main' 结果为真。

为了进一步说明,我们在 test.py 脚本的 if __name__=="__main__": 之前加入 print(__name__),即将 __name__ 打印出来。文件内容和结果如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/2 15:42
# @File    : test.pyprint("this is one")print('__name__',__name__)if __name__ == '__main__':print("this is two")

可以看出,此时变量__name__的值为"__main__"。

再执行 import_test.py,执行结果如下:

此时,test.py中的__name__变量值为 test,不满足 __name__=="__main__" 的条件,因此,无法执行其后的代码。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

python中 if __name__ == ‘__main__‘相关推荐

  1. python 中if __name__ = '__main__' 的作用

    python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...

  2. python中if __name__ == '__main__': 的解析

    2019独角兽企业重金招聘Python工程师标准>>> python中if __name__ == '__main__': 的解析 当你打开一个.py文件时,经常会在代码的最下面看到 ...

  3. Python中if __name__ == '__main__':作用

    Python中if __name__ == '__main__':作用 2012-03-22 11:52:40 分类: Python/Ruby #hello.py def sayHello(): st ...

  4. python基础之python中if __name__ == '__main__': 的解析

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  5. python 中 if __name__ == '__main__' 判断的作用

    假设这样一个a.py文件 def fun1(): ........ def fun2(): ......... if __name__=='__main__': ......#执行的一些语句 当你执行 ...

  6. Python中if __name__ == ‘__main__‘:的作用和原理(自用笔记)

    if __name__ == ' __main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行 ...

  7. python中if __name__ == '__main__'功能的解析

    [说明] 在使用python进行工作过程中我们经常能够看到脚本或者程序里再结尾处都有**"if name == 'main':"**语句,说到"if name == 'm ...

  8. python中if __name__ == __main__的解释

    想必很多初次接触python的同学都会见到这样一个语句,if __name__ == "__main__": 那么这个语句到底是做什么用的呢?在解释之前,你一定要知道的是: 1.p ...

  9. python中的__name__=='__main__'如何简单理解(一)

    1. 摘要: 通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明'):在你自己眼中,你是你自己(_name_ == '_main_') ...

最新文章

  1. Chrome Extension 检查视图(无效)处理方法
  2. 性能优化技巧 - 内存关联计算
  3. leetcode算法题--Triangle
  4. 使用STL的next_permutation函数生成全排列(C++)
  5. CSDN的Markdown编辑器的使用
  6. 互联网日报 | 新东方二次上市通过港交所聆讯;陌陌宣布任命新CEO;广汽蔚来发致歉声明...
  7. 无源滤波器和有源滤波器有什么区别?-道合顺大数据infinigo
  8. mach ipc 学习
  9. C++超市管理系统(MySQL)
  10. 30天自制操作系统(day1)
  11. linux usb lpt,Linux安装Composer
  12. 永磁同步电机力矩控制(九):定子磁场中的若干相关概念
  13. C#窗体加标尺的两种方式及显现效果
  14. HDU 4416 Good Article Good sentence(后缀数组)
  15. hive静态分区,动态分区,分桶区别
  16. 中国软件开发者(研究生)的人生规划(转自天涯虚拟社区)
  17. 智慧水库水位库容监测系统解决方案
  18. Unity(三十七):3D模型动画、脚本控制模型骨骼IK动画
  19. 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习应用
  20. 总结:25如何提升组织与个人的研发效能?

热门文章

  1. 直播+抽奖丨eygle等4位大咖讲述DBA职业发展必备软实力
  2. 案例解读:Oracle目录由于TFA触发bug导致jdb文件未自动清理引起空间不足
  3. 从内存管理原理,窥探OS内存管理机制
  4. AI语音入门:认识词错率WER与字错率CER
  5. SimpleDateFormat类的线程安全问题和解决方案
  6. 集成学习中的随机森林
  7. 云原生开发者须具备的1+N技能,开启第二曲线
  8. 线程、多线程和线程池,看完这些你就能全部搞懂了
  9. 补习系列(20)-大话 WebSocket 与 尬聊的实现
  10. Vue深入学习—虚拟DOM和Diff算法