返回介绍

建议10:充分利用 Lazy evaluation 的特性

发布于 2024-01-30 22:19:09 字数 1097 浏览 0 评论 0 收藏 0

Lazy evaluation常被译为“延迟计算”或“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。充分利用Lazy evaluation的特性带来的好处主要体现在以下两个方面:

1)避免不必要的计算,带来性能上的提升。对于Python中的条件表达式if x and y,在x为false的情况下y表达式的值将不再计算。而对于if x or y,当x的值为true的时候将直接返回,不再计算y的值。因此编程中应该充分利用该特性。下面的例子用于判断一个单词是不是指定的缩写形式。

from time import time
t = time()
abbreviations = ['cf.', 'e.g.', 'ex.', 'etc.', 'fig.', 'i.e.', 'Mr.', 'vs.']
for i in xrange (1000000):
  for w in ('Mr.', 'Hat', 'is', 'chasing', 'the', 'black', 'cat', '.'):
    if w in abbreviations:
    #if w[-1] == '.' and w in abbreviations:
      pass
print "total run time:"
print time()-t

如果使用注释行代替第一个if,运行的时间大约会节省10%。因此在编程过程中,如果对于or条件表达式应该将值为真可能性较高的变量写在or的前面,而and则应该推后。

2)节省空间,使得无限循环的数据结构成为可能。Python中最典型的使用延迟计算的例子就是生成器表达式了,它仅在每次需要计算的时候才通过yield产生所需要的元素。斐波那契数列在Python中实现起来就显得相当简单,而while True也不会导致其他语言中所遇到的无限循环的问题。

def fib():
  a, b = 0, 1
  while True:
    yield a
    a, b = b, a+b
>>> from itertools import islice
>>> print list(islice(fib(), 5))
[0, 1, 1, 2, 3]

Lazy evaluation并不是一个很大、很新鲜的话题,但古人云“不积跬步无以至千里”,小小的改进便能写出更为优化的代码,何乐而不为呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文