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)
复制代码

输出结果:

 

posted @   Avery_rainys  阅读(1657)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示