Python之迭代器

1.如果有重载__iter__方法则表示类是一个Iterable

2.如果有重载__next__方法则表示类是一个Iterator

3.可以使用isinstance(obj, Iterable)和isinstance(obj, Iterator)来判断一个实例是否是Iterable和Iterator

复制代码
 1 from collections import Iterable
 2 from collections import Iterator
 3 import time
 4 
 5 
 6 class MyIterable:
 7     """
 8     类的注释
 9     """
10     def __init__(self):
11         self.names = list()
12         self.__ind = 0
13 
14     def add(self, name):
15         self.names.append(name)
16 
17     def __iter__(self):
18         # return MyIterator(self)
19         return self
20 
21     def __next__(self):
22         print('return from MyIterable::__next__')
23         if len(self.names) > self.__ind:
24             ret = self.names[self.__ind]
25             self.__ind += 1
26             return ret
27         else:
28             raise StopIteration
29 
30 
31 # class MyIterator():
32 #     """
33 #     类的注释
34 #     """
35 #     def __init__(self, iterable):
36 #         self.iterable = iterable
37 #         self.__ind = 0
38 #
39 #     # def __iter__(self):
40 #     #     pass
41 #
42 #     def __next__(self):
43 #         print('return from MyIterator::__next__')
44 #         if len(self.iterable.names) > self.__ind:
45 #             ret = self.iterable.names[self.__ind]
46 #             self.__ind += 1
47 #             return ret
48 #         else:
49 #             raise StopIteration
50 
51 
52 def main():
53     iterable = MyIterable()
54     iterable.add('python')
55     iterable.add('cpp')
56     iterable.add('csharp')
57 
58     # iterator = MyIterator()
59 
60     # print(isinstance(iterable, Iterable))
61     # print(isinstance(iterator, Iterator))
62 
63     # print(next(iterator))
64 
65     for name in iterable:
66         print(name)
67         time.sleep(1)
68 
69 
70 if __name__ == '__main__':
71     main()
复制代码

 

posted @   非法关键字  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示