概述
生成器
生成器就是一种自定义的迭代器,本质就是迭代器 。即生成器是迭代器中的一种。
next():每次只获取一个数据。
next()的两种用法:
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
r = (x for x in range(1,6))
for i in r:
print(i)
# 结果:1
# 2
# 3
# 4
# 5
for循环的本质就是调用next()
# 创建生成器方法一:
(x for x in range(1,11))
# 创建生成器方法二:yield关键字实现
# yield相当于挂起,存档的意思
def f():
print("hello world")
yield 1
g = f()
print(next(g))
# 结果:hello world
# 1
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
def a():
print("f1")
yield 1
print("f2")
yield 2
for i in a():
print(i)
# 结果: f1
# 1
# f2
# 2
可迭代对象的含义:
- 从现象来看,只要是可以for循环的都是可迭代对象。
- 从本质来看,是内置有iter方法的是可迭代对象(对象拥有iter方法)。
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:可迭代对象
li = [2, 4, 6]
a = iter(li)
print(a)
#结果:<list_iterator object at 0x000002609AA69FA0>
迭代器有next()方法;有iter()方法
li = [2, 4, 6]
a = iter(li)
print(next(a))
print(next(a))
print(next(a))
# 结果:2
# 4
# 6
for循环的本质:
- 调用可迭代对象的iter方法返回一个迭代器
- 不断地调用迭代器的next()方法
- 处理异常
li = [1, 2, 3]
for i in li:
print(i)
li.__iter__()
# 结果:1
# 2
# 3
a = iter([1,2,3])
while True:
try:
print(next(a))
except StopIteration:
break
# 结果:1
# 2
# 3
迭代器的优点:
为序列类型和非序列类型提供一种统一的迭代取值方式。
可以只在需要的时候才去调用next()来计算出一个值。就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流。而对于其他容器的类型,比如列表,就需要把所有的元素都存放在内存中,受内存大小的限制,可以存放的值得个数是有限的。
最后
以上就是爱听歌冷风为你收集整理的Python学习(十二)——生成器和迭代器生成器迭代器的全部内容,希望文章能够帮你解决Python学习(十二)——生成器和迭代器生成器迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复