python脚本和模块本质都是.py文件,区别在于使用意图和运行方式:脚本为直接执行而写,含顶层可执行代码,__name__=='__main__';模块为被导入复用而设计,主要定义函数类,避免副作用,__name__为模块名。

Python脚本和模块本质都是.py文件,区别在于**使用意图和运行方式**:脚本是为直接执行而写,模块是为被导入复用而设计。
脚本:以执行为目标,通常有可运行逻辑
脚本文件一般包含顶层可执行代码(如函数调用、print、main流程),常通过命令行直接运行:
- python my_script.py —— 解释器逐行执行,__name__ == '__main__'
- 适合一次性任务:数据清洗、爬虫启动、批量重命名等
- 可含函数定义,但核心是“做了什么”,不是“提供什么”
模块:以导入为目标,封装可复用功能
模块文件主要定义变量、函数、类,不主动执行业务逻辑;它的价值在被其他代码import后调用:
- import utils 或 from helpers import format_date
- 顶层代码应尽量避免副作用(如打印、文件操作),除非放在if __name__ == '__main__':块中
- 模块名会成为命名空间,例如math.sqrt()中的math就是模块名
关键差异:__name__ 的值决定行为
Python用__name__变量区分运行场景,这是判断脚本还是模块的底层机制:
立即学习“Python免费学习笔记(深入)”;
- 直接运行时:__name__ 是 '__main__'
- 被导入时:__name__ 是模块文件名(不含.py)
- 常见写法:if __name__ == '__main__': 下的代码只在直接运行时触发,兼顾脚本执行与模块导入
实际开发中如何选择
不必严格二分,一个.py文件可以既是脚本又是模块:
- 把核心功能写成函数或类,放在模块区域
- 把调用逻辑、测试代码、示例用法放进if __name__ == '__main__':块
- 这样既支持python tool.py快速验证,也支持import tool在项目中复用
不复杂但容易忽略。关键是想清楚:这个文件当前最需要被“运行”还是被“引用”。










