通过yield实现在单线程的情况并行运算,其实还是单线程的工作,有并行工作的效果,吃包子:
import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
def producer(name):
c = consumer('Hunter')
c2 = consumer('XiaoQuan')
c.__next__()
c2.__next__()
print("开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send(i)
c2.send(i)
producer("Hunter")
迭代器:
1、集合数据类型,如list、tuple、dict、set、str等;
2、generator,包括生成器和带yield的generator function。
定义:可以直接用于for循环的对象,都叫可迭代对象(可循环对象):Iterable
定义:可以使用Next()函数调用并不断返回下一个值的对象叫迭代器:Iterator
注:生成器都是迭代器(Iterator)对象,但是列表(list)、字典(dict)、字符串(str)虽然是可迭代对象,但并不是迭代器
Python的for循环本质上就是通过不断调用next()函数实现的
eg:
for x in [1, 2, 3, 4, 5]:
pass
isinstance()函数:判断一个对象是否是Iterable对象
eg:
isinstance([], Iterable) #返回True
isinstance({}, Iterable) #返回True
isinstance('abc', Iterable) #返回True
isinstance()函数:还可以判断一个对象是否是Iterator对象
eg:
from collections import Iterator #导入模块
isinstance((x for x in range(10)), Iterator) #返回True
isinstance([], Iterator) #返回False
dir(变量)函数:列出可以使用的函数方法
iter(变量)函数:把可迭代对象变为迭代器
eg:
a=[1,2,3]
iter(a)
b=iter(a)
b.__next__() #返回1
b.__next__() #返回2
b.__next__() #返回3
ps:已经可以使用Next函数了