迭代/生成器

2017-02-04  本文已影响0人  cctse

for in列表一次性加载列表的所有数据到内存,而迭代器通过一次只加载一项数据,有效避免了当加载的列表过大导致内存不足问题

生成器

有两种方法提供生成器:生成器函数生成器表达式

def gensquares(N):
    for i in range(N):
        yield i ** 2

for item in gensquares(5):
    print(item)
    
# 使用普通函数一次性生成一个列表
def gensquares(N):
    res = []
    for i in range(N):
        res.append(i*i)
    return res

for item in gensquares(5):
    print(item)
squares = (x**2 for x in range(5))

for item in squares(5):
    print(item)

显然使用推导式代码更少更易理解

为了避免定义难理解,可以简单地认为
迭代器就是一个可迭代对象,可以在for in中迭代出各元素
生成器的作用差不多就是生成一个可迭代对象

注意:生成器生成的可迭代对象只能遍历一次

上一篇 下一篇

猜你喜欢

热点阅读