生成器

生成器是一种可迭代的类型,如列表或元组。(都可以使用for 循环来获取其中的每一个元素

与列表不同的是,他们不允许使用任意索引,但是他们仍然可以通过for循环迭代。

可以使用函数和yield 语句来创建他们。

例如:

def countdown():
    i=5
    while i >0:
        yield i   #注意 遇到yield 阻塞   每次调用遇到yield都阻塞(目的是不让他一次性执行完  需要 
                  # 使用在执行)  最终结果返回的是生成器
        i-=1      #遇到 return 返回的是函数的结果 遇到return函数结束  

for  i in countdown():
    print(i)

由于他们一次产生一个项目,所有生成器不具有列表的内存限制。事实上他们可以是无限的。

(创建生成器的目的就是他们省内存,在做大文件读取时,如果一次性都读取完,内存占用太大,使用生成器的方式,比较省内存)

def infinite_sevences():
    while true :
        yield 7 
for i in infiniter_sevences():
    rint(i)
#结果 7 7 7 7 7 7  7 7  7

      简而言之,生成器允许你声明一个像迭代器一样的函数,也就是说他可以在for 循环中使用。

有限的生成器可以通过将他们作为参数传递给list函数来装换成列表。

def numbers(x):
     for i in range (x):
        if i %2==0:
            yield i 
print(list(numbers(11)))
#[0,2,4,6,8,10]

使用生成器可以提高性能,这是懒惰(按需)生成值的结果,这意味着更低的内存使用率.而且,在开始使用之前,我们不需要等到所有的元素都被生成。

上一篇:python yield的理解


下一篇:5 迭代器与生成器