Python中的可迭代對象


 可迭代對象的概念及其使用:

  可迭代對象,即可以進行迭代操作的一類對象。

  迭代是訪問集合元素的⼀種⽅式。迭代器是⼀個可以記住遍歷的位置的對象。迭代器對象從集合的第⼀個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
  迭代是對元素進行的一種遍歷,python語法  for element in Iterable: 

判斷一個對象可迭代:

  用isinstance(Object, Iterable)判斷一個對象是否是Iterable對象:

 1 from collections import Iterable 
 2 # 使⽤isinstance() 函數檢測某個對象是否是⼀個可迭代的對象 
 3 
 4 # 列表是可迭代對象 
 5 result = isinstance([1,2], Iterable) 
 6 print(result)
 7  
 8 # 元組是可迭代對象 
 9 result = isinstance((1,2), Iterable) 
10 print(result) 
11 
12 # 字符串是可迭代對象 
13 result = isinstance("hello", Iterable) 
14 print(result) 
15 
16 # 字典是可迭代對象
17  result = isinstance({"a": 10, "b": 100}, Iterable) 
18 print(result) 
19 
20 # 數字不是可迭代對象 
21 result = isinstance(100, Iterable) 
22 print(result)

可迭代對象是實現:

  可迭代對象的本質是,構造對象的類中含有__iter__()方法,該方法返回一個可迭代對象。在python的內置語法中,執行可迭代對象的迭代操作都是調用__iter__()方法獲取一個可迭代對象,然后通過該對象的__next__()來獲取該對象的相關數據。

  

 1 from collections.abc import Iterable
 2 
 3 
 4 class MyList(object):
 5     def __init__(self):
 6         self.item = list()
 7 
 8     def addItem(self, data):
 9         self.item.append(data)
10 
11     def __iter__(self):
12         print('調用MyList_iter方法')
13         mylist_iterator = MyListIterator(self.item)
14         return mylist_iterator
15 
16 
17 class MyListIterator(object):
18     def __init__(self, item):
19         self.item = item
20         self.current_index = 0
21 
22     # def __iter__(self):
23     #     pass
24 
25     def __next__(self):
26         print('調用MyListIterator_next方法')
27         if self.current_index < len(self.item):
28             data1 = self.item[self.current_index]
29             self.current_index += 1
30             return data1
31         else:
32             raise StopIteration
33 
34 
35 if __name__ == '__main__':
36     mylist = MyList()
37     mylist.addItem("張三")
38     mylist.addItem("李四")
39     mylist.addItem("王五")
40     for value in mylist:
41         print(value)
42     result = isinstance(mylist, Iterable)
43     print(result)

輸出結果:

  

  • 當調⽤iter(迭代器對象)時,會調⽤對象的 __iter__() ⽅法
  • 當調⽤next(迭代器對象)時,會調⽤對象的 __next__() ⽅法

  for...in...循環的實現過程:

    for item in Iterable 循環的本質就是先通過iter()函數獲取可迭代對象Iterable的迭代器,然后對獲取到的迭代器不斷調⽤next()⽅法來獲取下⼀個值並將其賦值給item,當遇到StopIteration的異常后循環結束。

  文件對象也是一個可迭代對象:

1     try:
2         with open('cal_time.py', 'r', encoding='utf-8') as f:
3             # print(f.read(1024))
4             print(f)
5             for i in f:
6                 print(i)
7                 print('-------')
8     except Exception as e:
9         print(e)

輸出結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM