只要函数内有yield,调用的时候就和函数本身没有关系了,得到了是一个生成器对象,玩法就是next(x),next(x),next(x)
(若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象)
1.yield表达式应用
- yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值。
- 针对表达式形貌的yield,生成器对象必须事先被初始化一次,让函数挂起在food=yield位置,等待调用g.send()方法为函数体传值,g.send(None)等同于next(g)
2.三元表达式
res = 条件成立时返回的值 if 条件 else 条件不成立时返回的值
如:
x=1
y=10
res = x if x >10 else y
3.列表生成式
快速生成列表的表达式
l=['han_age','wang_age','liu','zhao'] 快速筛选出列表后结尾为_age
l_new=[name for name in l if name.endswith('age')]
4.生成器表达式
创建一个生成器对象有两种方式,一种是调用带yield关键字的函数,另一种就是生成器表达式,与列表生成式的语法相同,只需要将[]换成()。即:(expoession for item in iterable if condtion)
[x*x for x in range(3)] [0,1,4]
g=(x*x for x in range(3)) 此时等到的g为生成式了