Python惰性序列
Python的iterator就是一个惰性序列,要说明什么是惰性序列,首先我们得知道什么是惰性计算。
事实上,很多如Java在内的高级语言都支持惰性序列。
惰性计算
引自维基百科:
https://zh.wikipedia.org/wiki/%E6%83%B0%E6%80%A7%E6%B1%82%E5%80%BC
在编程语言理论中,惰性求值(英语:Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need),是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。它有两个相关而又有区别的含意,可以表示为“延迟求值”和“最小化求值”,本条目专注前者,后者请参见最小化计算条目。除可以得到性能的提升外,惰性计算的最重要的好处是它可以构造一个无限的数据类型。
延迟求值特别用于函数式编程语言中。在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值,也就是说,语句如x:=expression; (把一个表达式的结果赋值给一个变量)明显的调用这个表达式被计算并把结果放置到x中,但是先不管实际在x中的是什么,直到通过后面的表达式中到x的引用而有了对它的值的需求的时候,而后面表达式自身的求值也可以被延迟,最终为了生成让外界看到的某个符号而计算这个快速增长的依赖树。
延迟求值的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题。例如,可以建立生成无限斐波那契数列表的函数(经常叫做“流”)。第n个斐波那契数的计算仅是从这个无限列表上提取出这个元素,它只要求计算这个列表的前n个成员。
Python惰性序列
Python的惰性序列多数指iterator,其特点正如同上文所述,具有惰性计算特点的序列称为惰性序列。
博主的解读:Python的iterator是一个惰性序列,意思是表达式和变量绑定(比如:调用iter()得到了一个iterator并赋值给一个变量)后不会立即进行求值,而是当你用到其中某些元素的时候才去求某元素对的值(比如next()访问到某元素才去实际计算某元素的值)。
惰性是指,你不主动去遍历它,就不会计算其中元素的值。
有什么意义?
一是这样我们就可以实现的无限序列的表示,比如全部的自然数(无穷尽),而不需要真的在内存中计算出所有的自然数(那根本不可能,因为内存也不是无限的),而是需要哪个数,计算到哪个数,或者需要哪些数,计算到那些数(比如前1000个)。
二是在大规模数据处理中起到延迟计算的作用。当你处理大规模数据时,一次性进行处理往往是不方便的。而惰性序列就可以解决这个问题,它把计算的步骤延迟到了要实际使用该数据的时候。
惰性序列可以看作是一个”流”,需要的时候从其中取一滴水。
Python惰性序列相关推荐
- python 惰性序列_菜鸟学飞自学Python(五)高阶函数
(仅个人学习摘抄) 函数式编程 函数式编程就是一种抽象程度很高的编程范式,特点是允许把函数本身作为参数传入到另一个函数,还允许返回一个函数. 高阶函数 高阶函数--Higher-order funct ...
- python 惰性序列_讨论 - 廖雪峰的官方网站
@廖雪峰 首先你要理解埃氏筛法的原理,其实是很简单的. 然后用惰性序列实现埃氏筛法时,只能想象抽象过程,不能推导每一步计算机是怎么算的,就像神经网络模拟的人工智能算法,连设计者也无法理解计算机执行的步 ...
- 【python】【惰性序列】【iterator】
关于Python的惰性求值与惰性序列 一句话理解: 迭代器的一个优点就是它不要求你事先准备好整个迭代过程中所有的元素. 迭代器仅仅在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被 ...
- [译] Swift 中的惰性序列及其原理
原文地址:Lazy Sequences in Swift And How They Work 原文作者:Bruno Rocha 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/g ...
- python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四
本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...
- Python的序列切片
Python提供了一种把序列切成小块的操作,称为切片(slice)操作,其本质是访问由序列中的某些元素所构成的子集.Python的序列数据结构都支持切片操作,如列表.元组.字符串等,切片 ...
- 过滤序列,惰性序列_Java 8的惰性序列实现
过滤序列,惰性序列 我刚刚在GitHub上发布了LazySeq库-这是我最近进行的Java 8实验的结果. 我希望你会喜欢它. 即使您觉得它不是很有用,它仍然是Java 8(以及一般而言)中的函数式编 ...
- Java 8的惰性序列实现
我刚刚在GitHub上发布了LazySeq库,这是我最近进行的Java 8实验的结果. 我希望你会喜欢它. 即使您觉得它不是很有用,它仍然是Java 8(以及一般而言)中的函数式编程的重要课程. 而且 ...
- 【Python基础入门系列】第07天:Python 数据结构--序列
python内置序列类型最常见的是列表,元组和字符串.(序列是python中最基础的数据结构,而数据结构是计算机存储,组织数据的方式.) 另外还提供了字典和集合的数据结构,但他们属于无顺序的数据集合体 ...
最新文章
- Linux tree命令
- python编程基础之二十
- AT2376-[AGC014D]Black and White Tree【结论,博弈论】
- java学习(34):巩固练习
- JavaWeb笔记02-Tomcat
- php数组10000分割1000_PHP切割整数工具类似微信红包金额分配的思路详解
- 3.2. 添加模板版本(Core Data 应用程序实践指南)
- PHP 调用shell命令
- windows/browser ---- cmd命令/powershell命令/chrome插件vimuim命令
- 初探image-set及如何适配移动端高清屏图片
- 【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了
- 如何在文件夹中打开DOS命令窗口
- 国内半导体发展现状——部分上市公司分类名单
- 导图解文 从梦想到财富(05)世界第八大奇迹,知者赚不知者被赚
- 怎么快速修改图片的像素?
- python版植物大战僵尸源码_『原创』植物大战僵尸分析及Python辅助实现
- Ray Tracing
- 什么是Google Ads?
- Python 3 怎么快速搭建服务器
- springboot宴会预定平台毕业设计-附源码231718
热门文章
- ICP备案信息查询接口,根据单位名称、域名、备案号查询
- 从零开始破解WEP、WPA无线网络
- spidermonkey_Mozilla改进了SpiderMonkey JavaScript引擎中的RegExp支持
- 在 Windows 下查看开放端口
- 【安装教程】【FormatFactory(格式工厂)】(附带安装包下载)
- 【Android项目实战 | 从零开始写app(十二)】实现app首页智慧服务热门推荐热门主题、新闻
- 电机变频器测量现场,电机效率过百?
- 计算机的桌面窗户是什么情况,电脑桌面悬浮窗记事本软件怎么添加?适合桌面显示的便签软件...
- 电子组装流水线MES系统实行条码质量追溯
- 中学校园网计算机网络工程系统设计,中学校园网络系统设计方案.pdf