Python模块化开发,从此告别乱糟糟的代码!

👋 Hello,朋友们!

最近写代码的你,是不是也这样:💻💤

写个项目,文件夹里 .py 文件堆成山,变量名取到怀疑人生,函数到处复制粘贴,代码改一次崩三回......每次打开项目,内心就一个感受------"这都啥玩意儿?" 🤯

放心,咱今天就来聊聊如何用模块化开发,拯救你的代码,让它井井有条、优雅可读,从此告别"屎山"!💪


🔥 什么是模块化开发?

简单来说,模块化开发就是把代码拆成一个个"零件",该封装封装,该拆分拆分。就像搭乐高一样,把不同的功能拆成一个个小块,随用随取,既不浪费时间,也不让代码乱成一锅粥。

Python 里,模块(module) 就是一个 .py 文件,里面可以定义函数、类、变量,还可以包含可执行代码。多个模块可以组成包(package),多个包再组成一个完整的项目。

比喻一下:

  • 模块(module)= 乐高积木
  • 包(package)= 一套乐高玩具
  • 项目 = 拼好的乐高城堡 🏰

说了这么多,咱直接上代码,看看到底怎么玩!


✂️ 如何拆分代码?

假设我们要写一个简单的计算器 ,支持加减乘除。一般人可能会直接在 calculator.py 里写一堆函数:

python 复制代码
# calculator.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0!")
    return a / b

👆 这么写倒也行,但问题来了

  1. 如果以后还要加新功能,比如平方、开根号,这个文件会越来越长。
  2. 代码全堆在一个 .py 里,复用性差,逻辑混乱。
  3. 别人(包括未来的自己)接手这段代码时,容易迷失在一堆函数里。

🛠 改进版:拆分成模块

我们可以把不同功能拆分到不同的文件里,比如这样:

csharp 复制代码
calculator/
│── operations/
│   │── __init__.py
│   │── add.py
│   │── subtract.py
│   │── multiply.py
│   │── divide.py
│── main.py

然后,每个文件只处理自己的功能:

python 复制代码
# operations/add.py
def add(a, b):
    return a + b
python 复制代码
# operations/divide.py
def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0!")
    return a / b

最后,在 main.py 里这样用:

python 复制代码
from operations.add import add
from operations.divide import divide

print(add(10, 5))  # 15
print(divide(10, 2))  # 5.0

优点:结构清晰 :每个功能各司其职,文件夹一目了然。

易维护 :以后加新功能,直接加新模块,互不影响。

可复用:不同项目里可以直接复用这些模块。

💡 细节提示

  • __init__.py 的作用是把 operations/ 变成一个 Python ,这样我们才能用 from operations.add import add 这样的方式导入。
  • 模块的命名尽量简洁有意义,比如 add.py 而不是 this_is_add_function.py文件名太长会让导入变得痛苦 😵‍💫。

🔄 让模块更强大:使用 __init__.py

有时候,我们不想每次都 from operations.add import add,希望直接 from operations import add,那就要利用 __init__.py

python 复制代码
# operations/__init__.py
from .add import add
from .subtract import subtract
from .multiply import multiply
from .divide import divide

这样,我们就可以一次性导入所有操作:

python 复制代码
from operations import add, divide

print(add(10, 5))  # 15
print(divide(10, 2))  # 5.0

💡 很多 Python 开发者容易忽视的一点

如果 __init__.py不写任何内容 ,那 from operations import add 是会报错的,因为 Python 不知道 operations 这个包里有哪些东西能被导入。


🎯 你一定会遇到的问题

❶ 模块导入失败?ModuleNotFoundError

bash 复制代码
ModuleNotFoundError: No module named 'operations'

解决方案

  1. 确保你在正确的目录下运行 main.py,不能在 operations/ 里运行。

  2. main.py 开头加上:

    python 复制代码
    import sys
    sys.path.append(".")  # 确保 Python 知道当前目录

import * 为什么不推荐?

有人喜欢这样写:

python 复制代码
from operations import *

看似很方便,但这其实是个坑,因为:

  • 你不知道具体导入了哪些东西,可能会覆盖已有的变量。
  • 代码可读性变差,别人(包括未来的你)会一脸懵逼。
  • __init__.py 里没 __all__ 的话,这种方式甚至会报错。

所以,建议明确导入所需模块,比如:

python 复制代码
from operations import add, divide  # 一目了然

🎉 总结

  • 模块化开发能让代码更清晰、可复用、易维护,是写好 Python 代码的必备技能!
  • 一个 .py 文件就是一个模块 ,多个模块组成包(package)
  • __init__.py 可以帮助管理包的导入,但用法要注意。
  • 避免 import *,尽量使用显式导入,代码更可读。

👀 你学会了吗? 还在用"屎山代码"凑合的朋友,赶紧试试模块化开发吧!如果觉得这篇文章有帮助,顺手点赞+在看就是对花姐最大的支持! 💖

🌟 下次见!Happy Coding! 🚀

相关推荐
狂炫冰美式7 分钟前
人均配了AI, 为什么公司还是没变快? 🤔 本质还是分布式系统问题
前端·后端·架构
乘风gg1 小时前
多 Agent 不是万能的!搞懂这 5 个原则,少走 1 年弯路!
前端·agent·ai编程
猩猩程序员2 小时前
Vercel 推出 Agent 框架 Eve:让 AI Agent 像写 Web 应用一样简单
前端
她的男孩2 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
爱读源码的大都督2 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端
爱勇宝2 小时前
Claude Code 被曝暗藏“隐形检测”代码:封代理不是最可怕的,可怕的是你根本不知道它在干什么
前端·后端·程序员
小牛不牛的程序员2 小时前
我用 Claude Code 半天撸完了一个完整网站,AI 编程到底提升了多少效率?
前端
东风破_2 小时前
JavaScript 面试常考的字符串算法:从反转字符串到回文判断
前端·javascript
ITOM运维行者3 小时前
从零搭建企业级服务器监控体系:踩坑实录与架构设计
前端·后端
monologues3 小时前
深入 Vue 3 源码:响应式系统的精妙设计与编译优化
前端