三元运算,列表解析,生成器表达式

本文详细介绍了Python中生成器的概念,包括生成器函数、生成器表达式及其与迭代器的关系。通过实例展示了如何使用yield保留函数状态,以及生成器在节省内存方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,生成器就是可迭代对象,可以理解为一种数据类型,这种数据类型自动实现了迭代器协议。
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时,会在上次执行到的位置继续往下执行,即可以保留函数的运行状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值