快速答案
本答案頁包含 Python functools 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。
答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。
lru_cache 會做什麼?
答案: 按參數值快取結果
為什麼: 參數相同的重複呼叫可以復用已儲存的結果。
partial 回傳什麼?
答案: 一個固定了部分參數的新可呼叫物件
為什麼: partial 儲存參數,並等待剩餘參數。
reduce 會做什麼?
答案: 把可迭代物件摺疊成一個值
為什麼: reduce 會累積應用一個二元函式。
這段程式列印出什麼?
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(5))答案: 25
為什麼: partial 把 exponent 固定為 2,於是呼叫變成 power(5, 2)。
補全快取裝飾器的匯入。
from functools import ____答案: lru_cache
為什麼: lru_cache 是 functools 中的記憶化裝飾器。
補全固定參數的函式。
from functools import partial
def power(base, exponent):
return base ** exponent
square = ____(power, exponent=2)答案: partial
為什麼: partial 會建立一個專門化的可呼叫物件。
補全摺疊函式。
from functools import reduce
print(____(lambda a, b: a + b, [1, 2, 3], 0))答案: reduce
為什麼: reduce 會從左到右合併值。
補全快取大小參數。
from functools import lru_cache
@lru_cache(____=None)
def square(n):
return n * n答案: maxsize
為什麼: maxsize=None 讓快取不設固定上限。
程式碼的輸出結果是什麼?
from functools import lru_cache
@lru_cache(maxsize=None)
def f(n):
return n * 2
print(f(2) + f(2))答案: 8
為什麼: 兩次呼叫都回傳四,所以和是八;第二次呼叫復用了快取結果。
螢幕上會顯示什麼?
from functools import partial
def add(a, b):
return a + b
add5 = partial(add, 5)
print(add5(3))答案: 8
為什麼: partial 把第一個參數固定為五,所以結果是八。
這段程式碼會輸出什麼?
from functools import reduce
print(reduce(lambda a, b: a * b, [2, 3, 4]))答案: 24
為什麼: 乘法累積的結果是二十四。
執行結果是什麼?
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 道題。