python生成器(Generators)

Source
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpengwang/article/details/85798502

生成器定义了要产生的值的列表,并只在运行时对外输出。只可迭代一次
可以自己定义一个生成器,也可以使用python自带的函数iter来构建一个生成器

自定义生成器

使用关键字yield定义生成器函数,然后用for或者next调用

def generator_function():
    for i in range(10):
        yield i
gen1 = generator_function()

for  i in gen1:
    print(i)   ==>0,1,2,3,4,5,6,7,8,9
    
gen2 = generator_function()
print(next(gen2))
print(next(gen2))     =>0,1

iter关键构建生成器

iter可以对可迭代对象构建生成器

gen1 = iter("basketball")
gen2 = iter(set(["a","b"]))
gen3 = iter([1,2,3])

next异常

在使用next逐次调用迭代器时,当迭代器的元素被迭代完了后,会报出异常

gen = iter("ab")
print(next(gen))
print(next(gen))
print(next(gen))
Traceback (most recent call last):
a
b
 line 22, in <module>
    print(next(gen))
StopIteration

for循环不报异常是因为for循环内部调用next方法时会自动捕捉异常,接收到异常后就会停止循环