标签:time play start next gen stop consumer and ret
迭代器
可以直接作用于for循环的对象统称为可迭代对象(Iterable)。
可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。
所有的Iterable均可以通过内置函数iter()来转变为Iterator。
names = iter([‘sun‘, ‘ibm‘, ‘sunny‘]) print(names) print(names.__next__()) print(names.__next__()) print(names.__next__()) print(names.__next__()) #第一个输出打印迭代器对象 #第二三四次next方法每次都去获取迭代对象的值,每次往下取一个值,直到取完 #第五次输出 print(names.__next__()) #StopIteration,因为迭代器里面的对象已经取完了,所以出现这个异常
生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator
def fib(max): n,a,b = 0,0,1 while n < max: #print(b) yield b a,b = b,a+b n += 1 return ‘done‘ data = fib(10) print(data) print(data.__next__()) print(data.__next__()) print("干点别的事") print(data.__next__()) print(data.__next__()) print(data.__next__()) print(data.__next__()) print(data.__next__())
生成器的异步应用
import time def consumer(name): # 定义消费者函数 print("%s 准备吃包子啦!" % name) # 打印消费者名字 while True: baozi = yield # 当代码运行到这时,返回一个迭代器对象,当对象第二次调用时,会接收值并赋值给baozi print("包子[%s]来了,被[%s]吃了!" % (baozi, name)) # 打印当前使用的迭代器对象,及接收的值 def producer(*name): # 定义一个生产者函数,并使用动态参数 if len(name) == 3: # 当传入三个参数时,调用三次消费者函数方法 c = consumer(name[0]) c2 = consumer(name[1]) c3 = consumer(name[2]) c.__next__() # 通过函数内置方法获取迭代器内部元素 c2.__next__() c3.__next__() print("老子开始准备做包子啦!") for i in range(1, 11): time.sleep(1) print("做了%s个包子!" % len(name)) c.send(i) # 通过迭代器方法的send属性给生成器传送值 c2.send(i) c3.send(i) producer("alex", ‘zengchunyun‘, ‘peiqi‘) # 创建一个生产者对象,并传入三个消费者名字
装饰器
def wrapper(func): def inner(name): func(name) return inner @wrapper def index(name): print(‘welcome %s‘ % name) index(‘alex‘)
标签:time play start next gen stop consumer and ret
原文地址:http://www.cnblogs.com/sxlnnnn/p/6366306.html