生成器表达式
(满足条件的元素或其相关的操作 for 元素 in 可迭代对象 if 条件)
g = (i for i in range(10)) for i in g: print(i) egg_lis = ('鸡蛋%s' %i for i in range(10)) print(egg_lis) for i in egg_lis: print(i)
生成器取值send()
send效果在获取下一个值的时候和next相似,不同之处可以给上一个yield的位置传数据。
第一个取值必须要用__next__()来取值不能用send()
最后一个yield也不能接收外部的数据
def generator(): print('zxc') content = yield 1 print('==='+content) print('zxf') yield 2 g = generator() print(g.__next__()) # print(g.__next__()) print(g.send('good'))
生成器实例
# 计算移动平均值 def average(): total = 0 count = 0 avg = 0 while True: num = yield avg total += num count += 1 avg = total / count avg_g = average() avg_g.__next__() avg1 = avg_g.send(10) avg2 = avg_g.send(20) print(avg1, avg2)
上面的实例中avg_g.__next__()的返回值没有什么意义,只是起到了一个激活生成器的效果。为了方便多个生成器的激活,这里就可以使用预激生成器的装饰器
def init(func): def inner(*args, **kwargs): ret = func(*args, **kwargs) ret.__next__() return ret return inner @init def average(): total = 0 count = 0 avg = 0 while True: num = yield avg total += num count += 1 avg = total / count avg_g = average() print(avg_g.send(10)) print(avg_g.send(20))
推导式
格式:满足条件的元素或其相关的操作 for 元素 in 可迭代对象 if 条件
各种推导式:生成器(),列表[],字典{},集合{}
1,遍历操作
2,筛选操作
列表推导式
egg_lis = ['鸡蛋%s' %i for i in range(10)] print(egg_lis)
生成器推导式
g = (i for i in range(10)) for i in g: print(i)
字典推导式
# 将一个字典中的key和value对调 dic = {'k1': 'v1', 'k2': 'v2'} dic_swop = {dic[k]: k for k in dic} print(dic_swop) # {'v2': 'k2', 'v1': 'k1'}
集合推导式
# 集合推导式 自带结果去重功能 set1 = {i for i in [1, 3, 5, 5, 6, 3, 4]} print(set1) # {1, 3, 4, 5, 6}