1. 程式人生 > 實用技巧 >07.1 迭代器、生成器

07.1 迭代器、生成器

# 迭代器
"""
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))