python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python模块化开发

Python通过模块化开发优化代码的技巧分享

作者:花小姐的春天

模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧

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

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

什么是模块化开发

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

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

比喻一下:

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

如何拆分代码

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

# 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

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

改进版:拆分成模块

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

calculator/
│── operations/
│   │── __init__.py
│   │── add.py
│   │── subtract.py
│   │── multiply.py
│   │── divide.py
│── main.py

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

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

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

from operations.add import add
from operations.divide import divide

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

优点:

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

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

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

细节提示

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

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

# operations/__init__.py
from .add import add
from .subtract import subtract
from .multiply import multiply
from .divide import divide

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

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

ModuleNotFoundError: No module named 'operations'

解决方案

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

main.py 开头加上:

import sys
sys.path.append(".")  # 确保 Python 知道当前目录

import * 为什么不推荐

有人喜欢这样写:

from operations import *

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

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

from operations import add, divide  # 一目了然

总结

到此这篇关于Python通过模块化开发优化代码的技巧分享的文章就介绍到这了,更多相关Python模块化开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文