def generator(): print(123) yield 1 print(456) yield 2 g = generator()ret = g.__next__()print('***'ret)ret = g.send(None) #send 效果和 next一样print('***'ret)
归纳:
1.send 获取下一个值得效果和next基本一致2.只是在获取下一个值得时候,给上一个yield的位置传一个参数
使用send的注意事项
1.第一次使用生成器的时候,必须使用next获取一个值2.最后一个yield不能接受外部的值
def average() sum = 0 count = 0 avg = 0 while 1: num = yield avg sum += num count += 1 avg = sum / countavg_g = average()avg_g.__next__()avg1 = avg_g.send(10)print(avg1)
def init(func): def inner(*args, **kwargs): ret = func(*args, **kwargs) g.__next__() return g return inner@initdef average(): sum = 0 count = 0 avg = 0 while 1: num = yield avg sum += num count += 1 avg = sum / countg = average()avg1 = g.send(10)print(avg1)
python3.X----->yield from
def generator(): a = '123' b = 'abc' for i in a: yield i for i in b: yield ig = generator()for i in g: print(i)
def generator(): a = '123' b = 'abc' yield from a yield from bg = generator()for i in g: print(i)