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

探讨Python中用可变默认参数实现缓存的合理性

用可变默认参数实现Collatz序列缓存:巧思还是隐患?

在解决Project Euler第14题时,我发现了Python中使用可变对象作为函数默认参数的一个有趣场景。通常这种做法因易产生意外副作用而不被推荐,《Fluent Python》中也对此有详细讨论,但我认为当前场景下该方式具备合理性。

我正在计算一个可通过缓存大幅提升效率的数学序列,该序列规则明确,适合在所有计算中共享同一缓存。相关代码如下:

LIMIT = int(1e6)

def collatz(n, cache={}):  # Cache acts as a static variable here.
    if n == 1:
        return 1
    if n not in cache:
        cache[n] = 1 + (collatz(3 * n + 1) if n % 2 else collatz(n // 2))
    return cache[n]

max_pair = max(((collatz(x), x) for x in range(LIMIT // 2, LIMIT)))
print(max_pair[1])

想请教各位,这种用可变默认参数实现缓存的方式是对Python特性的巧妙运用,还是因潜在弊端应避免?您是否遇到过类似场景,又是如何处理缓存的?期待您的见解与反馈。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:32:31