015 Python语法之迭代器与生成器

2017-07-09  本文已影响0人  Luo_Luo

迭代器

  1. 可用于集合,列表,元组,字典,字符串
  2. 可以用于节省内存,用完一个数据就可以del掉
  3. 可循环的对象统称为:Iterable
  4. 可被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
  5. 可以用iter(a)将 a 变成一个迭代器
  6. iterator是一个数据流,可被next,没有提前创建控件,是一个惰性的计算
  7. 凡是可作用于for循环的都是Iterable类型
  8. 凡是可作用于next函数的对象都是Iterator,它们表示一个惰性的计算序列
  9. 3.x range()本质是一个迭代器

迭代器函数:iter(序列) next(迭代器)

str1 = "12345"
it = iter(str1)

遍历方式1:
for i in it:
    print(i)

遍历方式2:
while True:
    try:
        print(next(it))
    except StopIteration:
        break
        sys.exit()

生成器函数与yield关键字

def iteration():
    for i in range(10):
        yield i

it = iteration()
it 是一个生成的迭代器,可用上面的方式进行迭代

send() 函数

def iteration():
    for i in range(10):
        x = yield i
        i = x + i
        
it = iteration()
it.send(None)
it.send(1)

生产者消费者模式

import time

def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield

       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

c = consumer("ChenRonghua")
c.__next__()

# b1= "韭菜馅"
# c.send(b1)
# c.__next__()

def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print("老子开始准备做包子啦!")
    for i in range(10):
        time.sleep(1)
        print("做了1个包子,分两半!")
        c.send(i)
        c2.send(i)

producer("alex")
上一篇下一篇

猜你喜欢

热点阅读