避免或延迟对不可用物品的评估

发布于 2021-01-29 16:35:48

如何在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'

我正在寻找一种Python的方式来重构上述示例,从而懒惰地求值。

关注者
0
被浏览
37
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在Python中进行延迟评估的标准方法是使用生成器

    def foo(x):
        print x
        yield x
    
    random.choice((foo('spam'), foo('eggs'))).next()
    

    顺便说一句。Python还允许生成器表达式,因此下面的行不会预先计算任何内容:

    g = (10**x for x in xrange(100000000))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看