# 求移动平均数
def avger():
sum=0
count=0
avg=0
while True:
#num=yield avg
num = yield avg
sum+=num
count+=1
avg=sum/count
g=avger()
g.__next__()
avg1=g.send(10)
avg1=g.send(20)
avg1=g.send(30)
print(avg1)
#预激生成器的装饰器
def init(func): #装饰器
def inner(*args,**kwargs):
g = func(*args,**kwargs) #g = average()
g.__next__()
return g
return inner #average
#@init
def average():
sum = 0
count = 0
avg = 0
while True:
num = yield avg
sum += num # 10
count += 1 # 1
avg = sum/count
#average=init(average) # inner
avg_g = average() #===> inner
ret = avg_g.send(10)
print(ret)
ret = avg_g.send(20)
print(ret)
yeild from
#python 3,集体返回,然后可以用for一个一个接收到
# def generator():
# a = 'abcde'
# b = '12345'
# for i in a:
# yield i
# for i in b:
# yield i
def generator(): #和上面一个意思
a = 'abcde'
b = '12345'
yield from a
yield from b
g = generator()
for i in g:
print(i)