python:生成器进阶
1,列表推导式?值 for 循环2,生成器表达式g=(i for?i in?range(10))print(g)for i in g:? ? print(i)3,列表推导式与生成器表达式的区别#括号不一样 #返回值不一样? ===》生成器表达式几乎不占内存 g =('鸡蛋%s'%i for i in range(10)) print(g) for i in g: print(i) 4,各种推导式1)列表推导式:[每一个元素或者是和元素相关的操作? for? 元素? in? 可迭代数据类型]? ? ? ?#遍历之后挨个处理
names = [[,,,,,,,,,,,,<span style="color: #0000ff">print([name <span style="color: #0000ff">for lst <span style="color: #0000ff">in names <span style="color: #0000ff">for name <span style="color: #0000ff">in lst <span style="color: #0000ff">if name.count(<span style="color: #800000">'<span style="color: #800000">e<span style="color: #800000">') >= 2]) <span style="color: #008000">#<span style="color: #008000"> 注意遍历顺序,这是实现的关键
2)列表推导式(筛选功能):[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件]? ?#筛选功能3)生成器推导式:(满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件)4)字典推导式:例一:将一个字典的key和value对调 mcase = {: 10,: 34= {mcase[k]: k k (mcase_frequency)
例二:合并大小写对应的value值,将k统一成小写mcase = {: 10,: 34,: 7,: 3= {k.lower(): mcase.get(k.lower(),0) + mcase.get(k.upper(),0) k (mcase_frequency)
5)集合推导式: squared = {x**2 x [1,-1,2
5,移动平均值 = 0.0=== +=+= 1= total/g_avg =<span style="color: #000000"> averager()
next(g_avg) <span style="color: #0000ff">print(g_avg.send(10<span style="color: #000000">)) <span style="color: #0000ff">print(g_avg.send(30<span style="color: #000000">)) <span style="color: #0000ff">print(g_avg.send(5)) 6,预激生成器的装饰器 init(func):
inner(*args,**= func(*args,**@init <span style="color: #0000ff">def<span style="color: #000000"> averager(): total = 0.0<span style="color: #000000"> count =<span style="color: #000000"> 0 average =<span style="color: #000000"> None <span style="color: #0000ff">while<span style="color: #000000"> True: term = <span style="color: #0000ff">yield<span style="color: #000000"> average total +=<span style="color: #000000"> term count += 1<span style="color: #000000"> average = total/<span style="color: #000000">count g_avg =<span style="color: #000000"> averager() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |