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

如何Pythonic地实现多次将函数作用于上一次调用的返回值

实现方案

你描述的「对初始值迭代应用同一个函数N次」的场景,正好是functools.reduce的典型适用场景,不属于语法滥用。

1. 直接用reduce实现

针对你举的PrimeChecker示例,写法如下:

from functools import reduce

res = reduce(lambda acc, _: PrimeChecker(acc), range(10), 1007)
print(res)

对应你原有的密码破解场景写法:

from functools import reduce

res = reduce(lambda acc, _: breakSingleChar(acc), range(32), "")

参数说明:

  • 第三个参数是迭代的初始值
  • 第二个参数是长度为N的可迭代对象,这里用range(N)仅用来控制迭代次数,元素本身不会用到所以用_占位
  • 第一个参数是每次迭代的执行逻辑,将上一次的返回值传入目标函数得到新结果

2. 封装通用工具函数

如果经常有类似需求,可以封装成通用函数复用,可读性更高:

from functools import reduce

def repeat_call(func, call_times, initial_value):
    return reduce(lambda acc, _: func(acc), range(call_times), initial_value)

# 调用示例
res1 = repeat_call(PrimeChecker, 10, 1007)
res2 = repeat_call(breakSingleChar, 32, "")

补充说明

  • 如果你优先追求代码可读性,原来的for循环写法已经非常合适,逻辑清晰无学习成本,完全符合Python编码规范。
  • 推导式不适用于该场景:推导式的核心作用是生成新的可迭代对象,你这个场景需要累积迭代状态,硬用推导式反而会大幅降低代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:02