博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器来激活生成器
阅读量:5235 次
发布时间:2019-06-14

本文共 1582 字,大约阅读时间需要 5 分钟。

这是求移动平均值: 1 def active(func):   # func=avg_num 2     def inner(*args,**kwargs): 3         g=func(*args,**kwargs)      # avg_num() 4         next(g)           #  相当于执行avg_num.next() 5         return g      #返回一个生成器  
6 return inner 7 8 @active # avg_num=active(avg_num) 9 def avg_num():10 sum=011 count=012 avg=013 while True:14 num=yield avg #程序会停在yield处15 sum+=int(num)16 count+=117 avg=sum/int(count)18 19 g=avg_num() # avg_num= inner----> inner()20 print(g) #返回一个生成器
21 # g.__next__() #激活生成器函数22 while True:23 n=input('请输入一个数:')24 gre=g.send(n)25 print(gre)

装饰器在这里相当于执行了下面的一句 g.__next__() 把生成器函数激活了

send的作用范围和next一样

第一个yield之前不能用send 得用next方法激活生成器

函数的最后一个yield不再接收新的值

当需要循环获取可迭代对象的每个元素是可以使用yield from

1 def show():2     a='hello'3     b='python'4     yield  from a5     yield  from b6 g=show()7 for i in g:8     print(i)

 #列表推导式与生成器表达式的例子:

1 #列表推导式2 num_list=[i*i for i in range(10)]3 print(num_list)4 5 #生成器表达式6 num_g=(j*j for j in range(10))7 print(num_g)8 for k in num_g:9     print(k)

列表推导式 直接返回一串值在列表里

生成器表达式返回的是一个生成器地址,在内存里不占用什么空间,随时用随时生成 结果需要迭代才能看到

其他推导式

1 #字典推导式 2 dic_pro={
'a':23,'b':56} 3 new_dic={dic_pro[k]:k for k in dic_pro} 4 print(new_dic) 5 6 dic_pro={
'a':23,'b':56,'B':7} 7 new_dic={k.upper():dic_pro.get(k.lower(),0)+dic_pro.get(k.upper(),0)for k in dic_pro.keys()} 8 print(new_dic) 9 10 #集合推导式11 tic={1,2,-2,3}12 new_tic=[i**2 for i in [1,2,-2,3]]13 print(new_tic)

 

转载于:https://www.cnblogs.com/wen-kang/p/9314031.html

你可能感兴趣的文章
CEF3开发者系列之外篇——IE中JS与C++交互
查看>>
sql小技巧
查看>>
全选特效并修改checkbox样式
查看>>
rest_framework ---APIView
查看>>
[BZOJ 3224] [Tyvj 1728] 普通平衡树
查看>>
Ogre中TerrainSceneManager
查看>>
接口的应用
查看>>
WAVECOM CDMA Modem 发送短信
查看>>
Shortest Prefixes
查看>>
Fermat’s Chirstmas Theorem (素数打表的)
查看>>
KMP算法
查看>>
iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
查看>>
GIT前世今生
查看>>
整数除以整数后转成百分比并且保留一位小数
查看>>
远程连接oracle数据库
查看>>
IntelliJ Idea 常用快捷键列表
查看>>
小问题,小细节要注意(string类型转换为bool类型)
查看>>
[shell]实现脚本执行结果匹配某个字符串
查看>>
基本_移动类型轮播效果_框架
查看>>
How to arrange the svn repository layout
查看>>