Python3学习笔记----生成器

生成器的作用

生成器可以在循环的过程中推算出后续的元素,不必创建完整的list,从而节省大量空间。

生成器的创建

1.把一个列表生成式的 [ ] 改写为( )

# -*- coding: UTF-8 -*-
gen= (x * x for x in range(10))
print(gen)

输出结果不是一个列表而是返回了一个生成器对象:

<generator object <genexpr> at 0x00000190FA193AF0>

2.使用了yield,以函数的形式实现生成器

# -*- coding: UTF-8 -*-
def my_function():
    for i in range(10000):
        yield i

f=my_function()
print(f)

输出的结果同样是返回了一个生成器对象

<generator object my_function at 0x0000017A6A213BA0>

遍历生成器

1.直接使用next()调用

# -*- coding: UTF-8 -*-
def generator():
    print ( 'step 1' )
    yield ( "hello" )
    print ( 'step 2' )
    yield ( "world" )
    print ( 'step 3' )
    yield ( "!" )

o = generator()

# next() 函数遍历迭代器
while True :
    try :
        print( next( o ) )
    except StopIteration :
        break

生成器函数在每次调用next的时候执行,遇到yield语句暂停保存当前所有的运行信息返回yield的值0,再次执行时从上次返回的yied语句处继续向下顺序执行,在yield掉所有的值后,next()会触发一个StopIteration的异常。
输出结果

step 1
hello
step 2
world
step 3
!

2.使用for循环遍历生成器

# -*- coding: UTF-8 -*-
def my_function():
    for i in range(10000):
        yield i

for i in my_function():
    print(i)

for循环会自动捕捉到StopIteration异常并停止调用next()。

posted @ 2019-04-25 17:26  yukinim  阅读(149)  评论(0编辑  收藏  举报