【python】将自定义常用的一些函数封装成可以直接调用的模块方法

本文介绍了一种将常用函数封装为模块的方法,通过实例演示如何将数据合并功能封装成可直接调用的模块,简化重复代码,提高工作效率。并展示了在数据分析场景下的应用。
部署运行你感兴趣的模型镜像

将常用一些的函数封装成可以直接调用的模块方法

1. 背景

在实际的操作过程中,经常会用到一个功能,如果每次编写代码的时候都进行重新编写或者打开已经编写好的函数进行复制粘贴,这样就显得很麻烦,有没有什么方法可以像导入python模块的那样,直接把要用的函数以模块名+方法的形式调用呢?

答案当然是可以的,比如做数据分析时候经常要使用的功能是:实现某一路径下的所有xlsx的合并,文件如下
在这里插入图片描述
直接给出合并的函数,保留数据格式筛选的接口,将合并后的数据保存在fltered_data文件夹下的data_ok.xlsx文件中

def concat_excels(pattern):
	import pandas as pd
	import os
	import glob

	if not os.path.exists('filtered_data'):
	    os.mkdir('filtered_data')

	file_paths = glob.glob(pattern)
	    
	df = pd.DataFrame()
	for file_path in file_paths:
	    df_ = pd.read_excel(file_path)
	    df = pd.concat([df,df_])
	
	df.to_excel('filtered_data/data_ok.xlsx',index = False)
	print('Finished!')
	
if __name__ == '__main__':
	concat_excels('*.xlsx')

2. 具体步骤

第一步:首先找到当前编辑器(可能会存在多个python解析器)对应的第三方库的安装路径,如果不知道具体的位置,可以在使用的编辑器窗口输入如下代码,这里以requests库为例,查看一下第三方库的文件位置,红色标记的即是
在这里插入图片描述
第二步:将上面的函数所在py文件命名,可以以自己名字的简称进行命名,即方便导入也方便自己记住。然后将保存好的py文件移动到上面的红色标记下,如下图
在这里插入图片描述
第三步:在欲合并的文件夹下创建一个py文件(比如命名为:合并数据.py),如下
在这里插入图片描述
第四步:编辑代码,直接导入模块和方法完成文件数据的合并,代码运行截图如下,这样就是实现了多文件的合并,括号中保留了合并数据的筛选格式,方便进行之后不同格式的Excel文件的合并

from 模块名 import * 意思是导入该模块的所有的方法(可以直接调用函数)
在这里插入图片描述

3. 扩展

通过这种方式,就可以把我们在日常工作中经常使用的方法(要实现的功能)都放置在以自己命名的py文件中,使用的时候直接就可以调用非常简单,如果需要添加,就打开这个py文件,把代码复制粘贴进去就可以了。

比如在处理图像时候,可以直接把图片的读取过程中色彩的矫正和图片的显示封装成函数,在使用的时候一行代码就可以实现之前繁杂的程序
在这里插入图片描述
使用演示:
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 首先,用户的问题是:“我想查找将Python函数封装类的方法 请问Python中如何将函数封装类”。这涉及到如何将Python函数封装类。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独段。 - LaTeX语法正确。 - 使用中文回答。 - 生相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户提供的引用: - 引用[1]: 解释了Python类的封装,包括将函数和变量封装类的好处,并给出了一个例子(函数封装和类封装)。 - 引用[2]: 描述了Python函数封装的基本语法。 - 引用[3]: 给出了一个实际例子,将调用sqlmap的函数封装一个类或函数。 用户的问题是基于这些引用,询问如何将函数封装类。我需要参考这些引用,但也要基于我的知识构建回答。 回答结构: - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 - 最后生相关问题。 关键点:将函数封装类意味着创建一个类,其中包含方法(这些方法本质上是函数),以及可能的属性(变量)。类封装提供了更好的组织、封装数据和功能、支持继承等好处。 步骤: 1. 解释什么是类封装及其好处。 2. 展示如何将一个函数封装类的方法。 3. 提供代码示例。 4. 参考给定的引用。 5. 结束时生相关问题。 从引用中提取有用信息: - 引用[1]:给出了类和函数封装的例子。 ```python # 函数封装 def sum(a, b=3): return a + b # 类封装 class S(object): def __init__(self, a=2, b=3): self.a = a self.b = b ``` 但在这个例子中,类S只有初始化方法,没有其他函数。用户想要的是将函数封装类的方法,所以需要扩展。 - 引用[2]:基本函数语法。 - 引用[3]:一个封装函数的例子(call_sqlmap函数),但它是函数封装,不是类封装。用户说“使用了封装的结构”,但代码中是个函数。 用户问题:将函数封装类。所以,我需要提供一个类,其中将原有的函数作为方法。 一个典型例子:假设有一个函数,将其移动到类中作为方法。 例如: 原始函数: ```python def calculate_area(width, height): return width * height ``` 封装类: ```python class Rectangle: def __init__(self, width, height): self.width = width self.height = height def calculate_area(self): return self.width * self.height ``` 在这个类中,calculate_area 方法替代了原始的函数。 在回答中: - 解释好处:封装数据(width, height)和功能(calculate_area),易于重用、修改和维护。 - 参考引用:引用[1]提到封装的好处,如将变量作为参数、使用默认值等。 结构回答: 1. **简介**:解释为什么需要将函数封装类。 2. **基本方法**:描述如何创建类,添加方法。 3. **代码示例**:提供完整的例子。 4. **好处**:总结封装类的优势。 5. **引用**:自然添加引用标识。 6. **相关问题**:生相关问题。 生相关问题: - 类似示例中的格式:列出几个问题。 - 例如:1. 封装的类如何继承?2. 什么时候应该使用类而不是函数?3. 类封装模块封装的比较? 确保中文回答。 最后,添加引用标识:[^1], [^2], [^3] 在相关内容后。 </think> ### 如何将Python函数封装类 在Python中,将函数封装类是一种常见的编程实践,它通过创建类(class)来组织相关函数(作为类方法)和变量(作为类属性),实现代码的模块化、重用性和可维护性。封装的核心是将数据和操作数据的函数绑定在一起,形一个独立的单元。以下我将逐步解释如何实现这一过程,并提供清晰的代码示例。 #### 1. **为什么需要将函数封装类?** - **好处**: - **模块化**:将相关函数和数据集中管理,避免命名冲突[^1]。 - **状态管理**:类属性可以存储状态(如配置参数),方法可以直接访问这些状态,减少重复传参[^1]。 - **可扩展性**:支持继承和多态,便于未来扩展功能。 - **代码清晰**:逻辑更结构化,易于阅读和维护[^3]。 - **适用场景**: - 当多个函数共享公共变量时(如配置参数)。 - 需要维护函数调用间的状态(如计数器、缓存)。 - 项目规模扩大,需增强代码组织性[^1]。 #### 2. **基本步骤:将函数转换为类方法** 将函数封装类的核心是: - **创建类**:使用 `class` 关键字定义类。 - **初始化属性**:在 `__init__` 方法中定义类的属性(即变量)。 - **添加方法**:将原函数转换为类的方法(使用 `def` 定义,并以 `self` 作为第一个参数)。 - **实例化类**:创建类的实例,通过实例调用方法。 以下是一个完整示例,展示如何将普通函数封装类: ```python # 原始函数示例:计算矩形面积 def calculate_area(width, height): return width * height # 封装类 class Rectangle: def __init__(self, width, height): self.width = width # 将变量封装为类属性 self.height = height # 将原函数封装为类方法(添加 self 参数) def calculate_area(self): return self.width * self.height # 直接访问属性,无需传参 # 使用封装后的类 rect = Rectangle(10, 5) # 实例化类,传入初始属性值 area = rect.calculate_area() # 调用方法 print(area) # 输出: 50 ``` - **关键点**: - `__init__` 方法用于初始化属性(如 `width` 和 `height`),在实例化时自动调用。 - 方法(如 `calculate_area`)通过 `self` 访问属性,简化参数传递。 - 封装后,变量(属性)和方法绑定在一起,提升内聚性[^1]。 #### 3. **处理默认值和复杂逻辑** 如果原函数有默认参数或复杂逻辑,可以在类中灵活实现: ```python # 原始函数:带默认值的数学计算 def compute_sum(a, b=3): return a + b # 封装类(支持默认值) class Calculator: def __init__(self, a=2, b=3): # 属性设置默认值 self.a = a self.b = b def compute_sum(self): return self.a + self.b # 方法无需参数,直接使用属性值 # 可选:添加更多相关方法(如乘法) def compute_product(self): return self.a * self.b # 使用示例 calc = Calculator() # 使用默认属性值 sum_result = calc.compute_sum() # 输出: 5 (2+3) calc.a = 10 # 修改属性值 product_result = calc.compute_product() # 输出: 30 (10*3) ``` - **优势**:属性可在实例化后动态修改,方法调用更简洁[^1][^2]。 #### 4. **实际应用示例:封装SQL调用函数** 参考引用[3]中的函数 `call_sqlmap`,将其封装类,提升代码结构: ```python # 原函数(未封装) def call_sqlmap(comm): path = '/Users/frankslg/tools/sqlmap/' os.chdir(path) for sql in os.listdir(path): if sql == 'sqlmap.py': return os.system(f'sqlmap.py {comm}') # 简化逻辑 # 封装类 class SqlmapExecutor: def __init__(self, base_path='/Users/frankslg/tools/sqlmap/'): self.base_path = base_path # 封装路径变量 def execute_command(self, command): os.chdir(self.base_path) if 'sqlmap.py' in os.listdir(self.base_path): return os.system(f'sqlmap.py {command}') # 直接使用属性 else: raise FileNotFoundError("sqlmap.py not found") # 使用类 executor = SqlmapExecutor() # 实例化,可传入自定义路径 command = input('请输入SQL命令参数: ') result = executor.execute_command(command) # 调用方法 ``` - **改进点**: - 路径 `base_path` 封装为属性,便于统一管理。 - 方法 `execute_command` 简化调用逻辑,避免重复代码[^3]。 - 支持错误处理(如文件未找到),增强鲁棒性。 #### 5. **封装的好处总结** - **复用性**:一次封装,多次调用(如创建多个 `Calculator` 实例)。 - **隔离性**:类内部状态外部无法直接访问,提高安全性。 - **灵活性**:可通过继承创建子类,覆盖或扩展方法。 - **适用性**:特别适合Abaqus分析脚本等需重复调用的场景[^1]。 通过上述步骤,您可以有效地将任意Python函数封装类,提升代码质量。封装的核心在于将数据和操作绑定为一个整体,这在大型项目中尤为重要[^3]。
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值