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