开发者

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

目录
  • 什么是模块化开发
  • 如何拆分代码
    • 改进版:拆分成模块
  • 让模块更强大:使用 __init__.py
    • 你一定会遇到的问题
      • www.devze.com块导入失败?ModuleNotFoundError
      • import * 为什么不推荐
    • 总结

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

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

      什么是模块化开发

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

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

      比喻一下:

      • 模块(module)= 乐高积木
      • 包(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
      

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

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

      改进版:拆分成javascript模块

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

      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 的作用是把 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

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

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

      frompython operations import add, divide
      
      p编程客栈rint(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'

      解决方案

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

      main.py 开头加上:

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

      import * 为什么不推荐

      有人喜欢这样写:

      from operations import *
      

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

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

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

      from operations import add, divide  # 一目了然
      

      总结

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

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

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜