python---基本知识19之生成器

2018-01-27  本文已影响16人  hello_我的哥

概念?

是一个特殊的迭代器,拥有迭代器的特性;主要是为了节省内存空间,就是用到了才去生成,才去取值,而不是一下子把所有的都取出来;

创建方式:

1.通过推导式:其实就是把列表推导式的[]换成()

l=(x for x in range(10000000))

print(l.__next__())

2.通过生成器函数,生成器函数主要有两个特点,第一是函数中包含yield语句,第二是函数的执行结果就是一个生成器:

def generator():

    print(5)

    yield 6

    print(4)

    yield 1

gen=generator()

print(next(gen))

print(next(gen))

访问生成器数据:可以通过next()函数,或者生成器对象的方法:__next__(),以及for in;我们应该注意到的是函数的执行结果是一个生成器,但是其实我们在调用函数执行的时候,函数并没有执行,只有当访问生成器数据的时候才会执行,并且遇到yield语句的时候就会被暂停;

next(gen)

gen.__next__()

for i in gen:

    print(i)

send()方法:其实和next()的功能差不多,只不过多了一个功能,就是可以给上一次yield语句指定返回结果,这里需要注意一点是上一次,那么如果是第一次执行的话,由于没有上一次,所以指定的结果只能为none;

def generator():

    print(5)

    res= yield 6

    print(res)

    yield 1

gen=generator()

print(gen.send(None))

print(gen.send('a'))

注意事项:首先生成器如果碰到return语句,会报StopIteration异常,因为return就是返回,后面就不会执行了,肯定会抛出异常,第二点是生成器和迭代器一样,只会执行一遍,执行完毕就会被释放;

上一篇下一篇

猜你喜欢

热点阅读