快速答案
本答案页包含 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 道题。