python 库整理:toolz.curried (整理中)

1 toolz.curried.first

一个sequence的第一个元素

from toolz.curried import *
lst=[[1,2],[3,4]]
first(lst) #[1,2]

2 toolz.curried.second

一个sequence的第二个元素

from toolz.curried import *
lst=[[1,2],[3,4]]
second(lst)
#[3,4]

3 toolz.curried.pipe

 pipe(data, f, g, h) 相当于h(g(f(data)))

from toolz.curried import *
double = lambda i: 2 * i
pipe(3, double, str)
#'6'

### Python 中的柯里化函数 #### 柯里化的定义 在Python编程中,柯里化是指将一个多参数的函数转换成多个单参数函数的技术[^1]。这一过程使得原本接受多个参数的函数被拆解为一系列只接收单一参数的新函数。 #### 实现方式 通过自定义装饰器或利用第三方`toolz`、`funcy`等可以方便地实现柯里化操作。以下是基于纯Python代码的手动实现: ```python def curry(func): """手动创建一个简单的柯里化工厂""" def curried(*args, **kwargs): if len(args) + len(kwargs) >= func.__code__.co_argcount: return func(*args, **kwargs) else: def partial_func(*more_args, **more_kwargs): combined_args = args + more_args combined_kwargs = {**kwargs, **more_kwargs} return curried(*combined_args, **combined_kwargs) return partial_func return curried @curry def add(a, b, c): return a + b + c result = add(1)(2)(3) # 结果应为6 print(result) ``` 上述例子展示了如何构建一个基本版本的柯里化工具,并将其应用于三元加法运算上。当调用`add()`时传入第一个参数后返回一个新的部分应用函数;再次传递第二个参数直到所有必需的位置参数都被提供完毕才会真正执行原始目标函数并给出最终计算结果[^3]。 #### 使用场景举例 假设有一个需求是要频繁地对不同列表元素求和再乘以固定倍数,在不改变原有sum_and_multiply()接口的情况下可以通过柯里化来简化调用链路: ```python from functools import partial def sum_and_multiply(numbers, multiplier=1): total = sum(numbers) multiplied_result = total * multiplier return multiplied_result double_sum = curry(sum_and_multiply)(multiplier=2) triple_sum = curry(sum_and_multiply)(multiplier=3) list_of_numbers = [1, 2, 3] print(double_sum(list_of_numbers)) # 输出:12 ((1+2+3)*2 ) print(triple_sum(list_of_numbers)) # 输出:18 ((1+2+3)*3 ) ``` 这里先通过对原函数进行柯里化处理得到两个新的特定用途函数——分别用于双倍和三倍求和的操作。这样做的好处在于提高了代码复用性和表达力的同时还保持了一定程度上的灵活性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UQI-LIUWJ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值