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