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惰性序列相关推荐

  1. python 惰性序列_菜鸟学飞自学Python(五)高阶函数

    (仅个人学习摘抄) 函数式编程 函数式编程就是一种抽象程度很高的编程范式,特点是允许把函数本身作为参数传入到另一个函数,还允许返回一个函数. 高阶函数 高阶函数--Higher-order funct ...

  2. python 惰性序列_讨论 - 廖雪峰的官方网站

    @廖雪峰 首先你要理解埃氏筛法的原理,其实是很简单的. 然后用惰性序列实现埃氏筛法时,只能想象抽象过程,不能推导每一步计算机是怎么算的,就像神经网络模拟的人工智能算法,连设计者也无法理解计算机执行的步 ...

  3. 【python】【惰性序列】【iterator】

    关于Python的惰性求值与惰性序列 一句话理解: 迭代器的一个优点就是它不要求你事先准备好整个迭代过程中所有的元素. 迭代器仅仅在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被 ...

  4. [译] Swift 中的惰性序列及其原理

    原文地址:Lazy Sequences in Swift And How They Work 原文作者:Bruno Rocha 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/g ...

  5. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  6. Python的序列切片

           Python提供了一种把序列切成小块的操作,称为切片(slice)操作,其本质是访问由序列中的某些元素所构成的子集.Python的序列数据结构都支持切片操作,如列表.元组.字符串等,切片 ...

  7. 过滤序列,惰性序列_Java 8的惰性序列实现

    过滤序列,惰性序列 我刚刚在GitHub上发布了LazySeq库-这是我最近进行的Java 8实验的结果. 我希望你会喜欢它. 即使您觉得它不是很有用,它仍然是Java 8(以及一般而言)中的函数式编 ...

  8. Java 8的惰性序列实现

    我刚刚在GitHub上发布了LazySeq库,这是我最近进行的Java 8实验的结果. 我希望你会喜欢它. 即使您觉得它不是很有用,它仍然是Java 8(以及一般而言)中的函数式编程的重要课程. 而且 ...

  9. 【Python基础入门系列】第07天:Python 数据结构--序列

    python内置序列类型最常见的是列表,元组和字符串.(序列是python中最基础的数据结构,而数据结构是计算机存储,组织数据的方式.) 另外还提供了字典和集合的数据结构,但他们属于无顺序的数据集合体 ...

最新文章

  1. DrawerLayoutDemo【侧边栏(侧滑菜单)简单实现】
  2. linux 自动配置 mysql数据库,Linux下配置mysql数据库主从自动备份
  3. arm 饱和指令_ARM aarch64汇编学习笔记(九):使用Neon指令(一)
  4. 函数内联inline
  5. HTML 5 Canvas 绘制图形图像
  6. python : sha256 、ripemd160
  7. 基于RV1126平台imx291分析 --- media部件连接 一
  8. 如何提升软件开发效能?企业级业务架构思考与实践
  9. 华为主题包hwt下载_emui主题打包下载-emui主题打包 v1.0_手机乐园
  10. 虚幻引擎(UE4) UMG实例
  11. 我写了一本操作系统词典送你了
  12. PCB板上的字母代表哪些元器件?一文看全!
  13. 隐函数存在定理3的证明Jacobi_20160503
  14. 如何在职场人际冲突中“立于不败之地”?
  15. 走Java道路怎么样,如何学习
  16. Widows(win10等等)使用过程中的 问题 与 小技巧 ----- 长期积累
  17. 4. Linux - 输入子系统框架详解
  18. maven项目设置多个源文件夹
  19. 网站建设中如何做好一个网站
  20. Nmap.sqlmap.暴力破解

热门文章

  1. ENSP实验十一——动态NAT(easy-ip)的基本配置
  2. 从客户端中检测到有潜在危险的 request.form值[解决方法]
  3. show tables like 不能取别名的解决方法
  4. python 爬取城市空气质量数据
  5. InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...
  6. 安卓开发如何避免被裁以及快速找到工作?(强力推荐,fluttertextfield光标
  7. 一款堪称完美的编程字体Source Code Pro
  8. 期末课程设计----【图书管理系统】
  9. 计算机毕业设计时间修改代码程序软件安装运行问题题目汇总送开题送文档先代码
  10. Qt按ESC关闭模态对话框不触发closeEvent()问题解析(转)