迭代器
class MyIterator:
'''供可迭代对象 变成一个 迭代器'''
def __init__(self, mylist):
self.mylist = mylist
self.current = 0
def __next__(self):
current = self.current
self.current += 1
if current < len(self.mylist.items):
item = self.mylist.items[current]
return item
else:
raise StopIteration
def __iter__(self):
return self
可迭代对象
class MyList:
'''自定义一个可迭代对象'''
def __init__(self):
self.items = []
def add(self, value):
self.items.append(value)
def __iter__(self):
myIterator = MyIterator(self)
return myIterator
完整程序 及 运行结果
from collections.abc import Iterable, Iterator
class MyList:
'''自定义一个可迭代对象'''
def __init__(self):
self.items = []
def add(self, value):
self.items.append(value)
def __iter__(self):
myIterator = MyIterator(self)
return myIterator
class MyIterator:
'''供可迭代对象 变成一个 迭代器'''
def __init__(self, mylist):
self.mylist = mylist
self.current = 0
def __next__(self):
current = self.current
self.current += 1
if current < len(self.mylist.items):
item = self.mylist.items[current]
return item
else:
raise StopIteration
def __iter__(self):
return self
if __name__ == '__main__':
mylist = MyList()
print(isinstance(mylist, Iterable))
print(isinstance(mylist, Iterator))
mylist.add(1)
mylist.add(2)
mylist.add(3)
for i in mylist:
print(i)
print(" - " * 50)
print(isinstance(MyIterator(mylist), Iterator))
print(isinstance(MyIterator(mylist), Iterable))
for i in MyIterator(mylist):
print(i)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2952f98bc5197069f285f7c0a8cfcee5.png)
生成器-generator(支持next)
yield关键字
def fib(n):
current = 0
num1 = num2 = 1
while current < n:
num = num1
num1, num2 = num2, num1 + num2
current += 1
yield num
return 'done'
if __name__ == '__main__':
F = fib(10)
print(F)
print("*" * 50)
for i in range(10):
print(next(F), end=' ')
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ca201abd09816289c08eb03686757cd5.png)
send()函数 唤醒生成器的同时,向断点处传入一个附加数据
def gen():
i = 0
while i < 5:
temp = yield i
print(temp)
i += 1
if __name__ == '__main__':
g = gen()
print(next(g))
next(g)
print(next(g))
print(g.send("hello"))
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bee2b09753d9588c4153e6f90a0af706.png)