Python中的惰性评估

Python中的惰性评估,第1张

Python中的惰性评估

range()
(或
xrange()
在Python2.x中)返回的对象被称为惰性迭代。

[0,1,2,..,9]
生成器没有将整个范围存储在内存中,而是存储的定义
(i=0; i<10;i+=1)
并仅在需要时才计算下一个值(又称惰性求值)。

本质上,生成器允许您返回类似于结构的列表,但是这里有一些区别:

  1. 列表创建后将存储所有元素。生成器在需要时生成下一个元素。
  2. 列表可以遍历尽可能多的,因为你需要,发电机只能遍历 正好 一次。
  3. 列表可以按索引获取元素,而生成器则不能-列表从头到尾仅生成一次值。

生成器可以通过两种方式创建:

(1)与清单理解非常相似:

# this is a list, create all 5000000 x/2 values immediately, uses []lis = [x/2 for x in range(5000000)]# this is a generator, creates each x/2 value only when it is needed, uses ()gen = (x/2 for x in range(5000000))

(2)作为函数,使用

yield
返回下一个值:

# this is also a generator, it will run until a yield occurs, and return that result.# on the next call it picks up where it left off and continues until a yield occurs...def divby2(n):    num = 0    while num < n:        yield num/2        num += 1# same as (x/2 for x in range(5000000))print divby2(5000000)

注意: 即使

range(5000000)
在Python3.x中
[x/2 for x inrange(5000000)]
是生成器,仍然是列表。
range(...)
它的工作并一次生成
x
一个,但是在
x/2
创建此列表时将计算整个值列表。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646638.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存