答案頁 · 12 道題

Python functools練習答案

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

快速答案

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

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

01 · 選擇題

lru_cache 會做什麼?

  1. 刪除舊函式
  2. 給參數排序
  3. 並行執行函式
  4. 按參數值快取結果正確答案

答案: 按參數值快取結果

為什麼: 參數相同的重複呼叫可以復用已儲存的結果。

02 · 選擇題

partial 回傳什麼?

  1. 參數列表
  2. 一個固定了部分參數的新可呼叫物件正確答案
  3. 一個類
  4. 函式呼叫的結果

答案: 一個固定了部分參數的新可呼叫物件

為什麼: partial 儲存參數,並等待剩餘參數。

03 · 選擇題

reduce 會做什麼?

  1. 去重
  2. 建立字典
  3. 把可迭代物件摺疊成一個值正確答案
  4. 排序可迭代物件

答案: 把可迭代物件摺疊成一個值

為什麼: reduce 會累積應用一個二元函式。

04 · 選擇題

這段程式列印出什麼?

from functools import partial
def power(base, exponent):
    return base ** exponent
square = partial(power, exponent=2)
print(square(5))
  1. 10
  2. 25正確答案
  3. 5
  4. 7

答案: 25

為什麼: partial 把 exponent 固定為 2,於是呼叫變成 power(5, 2)。

05 · 填空題

補全快取裝飾器的匯入。

from functools import ____

答案: lru_cache

為什麼: lru_cache 是 functools 中的記憶化裝飾器。

06 · 填空題

補全固定參數的函式。

from functools import partial
def power(base, exponent):
    return base ** exponent
square = ____(power, exponent=2)

答案: partial

為什麼: partial 會建立一個專門化的可呼叫物件。

07 · 填空題

補全摺疊函式。

from functools import reduce
print(____(lambda a, b: a + b, [1, 2, 3], 0))

答案: reduce

為什麼: reduce 會從左到右合併值。

08 · 填空題

補全快取大小參數。

from functools import lru_cache
@lru_cache(____=None)
def square(n):
    return n * n

答案: maxsize

為什麼: maxsize=None 讓快取不設固定上限。

09 · 輸出預測

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

from functools import lru_cache
@lru_cache(maxsize=None)
def f(n):
    return n * 2
print(f(2) + f(2))

答案: 8

為什麼: 兩次呼叫都回傳四,所以和是八;第二次呼叫復用了快取結果。

10 · 輸出預測

螢幕上會顯示什麼?

from functools import partial
def add(a, b):
    return a + b
add5 = partial(add, 5)
print(add5(3))

答案: 8

為什麼: partial 把第一個參數固定為五,所以結果是八。

11 · 輸出預測

這段程式碼會輸出什麼?

from functools import reduce
print(reduce(lambda a, b: a * b, [2, 3, 4]))

答案: 24

為什麼: 乘法累積的結果是二十四。

12 · 輸出預測

執行結果是什麼?

from functools import lru_cache
@lru_cache(maxsize=None)
def f(n):
    return n + 1
f(1)
f(1)
print(f.cache_info().hits)

答案: 1

為什麼: 第二次呼叫命中快取,所以 hits 為一。

先試一遍題目

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

練習本課