您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中的惰性评估

Python中的惰性评估

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

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

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

(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 in range(5000000)]生成器,仍然是列表。range(...)它的工作并一次生成x一个,但是在x/2创建此列表时将计算整个值列表。

python 2022/1/1 18:32:46 有216人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶