Lazy evaluation
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相关推荐
- 怎么确定迭代器后面还有至少两个值_JS Lazy evaluation:可迭代对象与迭代器
本文已经过原作者 MelkorNemesis 授权翻译. Lazy evaluation Lazy evaluation常被译为"延迟计算"或"惰性计算",指的 ...
- Lazy Evaluation(延迟执行)
All Flink programs are executed lazily: When the program's main method is executed, the data loading ...
- Lodash chain功能(Lazy Evaluation)介绍
原文:http://filimanjaro.com/blog/2... 我曾经一直认为像Lodash这样的库是不可能正的比它们已有的速度更快的.Lodash几乎完美结合了各种各样的技术来榨干了Java ...
- More Effective C++之 Item M17:考虑使用lazy evaluation(懒惰计算法)
从效率的观点来看,最佳的计算就是根本不计算,那好,不过如果你根本就不用进行计算的话,为什么还在程序开始处加入代码进行计算呢?并且如果你不需要进行计算,那么如何必须执行这些代码呢? 关键是要懒惰. 还记 ...
- Python 延迟初始化(lazy property)
Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果. 延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求. pr ...
- lazy ideas in programming(编程中的惰性思想)
lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...
- python中关系运算符惰性求值,lazy.js 惰性求值实现分析
背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...
- Django Lazy LazyObject
LazyObject 源码地址:django/utils/functional.py import copy import operatorempty = object()def new_method ...
- Levenshtein distance 编辑距离算法
这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算 ...
- 在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 ...
最新文章
- Miniconda3+Tensorflow2.3(GPU版)+Win10_x64+GTX1060深度学习环境搭建
- 分析USB平台设备模型框架(1)
- java rest 知乎_java 自动化 三分钟带你理解 RESTful
- javascript之回调函数小知识
- php过滤提交数据 防止sql注入***(8)
- Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
- matlab中rowset什么意思,没什么用的matlab代码1
- Android之解决Android10.0通过热点名字和密码连接指定热点网络不能通信问题(2种解决办法)
- python 获取浏览器句柄下的网页控件,Python获取浏览器窗口句柄过程解析
- 吴恩达深度学习5.2练习_Sequence Models_Operations on word vectors
- java案例代码21-电影院购票系统[重要]
- Oracle性能优化求生指南 Oracle数据库专家Guy Harrison权威著作
- 谷歌浏览器怎么把阅读清单按钮放到书签栏?
- html页面添加大于号,2.7 在 HTML5 页面中插入半角的大于号“ ” , 使用的标记符应该是( )...
- 7-5 修理牧场 (25 分)
- python输出emoji表情符号 学习笔记
- python元组和列表逆序_Python容器:列表与元组
- SiC碳化硅二极管抗浪涌电流能力缺点及应对方式
- 李克用置酒三垂冈赋——刘翰(清)
- git安装、使用、建立github远程仓库、克隆远程仓库
热门文章
- 企业邮箱大全,企业邮箱查询,最大的邮箱是哪个?
- word文档中表格顶头怎么调整_word使用技巧之-Word文字处理技巧,学会不求人!...
- 不忘初心Windows11精简版
- 你不知道的接近开关与PLC连接时如何判断用PNP还是NPN
- Real-Time Rendering——9.9.4 Rough-Surface Subsurface Models粗糙表面地下模型
- 【LeetCode】1101. The Earliest Moment When Everyone Become Friends 解题报告 (C++)
- “Entity Data Modle Designer 无法显示”的问题
- 28岁程序员郭宇财务自由退休,都说他运气爆棚,但我看未必...
- 【高等数学】曲率和曲率半径
- (MDY)2021秋季软件工程 alpha冲刺完善