python基础(迭代器,生成器,装饰器)

python:

  生成器:

  因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用.

  生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(generator)来计算一下个元素

  

>>> l = [x * x for x in range(5)]
>>> l
[0, 1, 4, 9, 16]
>>> g =(x*x for x in range(5))
>>> g
<generator object <genexpr> at 0x02F372D0>
>>> g.__next__()
0
>>> g.__next__()
1
>>> g.__next__()
4
>>> g.__next__()
9

  

定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 

  1:( for 循环函数): 这里是括号

  2:yield 

  yield指令,允许停止函数并立即返回结果,函数保存其执行上下文,如果需要,可通过__next__()方法立即继续执行。返回一个迭代器,函数send(arg)继续刚刚中断的yield并发送给yield函数一个参数

  

import time
def consumer(name):
    print("%s准备吃包子啦" %(name))
    while True:
        baozi = yield
        print("包子来了[%s],被[%s]吃了!"%(baozi,name))
def producer(name):
    c1 = consumer('l')
    c2 = consumer('z')
    c1.__next__()
    c2.__next__()
    print('%s要开始做包子啦'%(name))
    for i in range(1,10):
        time.sleep(1)
        print('做了两个包子')
        c1.send(i)
        c2.send(i)
producer('ly')

  

  

      生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

 

posted @ 2017-11-20 14:35  zimsan  阅读(150)  评论(0)    收藏  举报