每天1分钟,轻松懂 Python
这是一份有基础、有深度的 Python 核心技术手册
拆分与组织代码
当我们写一个较大的应用程序时,如果都把所有代码都放在几个 py 文件中。有不也多久,这些 py 文件就会变得过于臃肿。
这时,我们就需要考虑将 Python 进行模块化。简单来说,模块化就是对 Python 代码的拆分与重组。
1、简单模块化
文件结构:
Project/
├── utils.py
└── main.py
utils.py 文件,定义函数
def get_sum(a, b):
return a + b
class Encoder:
def encode(self, s):
return s[::-1]
main.py 文件,调用函数
from utils import get_sum, Encoder
print(get_sum(3, 5)) # 8
encoder = Encoder()
print(encoder.encode('abc')) # 'cba'
2、子文件夹与包
慢慢地,你会发现,把所有文件都堆在一个文件夹下也并不是办法。所以,就有了 “包”
当子文件夹中,创建 __init__.py 文件标记,它就变成了 “包”。
那么,我们来对项目做进一步优化:
文件结构
Project/
├── utils/
│ ├── __init__.py
│ ├── str_utils.py
│ └── class_utils.py
└── main.py
utils/str_utils.py,定义函数
def get_sum(a, b):
return a + b
utils/class_utils.py,定义函数
class Encoder(object):
def encode(self, s):
return s[::-1]
class Decoder(object):
def decode(self, s):
return ''.join(reversed(list(s)))
main.py 文件,调用函数
from utils.str_utils import get_sum
from utils.class_utils import Encoder
# do something ...
路径与规范
绝对路径:是从项目根目录开始(如 Project/utils/str_utils.py )。
相对路径:依赖文件层级(复杂情况下,不推荐使用相对路径 )。
if __name__ == '__main__'
脚本作为主程序执行时运行代码,被 import 时不执行。
# utils/str_utils.py
def get_sum(a, b):
return a + b
if __name__ == '__main__':
# 主程序执行时运行(如 `python str_utils.py`)
print(get_sum(1, 2)) # 3
关于 if __name__ == '__main__' 更多内容,可以参考下面这篇文章中的 “明确代码入口” 部分:
点击跳转:从脚本到工具:文件批量重命名实战
模块化的工程价值
1、优势
- 代码复用:函数 / 类跨文件调用,减少重复逻辑。
- 可维护性:功能拆分后,修改局部不影响全局。
- 协作开发:多人分工维护不同模块(如 Facebook 单代码库模式 )。
2、大型项目实践
- 统一代码库(如 Facebook、Google ):所有模块从根目录导入,避免版本冲突。
- 虚拟环境(VirtualEnv):隔离项目依赖,通过
activate脚本配置环境变量。
-------- 写在最后 --------
关注我,每天1分钟,轻松懂 Python
我的同名公众号正在连载《FastAPI 开发实战》、《Python 核心技术》、《职场》。
点赞 :如果觉得有收获,点赞支持一下吧!
分享 :分享给身边同样对Python感兴趣的朋友!
关注我 :不要错过每一篇 Python 实战内容!
#Python #FastAPI #API #Web开发 #程序员 #编程教程 #效率提升