Python if __name__ == "__main__" 解释
一种机制,允许脚本以不同的方式运行,这取决于作为独立的程序执行还是作为模块被其他脚本导入。这种机制就是
if __name == "__main__"
其作用是控制某些代码块只在该文件作为主程序运行时才执行,而在其被其他模块导入时不执行。
例如 a.py 在 python 直接执行与被 import 作为模块的执行对比:
# a.py
# 在顶层打印 __name__ 全局变量
print(__name__, type(__name__))
if __name__ == "__main__":
print('As script')
else:
print('As module')
- 如果 a.py 作为脚本使用,则输出:
$ python a.py
__main__ <class 'str'>
As script
$ python -m a
__main__ <class 'str'>
As script
- 如果 a.py 作为模块使用,则输出:
In [1]: import a
a <class 'str'>
As module
In [2]: __name__
Out[2]: '__main__'
In [3]: a.__name__
Out[3]: 'a'
这里的解释 模块和脚本的概念及 __name__
变量
模块和脚本
- 模块:任何一个包含 python 代码的文件(
.py
文件)都可以作为一个模块被其他文件导入。模块可以包含函数、类、变量定义等。 - 脚本:当直接运行一个 python 文件时,这个文件就被视为一个脚本。
__name__
变量
- 当 python 运行一个文件时,它会设置一些特殊变量,
__name__
就是其中之一。这个变量的值取决于该文件是被导入为模块还是作为主脚本执行。 - 如果文件被当作主脚本执行,
__name__
将被设置为__main__
。 - 如果文件被作为模块导入到其他文件,
__name__
将被设置为模块的名字,如上 a.py -> a
使用 if __name__ == "__main__"
的原因
模块重用:你可能希望你的 文件能够被其他文件导入并重用其中的函数、类等定义,同时,当作为主程序运行时,执行一些测试代码或主要逻辑。
代码组织:这种用法可以帮助你在一个文件中既定义函数、类等,又保持能够执行一些独立的操作,而这些操作仅在该文件作为主程序运行时才进行。
避免意外执行:当你的模块被导入时,防止运行某些不期望在导入时执行的代码。
Good case & Bad case
以下是使用 if __name__ == "__main__"
的好情况和不适宜的情况:
适宜 | 不适宜 |
---|---|
文件既作为独立脚本运行,又作为模块被其他文件导入时 | 非常简单的脚本,仅用于单次执行或快速任务 |
测试或示例代码,仅在文件作为主程序运行时执行 | 在交互式环境(如 Jupyter)中编程,直接运行代码片段更方便 |
纯粹脚本文件 | 专门用于定义模块(只包含函数、类定义),不需要直接执行代码 |
提供清晰的入口点,特别是在构建大型应用或复杂脚本时 | 开发 python 包或库,主要目的是提供接口和功能,而非执行脚本 |
--- | 进行测试驱动开发(TDD),使用测试框架来执行测试用例 |
Python if __name__ == "__main__" 解释的更多相关文章
- 【转】浅析python 中__name__ = '__main__' 的作用
原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ ...
- 浅析python 中__name__ = '__main__' 的作用
引用http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...
- 对于python的__name__="__main__"的含义的理解
学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...
- 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基础8之自定义模块、if __name__==__main__:解释
一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 关于python中__name__=='__main__'的解释
调用文章是:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318451 ...
- 谈谈python 中__name__ = '__main__' 的作用
最近刚刚学习python,看到别人的源代码中经常出现这样一个代码段: if __name__ = '__main__' dosomting() 觉得很晕,不知道这段代码的作用是什么,后来上网查了一些资 ...
- python if __name__ == '__main__'解析
废话不多说,正题: python中所有的模块都有一个内置属性 __name__,一个模块的 __name__ 的值取决于如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为 ...
随机推荐
- 网络OSI七层模型及各层作用 tcp-ip
背景 虽然说以前学习计算机网络的时候,学过了,但为了更好地学习一些物联网协议(MQTT.CoAP.LWM2M.OPC),需要重新复习一下. OSI七层模型 七层模型,亦称OSI(Open System ...
- 瑞芯微RK3568J如何“调节主频”,实现功耗降低?一文教会您!
RK3568J主频模式说明 为降低RK3568J功耗,提高运行系统健壮性,在产品现场对RK3568J实现主频调节则显得尤为重要. 图 1 RK3568J官方数据手册主频模式描述 normal模式 根据 ...
- 【资料分享】全志科技T507工业核心板硬件说明书(下)
目 录 3 电气特性 3.1 工作环境 3.2 功耗测试 3.3 热成像图 4 机械尺寸 5 底板设计注意事项 5.1 最小系统设计 5.1.1 电源设计说明 5.1.2 系统启动配置 5.1. ...
- 都是全志T113处理器,“-i”和“-S3”有什么区别?
自9个月前,创龙科技"1片含税就79元"的全志T113-i双核ARM Cortex-A7@1.2GHz的工业核心板(SOM-TLT113)推出之后,不少嵌入式软硬件工程师.用户都咨 ...
- java --面试题大全
J2EE面试题 文档版本号:V2.0 2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文 ...
- oeasy教您玩转vim - 7 - # 从头插入
另存与保存 回忆上节课内容 上次我们学会了另存为命令 : saveas {file} 还有这个直接保存命令 : w 真的可以把修改存了 下面我们来研究插入命令的细节. 插入命令 首先我们可以查询这个插 ...
- Linux 手工释放Linux Cache Memory
手工释放Linux Cache Memory 为了加速操作和减少磁盘I/O,内核通常会尽可能多地缓存内存,这部分内存就是Cache Memory(缓存内存).根据设计,包含缓存数据的页面可以按需重新用 ...
- freemarker+minio实现页面静态化
什么是页面静态化? 将原本动态生成的网页内容通过某种形式转化为html并存储在服务器上,当用户请求这些页面时就不需要执行逻辑运算和数据库读 优点: 性能:提高页面加载速度和响应速度,还可以减轻数据库. ...
- C#/.NET/.NET Core优秀项目和框架2024年7月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...
- 【AI模型】PPT生成
一.天工AI https://www.tiangong.cn/ 先对话进行提纲生成,然后可以编辑提纲,再进行PPT生成 生成完毕后,可以直接点击导出下载 二.星火讯飞 讯飞智文 生成的PPT相比天工的 ...