"""
1.迭代器(Iterator)是访问集合内元素的一种方式,一般用来遍历数据
2.迭代器和下标的访问方式不一样,迭代器是不能返回的,迭代器是提供一种惰性方式的数据方式
实现__iter__方法即为可迭代类型(Iterable)
3. __next__真正返回迭代值得逻辑
"""
from collections.abc import Iterator, Iterable
print(isinstance([1,2], Iterable))
print(isinstance([1, 2], Iterator))
a = iter("str")
print(isinstance(a, Iterator))
"""
1. 生成器函数,函数里面有yield关键字
2. python生成器/栈帧分配到堆内存,可控制整个函数的暂停/运行
3. 生成器的对象,也属于 Iterator 可以使用for循环
"""
def func():
print("123")
yield 1
print(3)
if __name__ == '__main__':
f = func()
for i in f:
print(i)
print(isinstance(f, Iterator))
import dis
print(dis.dis(func))