python惰性求值有哪些函数Copyright ? 1999-2020, CSDN.NET, All Rights Reserved
惰性计算python惰性函数的序列
打开APP
Python 的惰性求值与惰性序列 翻译
2018-07-23 14:57:48
2点赞
东师小镇
码龄5年
关注
惰性求值
在编程语言理论中python惰性函数 , 惰性求值(英语:Lazy Evaluation)python惰性函数 , 又译为惰性计算、懒惰求值python惰性函数,也称为传需求调用(call-by-need),是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作 。它有两个相关而又有区别的含意,可以表示为“延迟求值”和“最小化求值” 。
避免不必要的计算,带来性能的提升(最小化求值) 。
对于Python中的条件表达式 if x and y,在x为false的情况下y表达式的值将不再计算 。而对于if x or y,当x的值为true的时候将直接返回,不再计算y的值 。因此编程中可以利用该特性,在 and逻辑中,将小概率发生的条件放在前面或者在or逻辑中,将大概率发生的时间放在前面,有助于性能的提升 。
2. 节省空间,使得无线循环的数据结构成为可能(延迟求值) 。
延迟求值特别用于函数式编程语言中 。在使用延迟求值的时候 , 表达式不在它被绑定到变量之后就立即求值 , 而是在该值被取用的时候求值 。延迟求值的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题 。例如 , 可以建立生成无限斐波那契数列表的函数(经常叫做“流”) 。第n个斐波那契数的计算仅是从这个无限列表上提取出这个元素,它只要求计算这个列表的前n个成员 。
惰性序列
Python的惰性序列多数指 iterator,其特点正如同上文所述,具有惰性计算特点的序列称为惰性序列 。
Python的iterator是一个惰性序列,意思是表达式和变量绑定后不会立即进行求值,而是当你用到其中某些元素的时候才去求某元素对的值 。惰性是指,你不主动去遍历它,就不会计算其中元素的值 。
一句话理解:
迭代器的一个优点就是它不要求你事先准备好整个迭代过程中所有的元素 。
迭代器仅仅在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁 。
这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件,或是斐波那契数列等等 。
python中map函数map在python2返回list,在python3返回iterator.
如果想在python3得到可以反复重用的list , 只要把iterator转成list即可:
lst_result = list(map(func, items))
Python学习之惰性求值惰性求值,也就是延迟求值,表达式不会在它被绑定到变量之后就立即求值,而是等用到时再求值 。这个特性可以解决一些巨大甚至无限的集合列表,如菲波那切数列、几十G的文件等等 。延迟求值的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题 。
Python 中的很多方法没有直接返回列表 , 而是返回了一个可迭代的generator
(生成器)对象,这便是python的惰性求值,因为在创建一个很大的列表时,对内存的开销非常大,太大时python会直接报错,举个:chestnut::range()方法是产生一个指定范围列表,在Python3之前,该方法直接产生一个列表,xrange() 产生一个生成器:
xrange(100)
xrange(100)
range(100)
[0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
推荐阅读
- 专业格斗选手玩格斗游戏,格斗游戏选手收入
- 鸿蒙系统华为nova5可以吗,华为nova5升级鸿蒙系统
- phpcms文章调用,php调用php网页
- php数据导出word php导出xlsx
- 配置sqlserver2000本机服务,sql2008服务器配置服务账户
- oracle查询写入某个表特别慢,oracle查询结果写入文件
- b站更新后直播在哪,b站直播更新公告
- js如何接收php数据 js调用php文件
- c语言比较字符asc码,比较字符的ascii码大小c语言