07.1 迭代器、生成器

# 迭代器
"""
1.迭代器(Iterator)是访问集合内元素的365体育投注方式,一般用来遍历数据
2.迭代器和下标的访问方式不一样,迭代器是不能返回的,迭代器是提供365体育投注惰性方式的数据方式
实现__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))

posted @ 2020-12-27 20:25  zy7y  阅读(30)  评论(0编辑  收藏