终于弄懂了Python自定义模块与代码复用
自定义模块与代码复用
在编写Python代码时,很多时候我们会遇到需要多次使用相同功能的情况。这时候,模块化编程就显得尤为重要。通过将常用的功能代码放入单独的模块中,我们可以轻松地进行代码复用,避免重复编写相同的代码,从而提高程序的维护性和可读性。
1. 什么是自定义模块
自定义模块是指用户根据需求自行编写的Python文件(通常以.py
为扩展名)。这些模块可以包含函数、类、变量以及可执行的代码。当我们需要在其他程序中使用这些功能时,只需要导入自定义模块即可。
例如,如果我们写了一个包含数学计算的模块,可以将该模块保存为math_tools.py
文件,之后在其他Python脚本中通过import math_tools
来调用该模块中的函数。
2. 如何创建自定义模块
创建自定义模块非常简单,只需将一组相关功能的代码保存到一个.py
文件中。这个文件就是我们的模块,之后可以通过import
语句将其导入到其他脚本中。
步骤:
- 创建一个Python文件,将功能代码写入其中。
- 在其他文件中使用
import
语句导入该模块。 - 调用模块中定义的函数或类。
示例:
假设我们需要创建一个计算财务指标的工具模块,文件名为financial_tools.py
,其中包括计算年化收益率和复利的两个函数。
# financial_tools.pydef annual_return(initial, final, years):"""计算年化收益率:param initial: 初始投资金额:param final: 最终投资金额:param years: 投资年数:return: 年化收益率"""return (final / initial) ** (1 / years) - 1def compound_interest(principal, rate, times, years):"""计算复利:param principal: 本金:param rate: 利率(年利率):param times: 每年复利的次数:param years: 投资年数:return: 复利金额"""return principal * (1 + rate / times) ** (times * years)
这样,financial_tools.py
就是我们自定义的模块,里面包含了两个函数:annual_return
和compound_interest
。
3. 如何导入自定义模块
在其他Python文件中使用这些函数时,只需要导入自定义模块即可。
# 使用自定义模块
import financial_tools # 导入模块# 调用模块中的函数
initial_investment = 1000
final_value = 1500
years = 5annual_rate = financial_tools.annual_return(initial_investment, final_value, years)
print(f"年化收益率为:{annual_rate * 100:.2f}%")principal = 1000
rate = 0.05
times = 4 # 每年复利次数
compound_value = financial_tools.compound_interest(principal, rate, times, years)
print(f"复利金额为:{compound_value:.2f}")
输出结果:
年化收益率为:8.45%
复利金额为:1283.68
通过这种方式,我们将计算功能从主程序中提取出来,保存在一个模块中,这样以后只需要通过import
导入模块就可以使用,不需要重复编写相同的代码。
4. 模块的代码复用
代码复用是模块化编程的最大优势之一。通过创建自定义模块,我们可以在多个不同的Python项目中复用相同的代码。这样,不仅减少了编写重复代码的工作量,还提高了代码的可维护性。
比如,上述的financial_tools.py
模块就可以在多个财务管理项目中使用,而不需要在每个项目中重新编写年化收益率或复利的计算代码。只要模块存在,我们就可以随时导入使用。
此外,Python还支持将模块分成多个文件,形成包,从而使得代码复用更加高效。一个包就是一个包含多个模块的文件夹,包中可以有子模块和子包,层次结构清晰,便于管理。
5. 模块化编程的好处
- 提高代码复用性:通过将常用功能提取到模块中,不仅可以避免重复编写相同的代码,还能在不同的项目中直接复用这些模块。
- 增强代码可维护性:模块化编程使得每个模块的功能更加单一,修改和维护某个功能时,不会影响到其他部分的代码,减少了修改的风险。
- 提升代码可读性:将功能分解到多个模块中,使得每个模块都能清晰地表述其功能,有利于代码的理解与阅读。
- 简化协作开发:多个开发人员可以同时在不同模块上工作,提高开发效率。
小结
自定义模块是提高代码复用性、减少冗余代码的有效方式。通过将常用的功能代码封装成模块,我们可以在多个项目中复用这些功能,极大地提升了代码的可维护性和扩展性。在Python中,创建自定义模块非常简单,只需将相关功能写入.py
文件,并通过import
语句导入使用。
掌握了模块化编程的基本概念,我们能够更加高效地管理代码、组织项目结构,并提升开发效率。
相关文章:
终于弄懂了Python自定义模块与代码复用
自定义模块与代码复用 在编写Python代码时,很多时候我们会遇到需要多次使用相同功能的情况。这时候,模块化编程就显得尤为重要。通过将常用的功能代码放入单独的模块中,我们可以轻松地进行代码复用,避免重复编写相同的代码&#…...

从无音响Windows 端到 有音响macOS 端实时音频传输播放
以下是从 Windows 端到 macOS 端传输音频的优化方案,基于上述链接中的思路进行调整: Windows 端操作 安装必要软件 安装 Python(确保版本兼容且已正确配置环境变量)。安装 PyAudio 库,可通过 pip install pyaudio 命令…...

直方图均衡化及Matlab实现
文章目录 直方图均衡化关键点及思路Matlab实现 直方图均衡化 直方图均衡化是一种图像增强技术,主要用于增强图像的对比度,特别是当图像的有用数据的对比度接近时效果显著。通过改变图像的直方图分布,直方图均衡化能够使图像的灰度值更加接近…...

设备接入到NVR管理平台EasyNVR多品牌NVR管理工具/设备的音视频配置参考
NVR管理平台EasyNVR是一款功能强大的安防视频监控平台,能够轻松实现视频流的导入、录像、存储和回放等功能。在将设备接入到海康NVR管理平台EasyNVR时,视音频配置是确保视频监控效果的重要步骤。本文将详细介绍如何将设备接入到EasyNVR平台,并…...

后端:Aop 面向切面编程
文章目录 1. Aop 初步学习面向切面编程,EnableAspectJAutoProxy2. AOP的核心概念3. 前置通知(Before)4. 后置通知(After)5. 返回通知(AfterReturning)6. 异常通知(AfterThrowing&…...

大数据机器学习算法与计算机视觉应用02:线性规划
Linear Programming Definition of linear programmingmax and min-cost max flowlinear program to solve minimax optimal strategies in gamesAlgoithms for linear programmingl1 regressionSeidel’s 2-dimensional linear programming algorithm linear program 线性规…...

godot——主题、Theme、StyleBox
我刚开始被这些术语吓到了,一直不敢去接触它们,都用的默认样式。现在好不容易有点思路了,记录下来。 下面看看怎么自定义样式。 1.先新建一个Theme 2.再次点击创建好的Theme 得到 图1 这样一个面板。(看不懂没事,继…...

深入理解接口测试:实用指南与最佳实践5.0(一)
✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…...

SQL面试题——飞猪SQL面试 重点用户
飞猪SQL面试题—重点用户 在一些场景中我们经常听到这样的一些描述,例如20%的用户贡献了80%的销售额,或者是20%的人拥有着80%的财富,你知道这样的数据是怎么算出来的吗 数据如下,uid 是用户的id ,amount是用户的消费金额 |uid|amount| ---…...

Angular 和 Vue2.0 对比
前言 :“业精于勤,荒于嬉;行成于思,毁于随” 很久没写博客了,大多记录少进一步探查。 Angular 和 Vue2.0 对比: 一.概念 1.1 Angular 框架: 是一款由谷歌开发的开源web前端框架(核…...
websocket服务器(协程风格)--swoole进阶篇
swoole的websocket服务器(协程风格)示例真不算友善,从头了解到尾,那还好,但是谁有那么多时间从头到尾了解。示例不够针对性,写websocket就该单独写websocket的东西,偏偏又加上http的东西。这里我来解读一下websocket服务器(协程风格)示例 <?php use Swoole\Http\…...

Windows C/C++ Socket 编程
承接上文:socket 编程 本文目录 Windows Client 端WSADATA 结构体WSAStartup() 函数SOCKET 以及 socket() 函数sockaddr_ininet_pton() 函数in_addr structmemcpy()connect() 函数send() 函数recv() 函数 Windows Server 端 在进行 socket 编程之前,你要…...

计算两个结构的乘法
在行列可自由变换的平面上,2点结构有3个 3点结构有6个 计算2*2 2a1*2a14a6 2a1*2a24a8 2a1*2a34a12 显然2a1*2a14a6因为这3个结构都分布在同一列上,就是整数乘法。2a1*2a2的结果有2种写法,一种外形像2a1细节为2a2,一种外形为2…...

学校服务器连接pycharm配置2
上一个可能还是有点问题,因为实际在跑的时候读取的其实是本地的anaconda,这个重新整了一下流程 首先在学校服务器先激活自己创建的虚拟环境,这里就不截图了 然后在pycharm里面打开设置 选择这个python解释器 这里有添加解释器 选择SSH …...
AI赋能电商:创新应用提升销售与用户体验
目录 一、引言 二、AI技术在电商领域的创新应用 三、AI技术提高电商销售效率和用户体验的实践路径 一、引言 随着人工智能(AI)技术的不断成熟,电商行业正迎来一场深刻的变革。AI技术在购物推荐、会员分类、商品定价等方面的创新应用&…...
详解kafka消息发送重试机制的案例
在 Kafka 生产者中实现消息发送的重试机制,可以通过配置 KafkaProducer 的相关属性来实现。以下是一些关键的配置项: retries:设置生产者发送失败后重试的次数。 retry.backoff.ms:设置生产者在重试前等待的时间。 buffer.memo…...
linux文本管理!!!
文章目录 第1章 文本过滤/查看命令1.echo:输出文本2.cat:合并文件或查看文件内容3.head:显示文件头部信息4.tail:显示文件尾部信息5.wc: 统计文本行号6.less:分页显示文件内容7.grep:文本过滤工具8.定向符号…...
软件设计师-计算机体系结构分类
计算机体系结构分类 Flynn分类法 根据不同的指令流数据流组织方式分类单指令流但数据流SISD,单处理器系统单指令多数据流SIMD,单指令流多数据流是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一…...

《基于深度学习的车辆行驶三维环境双目感知方法研究》
复原论文思路: 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话,求d的话,只和xl-xr有关系,这样一来,是不是只要两张图像上一个测试点的像素位置确定,对应的深…...

jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
1、引入jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2、Jwt工具类,生成token以及解析token package com.niuniu.gateway.uti…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...