Python全系列 教程
3567个小节阅读:5929.5k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
iter()
和 next()
一个实现了iter
方法的对象,称为"可迭代对象Ieratable"
一个实现next
方法并且是可迭代的对象,称为"迭代器Iterator"
即:实现了
iter
方法和next
方法的对象就是迭代器。
⚠️生成器都是
Iterator
对象,但list
、dict
、str
虽然是Iterable(可迭代对象)
,却不是Iterator(迭代器)
。xxxxxxxxxx
#python3.6之前不加.abc,之后的加
from collections.abc import Iterator
from collections.abc import Iterable
a = isinstance([], Iterable)
a = isinstance([], Iterator)
print(a)
list
、dict
、str
等Iterable
变成Iterator
, 可以使用iter()
函数:xxxxxxxxxx
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
为什么
list
、dict
、str
等数据类型不是Iterator
?Python的
Iterator
对象表示的是一个数据流。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算。所以,生成器一定是迭代器。
Iterator
甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
Python3的
for
循环本质上就是通过不断调用next()
函数实现的。xxxxxxxxxx
for x in [1, 2, 3, 4, 5]:
pass
本质是:
xxxxxxxxxx
# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循环
break
实时效果反馈
1. 如下关于迭代器的说法,错误的是:
A 一个实现了iter
方法的对象,称为"可迭代对象Iterable",也是迭代器Iterator
B 一个实现next
方法并且是可迭代的对象,称为"迭代器Iterator"
C 实现了iter
方法和next
方法的对象就是迭代器
答案
1=>A