列表推导式中的缓存变量



假设我有一个昂贵的操作expensive(x: int) -> int和以下列表理解:

# expensive(x: int) -> int
# check(x: int) -> bool
[expensive(i) for i in range(LARGE_NUMBER) if check(expensive(i))]

如果我想避免为每个i运行两次expensive(i),有什么方法可以通过列表理解来保存它的值?

使用海象:

[cache for i in range(LARGE_NUMBER) if check(cache := expensive(i))]

你可以模拟一个嵌套的推导:

[val for i in range(LARGE_NUMBER) for val in [expensive(i)] if check(val)]

最新更新