栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中的惰性评估

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
创建此列表时将计算整个值列表。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/640846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号