Python 程式札記 : 產生器(Generator)

2024/01/08閱讀時間約 3 分鐘

Python 產生器(Generator)是一種特殊的迭代器,能夠以更有效率的方式處理大量數據。本文將介紹產生器的基礎概念、使用方法,並提供實際應用範例

什麼是Python產生器?

產生器(Generator)是一種特殊類型的迭代器,指的是在函式裡使用到 yield 的函示,當函式執行到 yield 時,它會返回一個值並暫停執行,直到下一次呼叫。

def my_generator():
yield 1
yield 2
yield 3

gen = my_generator()

for value in gen:
print(value)

# 輸出結果會是:
1
2
3

產生器的優勢

  1. 節省儲存空間:產生器只在需要時才產生值,避免一次性加載所有數據到記憶體。
  2. 代碼簡潔:使用 yield,代碼更為簡潔,易於理解。

實際應用範例

1.生成無限數列

def infinite_sequence():
num = 0
while True:
yield num
num += 1

for i in infinite_sequence():
if i > 20:
break
print(i)

這個範例示範了如何使用產生器生成一個無限數列。它會不斷產生新的數字,直到達到某個條件(在此為 i > 20)時停止。

2.處理大型文件

def read_large_file(file_name):
with open(file_name, 'r') as file:
for line in file:
yield line

for line in read_large_file("large_file.txt"):
print(line)

這個範例中,read_large_file 函數逐行讀取文件,而不是一次性將整個文件加載到記憶體中,可以有效減少記憶體的使用。

3.產生器表示式

# squares = [x*x for x in range(10)]
# print(squares) 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
squares = (x*x for x in range(10))
# print(squares) 輸出: <generator object <genexpr> at 0x000001BE87E49A10>
for square in squares:
print(square)

Python 還提供了產生器表示式,類似於列表推導,差別在於將中括號[]改成小括號(),還有產生器表示式並不能直接列印出內容。


😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊

❤️按個愛心|💬留言互動|🔗分享此文|📌追蹤阿梧|☕請喝咖啡


51會員
82內容數
「梧笙」即「吾生」,意即我的生命,朋友都叫我「阿梧(Awu)」,高雄人。我喜歡學習新技能,從程式設計到網路工具,再到社群經營和影片剪輯。日常興趣是打遊戲、看動漫、讀小說和聽音樂。我會把這些興趣寫成文章,如果你有任何想法或問題,歡迎來信到我的郵箱 [email protected]
留言0
查看全部
發表第一個留言支持創作者!