Pin-Jiun / Python

Python Document
0 stars 0 forks source link

19-Generator #19

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

python中可疊代的資料型態包刮string, list, set, dictionary 但上述的是靜態的疊代資料(需事先準備好), 如要動態產生疊代資料則需使用Generator

for 變數名稱 in 可疊代資料:
    將可疊代資料逐一取出

#生成器也是一個可疊代資料
for 變數名稱 in 生成器:
    將生成器產生的資料逐一取出
def test():
    yield 3
    yield 5

#呼叫function, 回傳生成器
gen=test()

print(gen)
for data in gen:
    print(data)
<generator object test at 0x000001BEB39C67C8>
3
5

function中只要使用到yield, 就會和普通的function運作方式不一樣

def test():
    print("階段1")
    yield 3
    print("階段2")
    yield 5

#呼叫function, 回傳生成器
gen=test()

此時output不會有任何結果 當執行到gen=test()時, 此時因為function中有yield, 只會進行產生生成器的工作(yield), 其他程式碼暫時不執行

def test():
    print("階段1")
    yield 3
    print("階段2")
    yield 5

#呼叫function, 回傳生成器
gen=test()

print(gen)
for data in gen:
    print(data)

此時搭配for迴圈後, 才會回頭看test()這個程式碼 output

<generator object test at 0x0000021E44B467C8>
階段1
3
階段2
5

實際應用

def generate_even(max_num):
    number=0
    while number<max_num:
        yield number
        number += 2

enev_generator = generate_even(100)

for data in enev_generator:
    print(data)