当前位置: 首页 > article >正文

Python模块化编程

Python模块化编程

记得我刚学Python那会儿,特别喜欢把所有代码都写在一个文件里。直到有一天,我的项目膨胀到了2000多行代码,每次修改都要翻半天…这才痛定思痛,开始研究模块化编程。今天就跟大家聊聊这个让代码变得优雅的魔法。

一、什么是模块化?

想象你在搭乐高积木。如果所有零件都混在一起,找起来多费劲啊!模块化就是把代码像积木一样分门别类放好,需要哪块就拿哪块。

模块化的三大好处

  1. 代码复用:写好一个模块,可以在多个项目里反复使用
  2. 便于维护:出了问题能快速定位到具体模块
  3. 团队协作:不同人负责不同模块,互不干扰

二、Python模块基础

2.1 创建你的第一个模块

新建一个calculator.py文件:

# calculator.py
def add(a, b):return a + bdef subtract(a, b):return a - bPI = 3.1415926

然后在另一个文件中使用它:

import calculatorprint(calculator.add(2, 3))  # 输出5
print(calculator.PI)          # 输出3.1415926

2.2 几种导入方式

  1. 全量导入(最常用)
import module_name
  1. 选择性导入(推荐)
from module_name import function1, function2
  1. 别名导入(解决命名冲突)
import numpy as np
import pandas as pd

三、进阶玩法

3.1 包(Package)的组织

当模块越来越多时,就需要用包来管理了。包其实就是带有__init__.py的文件夹:

my_package/
├── __init__.py
├── module1.py
└── module2.py

3.2 __init__.py的妙用

这个文件可以控制包的导入行为。比如在__init__.py中加入:

from .module1 import *
from .module2 import *

这样导入包时就能直接使用模块内容:

from my_package import function_from_module1

3.3 相对导入

在包内部可以使用相对路径导入:

from .sibling_module import some_function
from ..parent_package import other_function

四、实战案例:电商系统模块化

假设我们要开发一个简易电商系统:

ecommerce/
├── __init__.py
├── cart.py       # 购物车功能
├── payment.py    # 支付功能
├── product.py    # 商品管理
└── user.py       # 用户管理

cart.py示例

class ShoppingCart:def __init__(self):self.items = []def add_item(self, product, quantity):self.items.append({'product': product, 'quantity': quantity})def calculate_total(self):from .product import get_price  # 相对导入total = 0for item in self.items:total += get_price(item['product']) * item['quantity']return total

五、常见问题解答

Q1:循环导入怎么办?

A:这是模块化设计的大忌!解决方法:

  1. 重构代码结构
  2. 将导入语句移到函数内部
  3. 使用第三方依赖注入

Q2:如何组织大型项目?

推荐结构:

project/
├── docs/          # 文档
├── tests/         # 测试代码
├── src/           # 源代码
│   ├── module1/
│   ├── module2/
│   └── main.py
├── requirements.txt
└── setup.py

六、模块化最佳实践

  1. 单一职责原则:一个模块只做一件事
  2. 命名要有意义utils.py这种名字是万恶之源
  3. 控制模块大小:建议不超过500行
  4. 写好文档字符串:用"""模块功能说明"""
  5. 版本兼容:修改公开接口时要谨慎

七、总结

模块化不是Python的专利,但Python让它变得特别简单。记住:好的代码组织就像整理房间,虽然前期费点功夫,但后期效率提升不是一点半点。

最后送大家一句话:“代码首先是写给人看的,其次才是给机器执行的。”

(本文示例代码已测试通过Python 3.8+环境)

相关文章:

Python模块化编程

Python模块化编程 记得我刚学Python那会儿,特别喜欢把所有代码都写在一个文件里。直到有一天,我的项目膨胀到了2000多行代码,每次修改都要翻半天…这才痛定思痛,开始研究模块化编程。今天就跟大家聊聊这个让代码变得优雅的魔法。…...

Linux性能分析工具perf

perf 工具详解 perf(Performance Counters for Linux)是 Linux 系统上的一个强大的性能分析工具,用于监控和分析系统及应用程序的性能。它基于 Linux 内核的 Performance Event Subsystem(perf_events),能…...

Android开发-使用内容组件获取通讯信息

在Android开发中,访问和处理用户的通讯信息(如联系人、通话记录等)是一项常见的需求。通过使用Android的内容提供者(ContentProvider),开发者可以方便地查询这些数据,并将其集成到自己的应用中。…...

文件目录与检索综合练习题

文章目录 前言一、基础部分二、参数应用三、参数进阶四、组合应用五、归档压缩六、统计与分析总结 前言 这部分练习题帮助大家更好的掌握命令 一、基础部分 1.用grep在error.log中查找所有含"Timeout"的行 2.使用find在/var/log下搜索7天内修改过的.log文件 3.对da…...

Python+Selenium爬虫:豆瓣登录反反爬策略解析

1. 引言 在当今互联网时代&#xff0c;数据抓取&#xff08;爬虫&#xff09;技术广泛应用于数据分析、市场调研、自动化测试等领域。然而&#xff0c;许多网站采用动态加载技术&#xff08;如Ajax、React、Vue.js等框架&#xff09;来渲染页面&#xff0c;传统的**<font s…...

信息系统运行管理员:临阵磨枪版

信息系统运行管理员考试 - 全覆盖详细背诵大纲 (根据考情分析和原始材料&#xff0c;力求完整覆盖考点细节) 第一部分&#xff1a;基础知识与运维概览 Chapter 1: 信息系统运维概述 (上午题 5分) 信息&#xff1a; 含义&#xff1a;香农 - 减少随机不确定性的东西&#xff1b…...

电总协议调试助手更新-PowerBus-v1.0.5

电总协议调试助手&#xff0c;该工具主要是用于打包电总协议&#xff0c;用于电总协议的设备调试&#xff08;精密空调、UPS、基站电源等等&#xff09;。电总协议校验计算、编码转换比较麻烦&#xff0c;手动组包困难&#xff0c;使用该工具可以大大提高调试效率。 Ver1.0.5版…...

技术文档:变频器干扰问题与解决方案

1. 引言 在现代工业自动化系统中&#xff0c;变频器&#xff08;Variable Frequency Drive, VFD&#xff09;因其高效节能和精确调速的特点被广泛应用于电机控制。然而&#xff0c;变频器在运行过程中会产生高频电磁干扰&#xff08;EMI&#xff09;&#xff0c;对周边设备如P…...

2025认证杯数学建模C题思路+代码+模型:化工厂生产流程的预测和控制

2025认证杯数学建模C题思路代码模型&#xff0c;详细内容见文末名片 在化工厂的生产流程中&#xff0c;往往涉及到多个反应釜、管道和储罐等设备。在 流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时&#xff0c;最终的产物才是合格的。这些参数…...

亚马逊,temu测评采购低成本养号策略:如何用一台设备安全批量管理买家账号

只要能够巧妙规避平台的检测和风控措施&#xff0c;测评便可安全进行。 自养号测评&#xff0c;它更便于卖家掌控&#xff0c;且能降低风险。现在很多卖家都是自己养号&#xff0c;自己养号都是精养&#xff0c;不是自动的机刷&#xff0c;买家账号掌握在自己手里&#xff0c;更…...

SiFli-SDK 编译

1.编译报错 scons: *** No SConstruct file found. 出现这个错误是没有正确进入到工程目录执行编译命令&#xff0c;例如应该进入project目录中。 2.scons: *** [build_em-lb525_hcpu\src\resource\strings\en_us.c] AttributeError : dict object has no attribute iteritem…...

React 第四十一节Router 中 useActionData 使用方法案例以及注意事项

一、useActionData前言 useActionData 是 React Router 提供的一个钩子函数&#xff0c;用于获取在路由的 action 函数中返回的数据。它通常与表单提交&#xff08;通过 <Form> 组件&#xff09;配合使用&#xff0c;用于处理表单提交后的服务器响应数据&#xff08;如错…...

C++多态实现的必要条件剖析

在C中&#xff0c;多态的一个必要条件确实是通过基类的指针或引用调用虚函数。这一要求背后的原因与C如何实现动态绑定&#xff08;运行时多态&#xff09;密切相关。下面详细解释了为什么需要使用基类的指针或引用来实现多态。 动态绑定与静态绑定 静态绑定&#xff08;编译期…...

C语言_自动义类型:联合和枚举

1. 联合体 1.1 联合体类型的声明 与结构体相似&#xff0c;联合体也是有一个或多个成员&#xff08;可以是不同类型&#xff09;构成&#xff1b;但是编译器只为最大的成员分配足够的内存空间 联合体的特点是所有成员共用同一块内存空间&#xff0c;所以联合体也叫&#xff…...

汽车紧固件涂层18问:看敦普无铬锌铝涂料如何为螺丝防锈防腐

导读 在汽车紧固件防锈涂装领域&#xff0c;敦普牌紧固件无铬锌铝涂料&#xff0c;是专为汽车紧固件打造的水性涂料&#xff0c;集防锈、环保、高性价比于一体。它有何独特之处&#xff1f;让我们一探究竟。​ 1、敦普紧固件无铬锌铝涂料是什么产品&#xff1f; 敦普紧固件无铬…...

掘金中亚货代蓝海,易境通货代系统解锁数字化制胜密码!

2025年&#xff0c;中亚地区正成为全球物流行业的新蓝海。中亚五国因其独特的地缘位置和“一带一路”倡议的深化推进&#xff0c;正逐渐成为全球物流行业的战略要地。 在政策红利、基建升级与市场需求的叠加效应下&#xff0c;中亚物流市场预计在2025年迎来爆发式增长。但传统…...

Python内存管理:赋值、浅拷贝与深拷贝解析

赋值与共享资源 在Python中&#xff0c;直接赋值操作&#xff08;如 list2 list1&#xff09;会导致两个变量共享同一个内存地址。这意味着对 list1 的修改会直接影响到 list2&#xff0c;因为它们指向同一个对象。 注意: 赋值等于完全共享资源 如果我们不希望这样完全共享&…...

W1R3S: 1.0.1靶场

W1R3S: 1.0.1 来自 <W1R3S: 1.0.1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.249 3&#xff0c;对靶机进行端口…...

深度学习-分布式训练机制

1、分布式训练时&#xff0c;包括train.py的全部的代码都会在每个gpu上运行吗&#xff1f; 在分布式训练&#xff08;如使用 PyTorch 的 DistributedDataParallel&#xff0c;DDP&#xff09;时&#xff0c;每个 GPU 上运行的进程会执行 train.py 的全部代码&#xff0c;但通过…...

[Mamba轻量化]DefMamba: Deformable Visual State Space Model,CVPR2025

paper 文章目录 AbstractMethod整体模型架构可变形状态空间模型 Experiments Abstract 然而&#xff0c;大多数现有的视觉Mamba方法使用预定义的扫描顺序将图像展平为1D序列&#xff0c;导致模型在特征提取过程中对图像空间结构信息的利用能力减弱。为解决这一问题&#xff0…...

CSRF 和 XSS 攻击分析与防范

CSRF 和 XSS 攻击分析与防范 CSRF (跨站请求伪造) 什么是 CSRF&#xff1f; CSRF (Cross-Site Request Forgery) 是一种攻击方式&#xff0c;攻击者诱使用户在已登录目标网站的情况下&#xff0c;执行非预期的操作。 攻击流程&#xff1a; 用户登录可信网站 A在不登出 A 的…...

找银子 题解(c++)

题目 思路 首先&#xff0c;这道题乍一看&#xff0c;应该可以用搜索来做。 但是&#xff0c;搜索会不会超时间限制呢&#xff1f; 为了防止时间超限,我们可以换一种做法。 先创立两个二维数组&#xff0c;一个是输入的数组a&#xff0c;一个是数组b。 假设 i 行 j 列的数…...

中国版 Cursor?腾讯推出 AI 编程助手 CodeBuddy,重新定义编程体验

人工智能&#xff08;AI&#xff09;技术的迅猛发展正深刻地变革着各个行业&#xff0c;编程领域也不例外。以原生 IDE 体验见长的 Cursor&#xff0c;凭借其 Agent 模式在 AI 编程领域脱颖而出&#xff0c;对 GitHub Copilot 以及 VS Code 与 JetBrains 全家桶的地位发起挑战。…...

JVM学习专题(二)内存模型深度剖析

目录 1.JVM结构体系 ​编辑 2.跨平台特性 3.JVM整体结构及内存模型 1.栈内存 1、栈帧&#xff1a; 1.局部变量表 2.操作数栈 3.动态链接 4.方法出口 2、创建对象 2.程序计数器&#xff1a; 3.方法区 ​4.堆 5.本地方法区 6.总结 1.JVM结构体系 JDK、JRE 和 JVM…...

密码学实验:凯撒密码

密码学实验&#xff1a;凯撒密码 一、实验目的 掌握凯撒密码的数学原理&#xff1a;理解字符移位与模运算的结合&#xff0c;实现加解密算法。理解暴力破解本质&#xff1a;通过穷举有限密钥空间&#xff0c;掌握利用语言特征破解密文的方法。编程实践&#xff1a;用Python实…...

linux备份与同步工具rsync

版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 文章目录 版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 实验环境介绍&#xff1a; 1.工具介绍 2.详细介绍 2.1 本地模式&#xff08;用得少&#xff09; 2.2 远程模式 2.3 守护进程模式…...

PYTHON训练营DAY26

一、函数 &#xff08;一&#xff09;不带参数的函数 # 定义一个简单的问候函数 def greet():"""打印一句问候语。"""message "大家好&#xff01;欢迎学习Python函数定义&#xff01;"print(message)greet()&#xff08;二&#x…...

WPS一旦打开,就会修改默认打开方式,怎么解?

目录 前言 解决方法 结语 前言 电脑上同时存在WPS和微软的Office全家桶&#xff0c;但是我更喜欢用Office全家桶。前几天刚在设置改过来&#xff0c;忘记更改pdf文件打开默认应用。结果没过几天&#xff0c;不小心用WPS打开pdf文件时候&#xff0c;给我把默认设置全改回去了…...

从概念到可工程化智能体的转变路径——以“知识奇点工程师”为例

产品部门定义了一个如下概念性的“知识奇点工程师”&#xff0c;他们构建的不仅仅是一个数据库或知识图谱&#xff0c;而是一个活的、能自我进化的知识生态系统&#xff0c;是整个“Neuralink for Education”宏伟蓝图的基石。他们的工作难度和重要性&#xff0c;不亚于为AI引擎…...

单片机-STM32部分:12、I2C

飞书文档https://x509p6c8to.feishu.cn/wiki/MsB7wLebki07eUkAZ1ec12W3nsh 一、简介 IIC协议&#xff0c;又称I2C协议&#xff0c;是由PHILP公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备&#xff0c;IIC属于半双工同步通信方式。 IIC是一种同步…...