Discuss / Python / 关于“凡是可作用next()函数的都是Iterator对象”的疑问

关于“凡是可作用next()函数的都是Iterator对象”的疑问

Topic source

上面廖老师的文章里写到,一般数据集合类型list、set、dict、str都可用于for循环,但是for循环的本质是不断调用next()函数,而能够调用next()函数的对象,都可以被称为是迭代器对象,但是廖老师之前已经声明过,上面提到的list、dict等不是迭代器对象,所以从本质上看都是通过next()函数下一个元素,但是迭代器对象能够直接被next()函数调用,而可迭代对象却不行么?写到这里,还想到了一个点,可迭代对象中的元素都是存放在内存中,都是有限的,而迭代器的对象本质上可以不包含元素,而是通过next()来不断获取。

提米冰冰

#2 Created at ... [Delete] [Delete and Lock User]

list、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

for循环里面先用iter()函数将这些变为了iterator

海上牧芸

#4 Created at ... [Delete] [Delete and Lock User]

应该是在for循环中将其变为迭代器的

Matters_

#5 Created at ... [Delete] [Delete and Lock User]

很仔细,谢谢。


  • 1

Reply