【发布时间】:2012-03-21 10:45:41
【问题描述】:
如何在 Python 中实现惰性求值?几个简单的例子:
>>> def foo(x):
... print(x)
... return x
...
>>> random.choice((foo('spam'), foo('eggs')))
spam
eggs
'eggs'
在上面,我们实际上并不需要评估这个元组的所有项目来选择一个。在下面,除非字典中实际上缺少查找键,否则不需要计算默认的foo():
>>> d = {1: "one"}
>>> d.get(2, foo("default"))
default
'default'
>>> d.get(1, foo("default"))
default
'one'
我正在寻找一种 Pythonic 方式来重构上述示例以进行惰性评估。
【问题讨论】:
-
是的,您所描述的通常称为惰性评估。
-
这里显而易见的答案就是在做出选择后应用
foo()函数。此外,当您使用迭代器时,请记住在列表上使用生成器进行惰性求值。