关于“凡是可作用next()函数的都是Iterator对象”的疑问
Topic sourcelist、set、dict、str这些都是可迭代对象,老师说用for遍历实际上是调用next()函数,这个指的是先用iter()将这些可迭代对象变成迭代器之后,再调用next()函数,所以前后并不矛盾。
# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循环
break
- 1
好黑的一只羊
上面廖老师的文章里写到,一般数据集合类型
list、set、dict、str
都可用于for
循环,但是for
循环的本质是不断调用next()
函数,而能够调用next()
函数的对象,都可以被称为是迭代器对象,但是廖老师之前已经声明过,上面提到的list、dict
等不是迭代器对象,所以从本质上看都是通过next()
函数下一个元素,但是迭代器对象能够直接被next()
函数调用,而可迭代对象却不行么?写到这里,还想到了一个点,可迭代对象中的元素都是存放在内存中,都是有限的,而迭代器的对象本质上可以不包含元素,而是通过next()
来不断获取。