python组合函数不允许你还不会的 10 个高效技巧
itomcoil 2025-05-25 13:19 45 浏览
以下是 Python 中 组合函数的 10 个高效技巧,涵盖函数串联、柯里化、装饰器链式调用等场景,助你构建灵活的数据处理流水线:
一、基础组合技巧
1.函数管道(Pipeline)
def add(x):
return x + 2
def square(x):
return x ** 2
# 组合函数:先加后平方
pipeline = lambda x: square(add(x))
print(pipeline(3)) # (3+2)^2 = 25
2.通用组合函数
from functools import reduce
def compose(*funcs):
return reduce(lambda f, g: lambda x: f(g(x)), funcs)
# 从右向左执行:subtract -> double -> add5
func = compose(lambda x: x-3, lambda x: x*2, lambda x: x+5)
print(func(4)) # ((4+5)*2) -3 = 19
二、柯里化(Currying)组合
3.参数分步传递
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
cube = partial(power, exponent=3)
print(square(5)) # 25
print(cube(3)) # 27
4.柯里化装饰器
def curry(func):
def curried(*args, **kwargs):
if len(args) + len(kwargs) >= func.__code__.co_argcount:
return func(*args, **kwargs)
return lambda *a, **kw: curried(*args + a, **{**kwargs, **kw})
return curried
@curry
def add(a, b, c):
return a + b + c
add_5 = add(5)
add_5_6 = add_5(6)
print(add_5_6(7)) # 18
三、装饰器组合
5.多层装饰器链
def bold(func):
def wrapper():
return "<b>" + func() + "</b>"
return wrapper
def italic(func):
def wrapper():
return "<i>" + func() + "</i>"
return wrapper
@bold
@italic
def hello():
return "Hello"
print(hello()) # <b><i>Hello</i></b>
6.带参数的装饰器组合
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
return [func(*args, **kwargs) for _ in range(n)]
return wrapper
return decorator
@repeat(3)
@bold
def greet():
return "Hi"
print(greet()) # ['<b>Hi</b>', '<b>Hi</b>', '<b>Hi</b>']
四、高阶函数组合
7.Map-Filter 链式处理
numbers = [1, 2, 3, 4, 5]
result = list(
map(lambda x: x * 2,
filter(lambda x: x % 2 == 0, numbers))
)
print(result) # [4, 8]
8.使用functools.reduce组合
from functools import reduce
# 将多个函数依次应用
functions = [lambda x: x+1, lambda x: x*2, lambda x: x**3]
composed = reduce(lambda f, g: lambda x: f(g(x)), functions)
print(composed(2)) # ((2^3)*2)+1 = 17
五、面向对象组合
9.类方法链式调用
class DataProcessor:
def __init__(self, data):
self.data = data
def filter(self, func):
self.data = list(filter(func, self.data))
return self
def map(self, func):
self.data = list(map(func, self.data))
return self
processor = DataProcessor([1, 2, 3, 4])
result = processor.filter(lambda x: x%2==0).map(lambda x: x*2).data
print(result) # [4, 8]
六、实用工具库
10.使用toolz库
from toolz import compose, pipe
# compose: 从右向左执行
calc = compose(lambda x: x-5, lambda x: x*3, lambda x: x+2)
print(calc(4)) # (4+2)*3-5=13
# pipe: 从左向右执行
result = pipe(4, lambda x: x+2, lambda x: x*3, lambda x: x-5)
print(result) # 同上
组合函数最佳实践
- 保持函数纯净:避免副作用,确保组合安全
- 合理命名中间函数:增强可读性
- 控制组合深度:超过5层的组合建议拆分
- 性能监控:复杂组合需用 timeit 测试
典型应用场景
- 数据清洗流水线:
clean_data = compose(
remove_outliers,
fill_missing_values,
normalize
)(raw_data)
API请求处理:
process_response = compose(
parse_json,
validate_schema,
log_result
)
图像处理链:
transform_image = compose(
resize(800, 600),
apply_filter("grayscale"),
add_watermark
)
掌握这些组合技巧后,你的代码将更模块化、可维护性更强,轻松应对复杂的数据处理需求!
相关推荐
- 最强聚类模型,层次聚类 !!_层次聚类的优缺点
-
哈喽,我是小白~咱们今天聊聊层次聚类,这种聚类方法在后面的使用,也是非常频繁的~首先,聚类很好理解,聚类(Clustering)就是把一堆“东西”自动分组。这些“东西”可以是人、...
- python决策树用于分类和回归问题实际应用案例
-
决策树(DecisionTrees)通过树状结构进行决策,在每个节点上根据特征进行分支。用于分类和回归问题。实际应用案例:预测一个顾客是否会流失。决策树是一种基于树状结构的机器学习算法,用于解决分类...
- Python教程(四十五):推荐系统-个性化推荐算法
-
今日目标o理解推荐系统的基本概念和类型o掌握协同过滤算法(用户和物品)o学会基于内容的推荐方法o了解矩阵分解和深度学习推荐o掌握推荐系统评估和优化技术推荐系统概述推荐系统是信息过滤系统,用于...
- 简单学Python——NumPy库7——排序和去重
-
NumPy数组排序主要用sort方法,sort方法只能将数值按升充排列(可以用[::-1]的切片方式实现降序排序),并且不改变原数组。例如:importnumpyasnpa=np.array(...
- PyTorch实战:TorchVision目标检测模型微调完
-
PyTorch实战:TorchVision目标检测模型微调完整教程一、什么是微调(Finetuning)?微调(Finetuning)是指在已经预训练好的模型基础上,使用自己的数据对模型进行进一步训练...
- C4.5算法解释_简述c4.5算法的基本思想
-
C4.5算法是ID3算法的改进版,它在特征选择上采用了信息增益比来解决ID3算法对取值较多的特征有偏好的问题。C4.5算法也是一种用于决策树构建的算法,它同样基于信息熵的概念。C4.5算法的步骤如下:...
- Python中的数据聚类及可视化分析实践
-
探索如何通过聚类分析揭露糖尿病预测数据集的特征!我们将运用Python的强力工具,深入挖掘数据,以直观的可视化揭示不同特征间的关系。一同探索聚类分析在糖尿病预测中的实践!所有这些可视化都可以通过数据操...
- 用Python来统计大乐透号码的概率分布
-
用Python来统计大乐透号码的概率分布,可以按照以下步骤进行:导入所需的库:使用Python中的numpy库生成数字序列,使用matplotlib库生成概率分布图。读取大乐透历史数据:从网络上找到大...
- python:支持向量机监督学习算法用于二分类和多分类问题示例
-
监督学习-支持向量机(SVM)支持向量机(SupportVectorMachine,简称SVM)是一种常用的监督学习算法,用于解决分类和回归问题。SVM的目标是找到一个最优的超平面,将不同类别的...
- 25个例子学会Pandas Groupby 操作
-
groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以...
- 数据挖掘流程_数据挖掘流程主要有哪些步骤
-
数据挖掘流程1.了解需求,确认目标说一下几点思考方法:做什么?目的是什么?目标是什么?为什么要做?有什么价值和意义?如何去做?完整解决方案是什么?2.获取数据pandas读取数据pd.read.c...
- 使用Python寻找图像最常见的颜色_python 以图找图
-
如果我们知道图像或对象最常见的是哪种颜色,那么可以解决图像处理中的几个用例,例如在农业领域,我们可能需要确定水果的成熟度。我们可以简单地检查一下水果的颜色是否在预定的范围内,看看它是成熟的,腐烂的,还...
- 财务预算分析全网最佳实践:从每月分析到每天分析
-
原文链接如下:「链接」掌握本文的方法,你就掌握了企业预算精细化分析的能力,全网首发。数据模拟稍微有点问题,不要在意数据细节,先看下最终效果。在编制财务预算或业务预算的过程中,通常预算的所有数据都是按月...
- 常用数据工具去重方法_数据去重公式
-
在数据处理中,去除重复数据是确保数据质量和分析准确性的关键步骤。特别是在处理多列数据时,保留唯一值组合能够有效清理数据集,避免冗余信息对分析结果的干扰。不同的工具和编程语言提供了多种方法来实现多列去重...
- Python教程(四十):PyTorch深度学习-动态计算图
-
今日目标o理解PyTorch的基本概念和动态计算图o掌握PyTorch张量操作和自动求导o学会构建神经网络模型o了解PyTorch的高级特性o掌握模型训练和部署PyTorch概述PyTorc...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)