探讨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
相关产品推荐
相关产品推荐

