我是靠谱客的博主 爱听歌冷风,这篇文章主要介绍Python学习(十二)——生成器和迭代器生成器迭代器,现在分享给大家,希望可以做个参考。

生成器

生成器就是一种自定义的迭代器,本质就是迭代器 。即生成器是迭代器中的一种。
next():每次只获取一个数据。
next()的两种用法:

复制代码
1
2
3
4
5
6
7
8
9
10
g = (x for x in range(1, 6)) print(next(g)) # 1 print(next(g)) # 2 print(g.__next__()) # 3 print(g.__next__()) # 4 # 结果:1 # 2 # 3 # 4
复制代码
1
2
3
4
5
6
7
8
9
r = (x for x in range(1,6)) for i in r: print(i) # 结果:1 # 2 # 3 # 4 # 5

for循环的本质就是调用next()

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建生成器方法一: (x for x in range(1,11)) # 创建生成器方法二:yield关键字实现 # yield相当于挂起,存档的意思 def f(): print("hello world") yield 1 g = f() print(next(g)) # 结果:hello world # 1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def a(): print("f1") yield 1 print("f2") yield 2 g = a() print(next(g)) # f1 1 print(next(g)) # f2 2 # 结果: f1 # 1 # f2 # 2
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
def a(): print("f1") yield 1 print("f2") yield 2 for i in a(): print(i) # 结果: f1 # 1 # f2 # 2

可迭代对象的含义:

  1. 从现象来看,只要是可以for循环的都是可迭代对象。
  2. 从本质来看,是内置有iter方法的是可迭代对象(对象拥有iter方法)。
复制代码
1
2
3
4
5
6
7
8
9
10
li = [2, 4, 6] print(li.__iter__()) tu = (1, 2, 3) print(tu.__iter__()) di = {'name': 'Jim'} print(di.__iter__()) # 结果:<list_iterator object at 0x000001C13046F610> # <tuple_iterator object at 0x000001C13046F610> # <dict_keyiterator object at 0x000001C13020C810>

迭代器

iterator:迭代器
iterable:可迭代对象

复制代码
1
2
3
4
5
li = [2, 4, 6] a = iter(li) print(a) #结果:<list_iterator object at 0x000002609AA69FA0>

迭代器有next()方法;有iter()方法

复制代码
1
2
3
4
5
6
7
8
9
li = [2, 4, 6] a = iter(li) print(next(a)) print(next(a)) print(next(a)) # 结果:2 # 4 # 6

for循环的本质:

  • 调用可迭代对象的iter方法返回一个迭代器
  • 不断地调用迭代器的next()方法
  • 处理异常
复制代码
1
2
3
4
5
6
7
8
li = [1, 2, 3] for i in li: print(i) li.__iter__() # 结果:1 # 2 # 3
复制代码
1
2
3
4
5
6
7
8
9
10
a = iter([1,2,3]) while True: try: print(next(a)) except StopIteration: break # 结果:1 # 2 # 3

迭代器的优点:
为序列类型和非序列类型提供一种统一的迭代取值方式。
可以只在需要的时候才去调用next()来计算出一个值。就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流。而对于其他容器的类型,比如列表,就需要把所有的元素都存放在内存中,受内存大小的限制,可以存放的值得个数是有限的。

最后

以上就是爱听歌冷风最近收集整理的关于Python学习(十二)——生成器和迭代器生成器迭代器的全部内容,更多相关Python学习(十二)——生成器和迭代器生成器迭代器内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部