python第五天
一、简单生成器函数
与函数不同的是返回不用return,而是用yield。生成器函数返回的是一个迭代器。
def func(): print(1) yield 2 print(3) yield 4 a =func() for i in a: print(i) a =func() print(a.__next__()) print(a.__next__())
例子:要求生产100000个包子,但是又不可能一次性吃完,每次调用eat()函数时,传入要吃的数量,在进行生产,
不会造成控件的浪费
def produce(): for i in range(1,100001): yield i a = produce() def eat(num): for i in range(num): print(a.__next__()) eat(10) eat(20)
二、生成器函数进阶
使用next()和send()
使用send()的注意事项:
第一次使用生成器时,必须使用next
最后一个yield不能接收send传递的值
def func(): print(1) content = yield 2 print(content) yield 4 a =func() print(a.__next__()) print(a.send(10))
计算平均值例子,增加循环流程
def average(): sum = 0 avg = 0 count = 0 while True: num = yield avg count += 1 sum += num avg = sum/count f = average() f.__next__() ret = f.send(10) ret = f.send(20) print(ret)
添加修饰器,使得不用一开始使用next
def init(func): def inner(*args,**kwargs): g = func(*args,**kwargs) g.__next__() return g return inner @init def average(): sum = 0 avg = 0 count = 0 while True: num = yield avg count += 1 sum += num avg = sum/count f = average() ret = f.send(10) ret = f.send(20) ret = f.send(30) print(ret)
yield from就是yield的对象是迭代返回的,
例如:
yield from ‘12’ 这一句就相当于
yield 1
yield 2
def func(): yield from '123' yield from [7,8,9] g = func() for i in g: print(i)
三、列表推导式
1、循环模式
简单循环
l1 = [i for i in range(2,10,2)] print(l1) #结果:[2, 4, 6, 8]
带有表达式的循环
#打印1-10的平方 l1 = [i*i for i in range(1,11)] print(l1) #结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #打印小米2到小米9 mi_list=['小米{}'.format(i) for i in range(2,10)] print(mi_list) #结果:['小米2', '小米3', '小米4', '小米5', '小米6', '小米7', '小米8', '小米9']
2、筛选模式
单层筛选
#筛选大于10的数 numbers = [45,7,63,2,25,84,8,87,54,8,76,2,45,19] print([number for number in numbers if number >10]) #结果:[45, 63, 25, 84, 87, 54, 76, 45, 19]
迭代列表中的列表,这个地方列表中的元素必须都是可迭代的
#筛选大于10的数 numbers = [[45,7,63,2],[25,84,8,87,54],[8,76,2,45,19]] print([number for list in numbers for number in list if number >10]) #结果:[45, 63, 25, 84, 87, 54, 76, 45, 19]
四、生成器表达式
生成器表达式和列表推导式的区别:
1、生成器表达式使用(),列表推导式使用[]
2、生成器表达式返回一个生成器,列表推导式返回一个列表
一个简单的生成器表达式例子:
l1 = (i for i in range(2,10,2)) print(l1) #结果:<generator object <genexpr> at 0x00000206C615A408> print(l1.__next__()) #结果:2
五、字典推导式、集合推导式
字典推导式
a = {i:"第{}个".format(i) for i in range(1,6)}
print(a)
#结果:{1: '第1个', 2: '第2个', 3: '第3个', 4: '第4个', 5: '第5个'}
集合推导式
集合推导式多了个去重的功能
b = {i*i for i in [1,-1,2,-2]}
print(b)
#结果:{1, 4}
学习链接
https://www.cnblogs.com/jin-xin/articles/10858058.html
http://www.cnblogs.com/Eva-J/articles/7213953.html#_label7

浙公网安备 33010602011771号