生成器进阶

本文深入探讨了Python中的生成器函数与生成器表达式的使用方法,包括yield关键字的功能,如何通过next()和send()方法获取生成器的值,以及生成器与迭代器的区别。同时,文章还对比了生成器表达式与列表推导式的语法和应用场景。

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

#yield from
# def gene():
# for i in range(5):
# y=yield i
# # print(y)
# for j in 'hello':
# yield j
# g=gene()
#取值方法有三种
# 1.next()或者send(),随时可以停止,但是最后一次会报错
# print(next(g))
# print(g.send('hi'))
#2.for循环 从头到尾遍历,不遇到break不停止
# for m in g:
# print(m)
#3. list tuple 数据类型的强转,会把所有数据加载到内存
# print(g)
# print(list(g))

#yield from使用
# def gene():
# yield from range(5)
# yield from 'hello'
# g=gene()
# for i in gene():
# print(i)
#下面的错误:每次都重新生成生成器,所以返回一直是第一个数
# while True:
# print(next(gene()))

#生成器函数 是我们python程序员实现迭代器的一种手段
#主要特征是 函数中含有 yield
#调用生成器函数不会执行,只会获得一个生成器
# 调用一个生成器函数,才会执行这个函数中的代码
#只有从生成器中取值的时候,才会执行函数内部的代码

#生成器表达式

#列表推导式
# newl=[]
# for i in range(10):
# newl.append(i**2)
# print(newl)
#列表推导式:
# print([i**2 for i in range(10)])
#联系,将列表中的数全部变为正数返回列表
# ll=[0,-2,-3,4]
# print([abs(i) for i in ll])
# print([i%2 for i in ll])
# print([i for i in range(30) if i%3==0])
#嵌套列表也可以用列表推导式
# names=[['tom','ede','vvegre'],['ert','dgw','ete']]
# print([name for i in names for name in i if name.count('e')==2])

#三元运算符
# name=input('姓名>>: ')
# res='SB' if name == 'alex' else 'NB'
# print(res)

#生成器表达式
# gen=('鸡蛋%s'%i for i in range(5))
def egg():
for i in range(5):
yield '鸡蛋%s'%i
gen=egg()
print(gen)
print(list(gen))
# print(next(gen))
# print(next(gen))
# print(sum((i**2 for i in range(5))))
# print(sum([i**2 for i in range(5)]))
#生成器表达式同生成器函数,都是惰性的,不执行。
# 只有next,send,for循环,list(),tuple()可以取值

转载于:https://www.cnblogs.com/lixiaoxuan/articles/8966372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值