建構一個產生器
在前面的練習中,你主要撰寫的是使用推導式語法的產生器表達式。能用推導式來寫產生器表達式,確實讓工作變得容易許多!
接著回想影片內容:不只有產生器表達式,還有「產生器函式」。「產生器函式」和產生器表達式一樣,會逐一產生一連串的值,而不是只回傳單一值。定義產生器函式時的方式與一般函式相同,但每當要產生一個值時,會使用關鍵字 yield,而不是 return。
在這個練習中,你要建立一個產生器函式,其運作方式與你在前一題定義的產生器表達式相似:
lengths = (len(person) for person in lannister)
本練習屬於課程
Python 工具箱
練習說明
- 完成函式
get_lengths()的函式標頭,該函式只有一個參數input_list。 - 在函式定義中的
for迴圈裡,使用yield產生input_list中各字串的「長度」。 - 完成用來列印由
get_lengths()產生器函式所產生數值之for迴圈的可疊代部分。呼叫get_lengths(),並傳入清單lannister。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Create a list of strings
lannister = ['cersei', 'jaime', 'tywin', 'tyrion', 'joffrey']
# Define generator function get_lengths
def ____:
"""Generator function that yields the
length of the strings in input_list."""
# Yield the length of a string
for person in input_list:
____
# Print the values generated by get_lengths()
for value in ____:
print(value)