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圈 , 作者 小猿同學