【发布时间】:2020-05-22 00:14:36
【问题描述】:
假设我有一个昂贵的操作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),有没有办法通过列表理解来保存它的价值?
【问题讨论】:
-
如果函数是纯函数,你可以用
functools.lru_cache包裹它。 -
或
[e for e in map(expensive, range(LARGE_NUMBER)) if check(e)]。 -
当然可以使用循环。
标签: python performance list-comprehension dictionary-comprehension set-comprehension