【Python】可迭代对象 vs 迭代器

可迭代对象 Iterable

可直接作用于for循环的对象 ,iterable。可以用isinstance()去判断一个对象是否为iterable对象

可作用于for循环的数据类型有2种:

  1. 集合数据类型, list tuple dict set string
  2. generator,包括生成器和带yield的generator function
from collections.abc import Iterable

print(isinstance([], Iterable))
print(isinstance((), Iterable))
print(isinstance('abcs', Iterable))
print(isinstance({'a': 1}, Iterable))
print(isinstance(1, Iterable))
print(isinstance((x for x in range(10)), Iterable))

迭代器 Iterator

可以被next()函数调用并不断返回下一个值的对象 叫迭代器(Iterator 对象)

from collections.abc import Iterator

print(isinstance('abc', Iterator))  # false
print(isinstance([], Iterator))  # false
print(isinstance({}, Iterator))  # false
print(isinstance((), Iterator))  # false
print(isinstance((x for x in range(10)), Iterator))  # True

l = (x for x in range(10))
print(next(l))
print(next(l))

# 转成Iterator对象
a = iter([1, 2, 3, 4, 5])
print(next(a))
print(next(a))

print('-' * 50)
print(isinstance(iter([]), Iterator))  # True
print(isinstance(iter(()), Iterator))  # True
print(isinstance(iter(''), Iterator))  # True
print(isinstance(iter({}), Iterator))  # True

小结

Iterable VS Iterator

你可能感兴趣的:(【Python】可迭代对象 vs 迭代器)