Python中可迭代對象怎麼獲取迭代器?
- 2019 年 10 月 6 日
- 筆記
公眾號新增加了一個欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合適,只希望這個面試欄目,給那些正在準備面試的同學,提供一點點幫助!
小猿會從最基礎的面試題開始,每天一題。如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和討論,大家是要一起學習的 。
廢話不多說,開始今天的題目:
問:說說Python中可迭代對象怎麼獲取迭代器?
答:今天這個問題,需要看下面代碼解析,再來說參考答案,這樣理解的看面試題,對大家的學習更有幫助,千萬別死記硬背,那樣記不牢的。
列表、元組、字典、字符串都是可迭代對象。
數字、布爾值都是不可迭代的。
昨天我們用了個簡單的列表來說迭代器的用法:
list = [1,2,3,4] # list是可迭代對象 lterator = iter(list) # 通過iter()方法取得list的迭代器 print(next(lterator)) # 1 通過next()獲取下一個位置的值 print(next(lterator)) # 2 print(next(lterator)) # 3 print(next(lterator)) # 4 輸出: 1 2 3 4
也給大家預留了個問題,列表怎麼可以有一個迭代器?今天就要重點來說說這個問題 。
import collections print(isinstance([1, 2, 3], collections.Iterable)) #isinstance(object,classinfo)內置函數可以判斷一個對象是否是一個已知的類型 輸出: True
從上面代碼可以知道,可迭代對象都是collections模塊里的Iterable類創建出來的實例。你寫一個列表,不是簡單一個列表,其實它就是Iterable類創建的實例對象。點進Iterable的類看一下:
class Iterable(metaclass=ABCMeta): __slots__ = () @abstractmethod def __iter__(self): # 注意點 while False: yield None
原來由Iterable創建的對象,是有一個方法__iter__(self)的。這個方法就是返回一個迭代器的。所以,由Iterable類創建的實例對象,是可以拿出一個迭代器的。
如果對於參考答案有不認同的,大家可以在評論區指出和補充,歡迎留言!
文章轉載自公眾號
程序IT圈 , 作者 小猿同學