Lazy evaluation常被译为“延迟计算”或“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。

充分利用Lazy evaluation的特性带来的好处主要体现在以下两个方面:

  • 避免不必要的计算,带来性能上的提升。
```python
abbreviations = ['Ali', 'JD', 'alpha', 'byte', 'theta']company = []
for nu in abbreviations:if nu[0].isupper() and len(nu) <= 3:company.append(nu)print(company)
```

对于or条件表达式应该将值为真可能性较高的变量写在or的前面,而and则应该推后。

  • 节省空间,使得无限循环的数据结构成为可能。

Python中最典型的使用延迟计算的例子就是生成器表达式了,它仅在每次需要计算的时候才通过yield产生所需要的元素。

```python
def fib():a, b = 0, 1while True:yield aa, b = b, a+bfrom itertools import islice
print(list(islice(fib(), 7)))   # [0, 1, 1, 2, 3, 5, 8]
```

短路逻辑

布尔运算符有个有趣的特征:只要必要的计算。例如,仅当x和y都为真时,表达式x and y才为真。因此如果x为假,这个表达式将立即返回假,而不关心y。实际上,如果x为假,这个表达式将返回x,否则返回y。这种行为称为短路逻辑。

运算符 逻辑表达式 描述
and x and y 值只可能是x或y。当x为False时是x,否则是y。
or x or y 值只可能是x或y。当x为True时是x,否则是y。
# 运算符and
fv = 'a' > 'b'
tv = 'a' < 'b'
vu = 'c'print(fv and vu, tv and vu) # False cprint(fv or vu, tv or vu)   # c True

(最近更新:2019年04月11日)

Lazy evaluation相关推荐

  1. 怎么确定迭代器后面还有至少两个值_JS Lazy evaluation:可迭代对象与迭代器

    本文已经过原作者 MelkorNemesis 授权翻译. Lazy evaluation Lazy evaluation常被译为"延迟计算"或"惰性计算",指的 ...

  2. Lazy Evaluation(延迟执行)

    All Flink programs are executed lazily: When the program's main method is executed, the data loading ...

  3. Lodash chain功能(Lazy Evaluation)介绍

    原文:http://filimanjaro.com/blog/2... 我曾经一直认为像Lodash这样的库是不可能正的比它们已有的速度更快的.Lodash几乎完美结合了各种各样的技术来榨干了Java ...

  4. More Effective C++之 Item M17:考虑使用lazy evaluation(懒惰计算法)

    从效率的观点来看,最佳的计算就是根本不计算,那好,不过如果你根本就不用进行计算的话,为什么还在程序开始处加入代码进行计算呢?并且如果你不需要进行计算,那么如何必须执行这些代码呢? 关键是要懒惰. 还记 ...

  5. Python 延迟初始化(lazy property)

    Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果. 延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求. pr ...

  6. lazy ideas in programming(编程中的惰性思想)

    lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...

  7. python中关系运算符惰性求值,lazy.js 惰性求值实现分析

    背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...

  8. Django Lazy LazyObject

    LazyObject 源码地址:django/utils/functional.py import copy import operatorempty = object()def new_method ...

  9. Levenshtein distance 编辑距离算法

    这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算 ...

  10. 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_map_module实录

    介绍 默认情况下,nginx会加载标准模块ngx_http_map_module(或称ngx_map),除非人为的在configure时添加--without-http_map_module选项. n ...

最新文章

  1. Miniconda3+Tensorflow2.3(GPU版)+Win10_x64+GTX1060深度学习环境搭建
  2. 分析USB平台设备模型框架(1)
  3. java rest 知乎_java 自动化 三分钟带你理解 RESTful
  4. javascript之回调函数小知识
  5. php过滤提交数据 防止sql注入***(8)
  6. Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
  7. matlab中rowset什么意思,没什么用的matlab代码1
  8. Android之解决Android10.0通过热点名字和密码连接指定热点网络不能通信问题(2种解决办法)
  9. python 获取浏览器句柄下的网页控件,Python获取浏览器窗口句柄过程解析
  10. 吴恩达深度学习5.2练习_Sequence Models_Operations on word vectors
  11. java案例代码21-电影院购票系统[重要]
  12. Oracle性能优化求生指南 Oracle数据库专家Guy Harrison权威著作
  13. 谷歌浏览器怎么把阅读清单按钮放到书签栏?
  14. html页面添加大于号,2.7 在 HTML5 页面中插入半角的大于号“ ” , 使用的标记符应该是( )...
  15. 7-5 修理牧场 (25 分)
  16. python输出emoji表情符号 学习笔记
  17. python元组和列表逆序_Python容器:列表与元组
  18. SiC碳化硅二极管抗浪涌电流能力缺点及应对方式
  19. 李克用置酒三垂冈赋——刘翰(清)
  20. git安装、使用、建立github远程仓库、克隆远程仓库

热门文章

  1. 企业邮箱大全,企业邮箱查询,最大的邮箱是哪个?
  2. word文档中表格顶头怎么调整_word使用技巧之-Word文字处理技巧,学会不求人!...
  3. 不忘初心Windows11精简版
  4. 你不知道的接近开关与PLC连接时如何判断用PNP还是NPN
  5. Real-Time Rendering——9.9.4 Rough-Surface Subsurface Models粗糙表面地下模型
  6. 【LeetCode】1101. The Earliest Moment When Everyone Become Friends 解题报告 (C++)
  7. “Entity Data Modle Designer 无法显示”的问题
  8. 28岁程序员郭宇财务自由退休,都说他运气爆棚,但我看未必...
  9. 【高等数学】曲率和曲率半径
  10. (MDY)2021秋季软件工程 alpha冲刺完善