一,生成器就是可迭代对象,可以理解为一种数据类型,这种数据类型自动实现了迭代器协议。
1.生成器函数:常规函数定义,但是使用yield语句而不是return语句,yield可以返回多个值。可以保留函数的运行状态。
2.第二行的式子称为 三元表达式(没有四元表达式,可以两元)
name=‘alex’
res=‘hk’ if name==‘song’ else ‘pl’
print(res)
3.列表解析
l=[‘鸡蛋%s’ %i for i in range(5)]
print(l)
等价于:
egg_list=[]
for i in range(5):
- egg_list.append(‘鸡蛋%s’ %i)
print(egg_list)
可以改为三元表达式:
l=[‘鸡蛋%s’ %i for i in range(5) if i>3] #列表解析
print(l)
生成器的第二种表达方式:
a=(‘鸡蛋%s’ %i for i in range(5)) #生成器表达式
print(a)
print(l.next())
print(l.next())
生成器表达式更节省内存
import time
def test():
- print(‘开始生孩子啦’)
- yield ‘主人公’
- time.sleep(3)
- print(‘开始生儿子了’)
- yield '儿子
- time.sleep(3)
- 'print(‘开始生孙子了’)
- yield ‘孙子’
- time.sleep(3)
res=test()
print(res)
print(res.next())
print(res.next())
print(res.next())
每i执行一次next,将会输出一次yield结果,再执行第二次next时,会在上次执行到的位置继续往下执行,即可以保留函数的运行状态。