Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python惰性序列

Python惰性序列

作者头像
Steve Wang
发布于 2018-02-05 09:46:26
发布于 2018-02-05 09:46:26
1.9K0
举报
文章被收录于专栏:从流域到海域从流域到海域

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个)。 二是在大规模数据处理中起到延迟计算的作用。当你处理大规模数据时,一次性进行处理往往是不方便的。而惰性序列就可以解决这个问题,它把计算的步骤延迟到了要实际使用该数据的时候。 惰性序列可以看作是一个”流”,需要的时候从其中取一滴水。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python】从基础到进阶(九):探索Python中的迭代器与生成器
在Python编程中,迭代是处理数据集合的常见操作。迭代器和生成器是Python提供的强大工具,能够帮助开发者以更高效、更内存友好的方式遍历和生成大量数据。迭代器提供了一种顺序访问集合元素的方法,而生成器通过延迟计算的方式动态生成值,减少内存占用。
空白诗
2024/09/21
1670
【Python】从基础到进阶(九):探索Python中的迭代器与生成器
Python学习笔记(三)·高级特性
掌握了 Python 的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。
公爵
2022/09/28
6650
Python学习笔记(三)·高级特性
惰性求值和yield-Python
惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值。
百川AI
2021/10/19
8960
盘一盘 Python 系列特别篇 - All 和 Any
逻辑很简单,对于一个数 n,只有从 2 到 n 做个循环,来检查 n 是不是被每个数能整除,如果是,那么 n 不是质数;如果不是,n 是质数。简单明了,代码如下。
用户5753894
2020/04/24
5100
盘一盘 Python 系列特别篇 - All 和 Any
列表生成式,迭代器和生成器
现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],现在要求把列表里的每个值加1,你怎么实现?你可能会想到的几种方法:
py3study
2020/01/15
5890
Python基础语法-函数-生成器函数
Python中的生成器函数是一种特殊的函数,它可以在调用时产生一个迭代器对象,用于按需生成一系列值,而不是一次性生成所有值。生成器函数提供了一种简单而有效的方式来处理大型数据集或无限数据流,同时节省内存和计算资源。在本文中,我们将深入探讨Python中的生成器函数,包括如何定义和使用它们,以及一些实际用例。
玖叁叁
2023/04/17
5650
【Python环境】Python函数式编程指南(3):迭代器
3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。 迭代器不能回退,只能往前进行迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。 迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作。但如果小心谨慎,或者干脆贯彻函数式思想坚持使用不可变的集合,那这也不是什么大问题。 对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引
陆勤_数据人网
2018/02/26
8190
Python学习(四)---- 列表生成式、生成器、迭代器和内置函数
https://blog.csdn.net/fgf00/article/details/52061971
智能算法
2018/08/17
1.3K0
Python3 高级特性
掌握了 Python 的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。但是我们还需要掌握Python的一些高级特性,精简代码。一行代码能实现的功能,绝不写5行代码。Python的高级特性:切片,迭代,列表生成式,生成器,迭代器。
嵌入式视觉
2022/09/05
5070
Python3 高级特性
基于 Generator 和 Iterator 的惰性列表
上面的几个表达式产生的都是无限列表。对于习惯了主流编程语音的朋友可能感到困惑,在有限的内存里面如何能表达无限的概念。主要的原因就是 Haskell 是一门默认采用惰性求值策略的语言,没有用到的部分,在内存里面只是一个表达式,并不会真正的去做计算。
有赞coder
2020/08/25
6810
扣丁学堂Python培训详解Pytho
Python生成器与迭代器对于喜欢Python开发的小伙伴们来说应该是不陌生的,不了解的小伙伴也没有关系,本篇文章扣丁学堂Python培训小编就给小伙伴们详解一下Python生成器与迭代器,感兴趣的小伙伴就随小编来了解一下吧。
py3study
2020/01/03
5770
【Kotlin】函数式编程 ③ ( 早集合与惰性集合 | 惰性集合-序列 | generateSequence 序列创建函数 | 序列代码示例 | take 扩展函数分析 )
在 序列 中 , 不记录元素个数 , 也 不对其内容进行排序 , 在该 <font color=bluegreen序列中 元素可能有无限多个 ;
韩曙亮
2023/03/30
4570
【Kotlin】函数式编程 ③ ( 早集合与惰性集合 | 惰性集合-序列 | generateSequence 序列创建函数 | 序列代码示例 | take 扩展函数分析 )
4 Python 基础: 讲解迭代、过滤、匿名函数、排序算法四大知识点
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
野原测试开发
2019/07/24
5780
4 Python 基础: 讲解迭代、过滤、匿名函数、排序算法四大知识点
4 Python 基础: 讲解迭代、过滤、匿名函数、排序算法四大知识点
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
野原测试开发
2019/09/10
7370
4 Python 基础: 讲解迭代、过滤、匿名函数、排序算法四大知识点
【Python基础编程】迭代器、生成器、装饰器与闭包全攻略
上篇文章将了python多态,类属性等知识,这篇文章了解一下python的三器一包:迭代器、生成器、装饰器和闭包
易辰君
2024/11/07
3630
✨从延迟处理讲起,JavaScript 也能惰性编程?
我们从闭包起源开始、再到百变柯里化等一票高阶函数,再讲到纯函数、纯函数的组合以及简化演算;
掘金安东尼
2022/10/28
6820
✨从延迟处理讲起,JavaScript 也能惰性编程?
你觉得“惰性求值”在 JS 中会怎么实现?
接上一篇《听君一席话,如听一席话,解释解释“惰性求值”~》,有掘友问:“我懂惰性求值的意思了,但是在 JS 中如何实现 thunk 的呢?”
掘金安东尼
2022/09/19
1.5K0
你觉得“惰性求值”在 JS 中会怎么实现?
【Python编程导论】第四章- 函数、作用域与抽象
(3) 函数名后面括号中的一系列名称是函数的形式参数。使用函数时,形式参数在函数调用时被绑定(和赋值语句一样)到实际参数(通常指代函数调用时的参数)。
Datawhale
2019/07/08
8800
如何用 JavaScript 实现一个数组惰性求值库
看到函数式语言里面的惰性求值,想自己用 JavaScript 写一个最简实现,加深对惰性求值了解。用了两种方法,都不到 80 行实现了基本的数组的惰性求值。
哲洛不闹
2018/09/14
8010
如何用 JavaScript 实现一个数组惰性求值库
Python中的yield关键字是什么?
在Python中,yield是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。
闻说社
2024/07/08
1940
Python中的yield关键字是什么?
推荐阅读
相关推荐
【Python】从基础到进阶(九):探索Python中的迭代器与生成器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档