LawsonAbs的认知与思考,还请各位读者批判阅读。
总结
- 文章来源:csdn:LawsonAbs
- 持续更新~
1.区别和相同点
1.1 区别
简单来说:
- 可以直接作用于for循环的对象统称为可迭代对象,即
Iterable
;Iterable
只有__iter__
函数 - 可以作用于
__next__
函数(既然能作用于__next__
函数,那么就一定有__iter__
函数,否则没有意义)的对象都是Iterator对象 Iterator
类是Iterable
的子类,可在doc文档中查找到相关说明。
二者在实现上的区别就超级简单了:iterator
有__iter__
和__next__
方法,而iterable
只有__iter__
方法。看下面的例子:
"""iterator和iterable 的比较
"""
from collections.abc import Iterable,Iterator
# 定义一个类
class A :
def __iter__(): pass
def __next__(): pass
class B:
def __iter__(): pass
class C:
def __next__(): pass
a = A()
b = B()
c = C()
print(isinstance(a,Iterable)) #True
print(isinstance(a,Iterator)) #True
print(isinstance(b,Iterable)) #True
print(isinstance(b,Iterator)) #False
print(isinstance(c,Iterable)) #False
print(isinstance(c,Iterator)) #False
1.2 相同点
- 二者都是抽象基类
- 二者的子类都必须实现
__iter__()
方法
1. iterable
2.iterator
3.参考文档
- https://docs.python.org/zh-cn/3.7/glossary.html#term-iterator
- https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640