enumerate 用法:对序列做下标
l=['q','s','d'] for i in enumerate(l,start=2): print (i) for x,y in enumerate(l,start=5): print(x,y)
(2, 'q')
(3, 's')
(4, 'd')
5 q
6 s
7 d
yield 和 send 特性
def test(): print("a") re=yield 1 # 1 代表的是return 1,可以不填,则返回none;re代表的是函数中的局部变量 print('b',re) yield 2 print("c") yield 3 #yield 相当于return,控制的是函数的返回值 #yield 另一个特性,接收send传递过来的值,赋值给x t=test() #拿到了生成器函数,但是并未运行,是否为生成器函数解释器通过yield自动判别 res=t.__next__() print('_next_方法:',res) res2=t.send('I am value')#send和next的执行很像,只是send可以和生成器互动,传入一个值,将需要传递对值,传递上一个yield print('send方法:',res2) res3=next(t) print('next函数方法:',res3)
第1个人,吃了包子1
第2个人,吃了包子2
第3个人,吃了包子3
第4个人,吃了包子4
第5个人,吃了包子5
a
_next_方法: 1
b I am value
send方法: 2
c
next函数方法: 3
import time baozi=['包子%s'%(i+1) for i in range(5)] #生产包子 def customer (res): #吃包子顾客 for index,bz in enumerate(res,start=1): time.sleep(0.1) print('第%s个人,吃了%s'%(index,bz))#吃包子 customer(baozi) #并行方法吃包子,单线程内并发 def ch(name): print('我是%s,我要吃包子'%name) while True: bz=yield time.sleep(0.2) print("%s吃的是%s"%(name,bz)) def chibaozi(name,xian): c1 = ch(name) c1.__next__() for i in range(10): time.sleep(0.2) c1.send(xian+"%s"%i) #send 传递给上面的yield chibaozi("sxj",'肉包')
第1个人,吃了包子1
第2个人,吃了包子2
第3个人,吃了包子3
第4个人,吃了包子4
第5个人,吃了包子5
我是sxj,我要吃包子
sxj吃的是肉包0
sxj吃的是肉包1
sxj吃的是肉包2
sxj吃的是肉包3
sxj吃的是肉包4
sxj吃的是肉包5
sxj吃的是肉包6
sxj吃的是肉包7
sxj吃的是肉包8
sxj吃的是肉包9