python学习记录--生成器

今日内容概要

  • 生成器(自定义的迭代器)

  • 结合生成器实现range功能

  • 生成器表达式

  • 生成器的笔试题

今日内容详细

引言

迭代取值和索引取值的对比

迭代取值提供了一种不依赖于索引取值的方式

迭代取值:

1.不依赖于索引取值,__next__()取值

2.不能重复取值,只能从左往右一个一个取值

索引取值:

1.必须要一个容器类型

2.可以重复取值

生成器(自定义的迭代器)

生成器就是自定义的迭代器

def index():
     print('first')
     yield 123,234,345
     print('second')
     yield 'aaaa'
     print('third')
     yield 'xxxx'

函数里面有yield关键字之后,函数调用之外还是函数,一定调用函数变成了生成器

res=index() 一旦生成器,就可以__next__取值了

print(res.__next__)

#函数中的yield关键字的玩法:__next__一下,走一个yield,光标就停在了yield,如果再__next__,会从上一次停留的yield位置继续往下走

 

 生成器实现range功能

# range功能:
1.玩法一:
range(10) # 0-9的数字
2. 玩法二:
range(3,10) # 3-9的数字
3. 玩法三:
range(1, 10, 2) # 1,3,5,7,9

 

 根据玩法2,退出玩法3

 

 推出玩法1

 

 

yield和return的对比

yield

1. 函数内遇到yield关键字把函数变成了生成器

2. yield 也可以返回值,并且支持返回多个(元组形式)

3. 遇到yield,函数不会结束,而是"停住"

4. yield 也支持传值

return

1. 后面可以跟返回值,也支持返回多个(元组形式)

2. 函数遇到return,会立马结束

生成器表达式

l = [1, 2, 3, 4]
res = (i + 1 for i in l)

print(res.__next__())
print(res.__next__())

'''
生成器表达式就类似于工厂
只有在你索要数据的时候,工厂才会给你加工数据
目的:节省内存空间

 

 生成器面试题

答案选C

 

posted @   mwz21  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示