You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅使用Python标准库实现函数组合?

用Python标准库实现无自定义lambda/函数的函数组合?

Python标准库体量庞大,我直觉里肯定有办法实现函数组合,但始终没找到合适的方式——这纯粹是出于好奇和学习目的。

我有两个简单函数:

def increment(x):
    return x + 1

def double(x):
    return x * 2

我想把它们组合成一个新函数double_and_increment。当然可以简单实现:

double_and_increment = lambda x: increment(double(x))

但也可以用一种更复杂但可能更“符合人体工程学且可扩展”的方式实现:

import functools

double_and_increment = functools.partial(functools.reduce, lambda acc, f: f(acc), [double, increment])

以上两种方式都能正常运行:

>>> double_and_increment(1)
3

现在的问题是:标准库中是否存在工具,可以完全不用自定义lambda、常规函数或类就能实现这种组合?

我最初想的是用operator.call替换functools.reduce调用里的lambda acc, f: f(acc),但遗憾的是它的参数顺序正好相反:

>>> (lambda acc, f: f(acc))(1, str)  # 我们想要替换的逻辑
'1'
>>> import operator
>>> operator.call(str, 1)  # 参数顺序错误
'1'

我觉得用functools.reduce还是实现组合的可行路径,但始终想不出怎么去掉那个自定义lambda。

下面是一些我尝试过的、接近目标但没成功的现成方法:

import functools, operator

# 柯里化形式,不知道如何反柯里化
functools.partial(operator.methodcaller, '__call__')(1)(str)

# 参数需要放在表达式中间,不可行
operator.call(*reversed(operator.attrgetter('args')(functools.partial(functools.partial, operator.call)(1, str))))

我查了所有相关问题,但它们都依赖自定义函数和/或lambda,和我的需求完全不符。

内容的提问来源于stack exchange,提问作者ruohola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:09