可迭代对象和迭代器
1、只要一个对象定义了__iter__()方法,那么它就是可迭代对象,iter()这个方法内什么都不用写
2、如果一个对象同时实现了__iter__()和__next()__()方法,那么它就是迭代器。
from collections.abc import Iterable,Iterator
class A:
def __iter__(self):
pass
def __next__(self):
pass
print('A是可迭代对象吗?',isinstance(A(),Iterable))
print('A是迭代器吗?',isinstance(A(),Iterator))
class B:
def __iter__(self):
pass
print('B是可迭代对象吗?',isinstance(B(),Iterable))
print('B是迭代器吗?',isinstance(B(),Iterator))
执行结果
生成器
生成器是特殊的迭代器
每次执行到yield都会暂停
def fun(n):
while n < 100000:
m=yield n # 调用a.send(100) 给m赋值100,调用next(a)是不会给m赋值
n+=1
print(n)
print('m的值:',m)
a=fun(0)
# for i in a: # 这里for循环可以遍历可迭代对象,迭代器
# print(i)
next(a)
next(a)
next(a)
next(a)
a.send(100)
执行结果