【python】Iterator(14)

参考:

Note:



1 iterable 和 iterator

可迭代对象:可以简单的理解为可以用 for 循环遍历的

或者配合 isinstance 来判断,如下所示

from collections import Iterable

print(isinstance("Kobe Bryant", Iterable))  # string
print(isinstance({
    
    }, Iterable))  # dict
print(isinstance((), Iterable))  # tuple
print(isinstance([], Iterable))  # list
print(isinstance(set(), Iterable))  # set
print(isinstance(123, Iterable))  # int
print(isinstance(123.0, Iterable))  # float
print(isinstance(True, Iterable))  # bool

True
True
True
True
True
False
False
False

注意可迭代对象不一定是迭代器!

list1 = [11, 22, 33]
next(list1)  

会报错

TypeError: 'list' object is not an iterator

迭代器才可以 next,可迭代对象升级为迭代器用 iter

list1 = [11, 22, 33]
list1 = iter(list1)
print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))

会依次输出 list1 中的元素,直到榨干为止(StopIteration

11
22
33
Traceback (most recent call last):
  File "/home/Experiments/1.py", line 8, in <module>
    print(next(list1))
StopIteration

迭代器

只能往后next(),不能回退
迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁
这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个 G 的文件

再举一个例子

set1 = {
    
    1, 2, 3}
print(set1[0])

报错了

TypeError: 'set' object does not support indexing 

集合不支持索引,我们可以借助迭代器依次访问

iterator = iter(set1)
print(type(iterator))
print(iterator)

print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
<class 'set_iterator'>
<set_iterator object at 0x7f7612d578b8>
1
2
3
Traceback (most recent call last):
  File "/home/yanmeng/Experiments/Scene_Cls/1.py", line 14, in <module>
    print(next(iterator))
StopIteration

在这里插入图片描述


Note:

猜你喜欢

转载自blog.csdn.net/bryant_meng/article/details/109468111