答案頁 · 12 道題

Python 生成器練習答案

本頁彙整 Python 生成器 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python 生成器 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

生成器函式裡的 yield 會做什麼?

  1. 刪除函式
  2. 暫停並產生一個值正確答案
  3. 把結果轉換成列表
  4. 立刻拋出 StopIteration

答案: 暫停並產生一個值

為什麼: yield 把一個值交給呼叫方,並暫停函式。

02 · 選擇題

程式碼的輸出結果是什麼?

def gen():
    yield 1
    yield 2
print(list(gen()))
  1. <generator object>
  2. [0, 1]
  3. [1, 2]正確答案
  4. 1 2

答案: [1, 2]

為什麼: list 會消費兩個 yield 出來的值並建構列表。

03 · 選擇題

呼叫生成器函式會回傳什麼?

  1. 生成器物件正確答案
  2. 包含全部值的列表
  3. 第一個 yield 的值
  4. None

答案: 生成器物件

為什麼: 只有推進生成器時函式體才會執行。

04 · 選擇題

next() 到達生成器末尾時會發生什麼?

  1. 拋出 StopIteration正確答案
  2. 拋出 ValueError
  3. 重新啟動生成器
  4. 永遠回傳 None

答案: 拋出 StopIteration

為什麼: StopIteration 表示生成器已經沒有更多值。

05 · 填空題

補全一次產生一個值的關鍵字。

def one():
    ____ 1
print(next(one()))

答案: yield

為什麼: yield 會產生一個值並暫停函式。

06 · 填空題

補全取出下一個值的內建函式。

def one():
    yield 1
value = ____(one())
print(value)

答案: next

為什麼: next 會向生成器請求下一個值。

07 · 填空題

補全把生成器變成列表的函式。

def gen():
    yield 1
print(____(gen()))

答案: list

為什麼: list 會消費生成器並生成列表。

08 · 填空題

補全消費這些平方值的函式。

print(____(n * n for n in range(4)))

答案: sum

為什麼: sum 會把生成器表達式產生的每個值相加。

09 · 輸出預測

螢幕上會顯示什麼?

print(list(n for n in range(3)))

答案: [0, 1, 2]

為什麼: 生成器表達式產生 0、1、2,list 把它們收集起來。

10 · 輸出預測

這段程式碼會輸出什麼?

def g():
    yield "a"
print(next(g()))

答案: a

為什麼: next 取出第一個 yield 的字串 a。

11 · 輸出預測

執行結果是什麼?

def g():
    yield 1
    yield 2
x = g()
print(next(x), next(x))

答案: 1 2

為什麼: 兩次 next 呼叫分別回傳一和二,列印在同一行。

12 · 輸出預測

這段程式列印出什麼?

def g():
    for n in range(3):
        yield n * 2
print(list(g()))

答案: [0, 2, 4]

為什麼: 生成器產生 0、2、4,list 顯示這些值。

先試一遍題目

打開 Python 生成器 練習頁,用即時回饋回答同樣的 12 道題。

練習本課