生成器

Generator(生成器)
迭代器 iterator
迭代器是一个让程序员可以遍历一个容器的 对象,一个迭代器在遍历读取一个容器的数据元素的时候,并不会执行一个迭代。

可迭代对象
迭代器
迭代

可迭代对象iterable
python中任意的,只要它定义了可以返回迭代器__iter__方法,或者定义了可以支持下标索引的__getitem__方法,他就是可迭代对象,可迭代对象就是能提供迭代器的任意对象

iterator迭代器
任意对象,只要定义了next() python2 或者__next__方法,他就是一个迭代器

理解迭代(iteration)
从某个地方取出一个元素的过程,当我们使用一个循环来遍历某个东西的时候,这个过程本身就叫做迭代

生成器
在运行时生成值,通过遍历来使用他们,生成器一般是使用函数来实现的

def generator_function():
    for i in range(10):
        yield i
for item in generator_function():
    print(item)

在这里插入图片描述
当不想同一时间将所有计算出来的大量结果分配到内存中,特别是结果集中包含循环使用生成器
计算斐波那切数列的生成器

def fibon(n):
    a=b=1
    for i in range(n):
        yield a
        a,b = b,a+b
for x in fibon(10):
    print(x)

在这里插入图片描述

def fibon(n):
    a = b = 1
    result = []
    for i in range(n):
        result.append(a)
        a, b = b, a+b
    return result
print(fibon(1000))

上面这种方式当n特别大,就会消耗大量资源,但是生成器就不会
python 内置函数 next()

def generator_function():
    for i in range(3):
        yield i
gen = generator_function()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

生成器_第1张图片
yield所有的值后,出错了,for循环不报错因为它会自动捕捉错误并停止调用next()

内置类型str并不是一个迭代器

strs = "hhhhxxxxxxx"
str1 = iter(strs)
next(str1)
next(str1)
next(str1)

这样字符串类型就成为了生成器

你可能感兴趣的:(PYTHON)