學(xué)習(xí)目標(biāo)
1卓起、掌握Iterable和Iterator的使用和區(qū)別。
Iterable和Iterator
可以直接作用于for循環(huán)的對象稱為可迭代對象:Iterable凹炸∠吩模可迭代對象有一種是集合數(shù)據(jù)類型,如list啤它、tuple奕筐、dict、set变骡、str等离赫,還有一種是generator,比如生成器和帶yield的generator function塌碌≡ㄐ兀可以使用isinstance()函數(shù)判斷對象是否是Iterable對象:
>>> from collections.abc import Iterable
>>> isinstance([], Iterable)? ? #list
True
>>> isinstance({}, Iterable)? ? #set
True
>>> isinstance((1,2), Iterable)? ? #dict
True
>>> isinstance('abc', Iterable)? ? #str
True
>>> isinstance((x for x in range(10)), Iterable)? ? #generator
True
>>> isinstance(100, Iterable)? ? #int不是可迭代對象
False
可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對象稱為迭代器:Iterator。生成器都是Iterator台妆◆崦停可以使用isinstance()函數(shù)判斷一個(gè)對象是否Iterator對象:
>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False
把list、str等Iterable變成Iterator可以使用iter()函數(shù):
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True