答案页 · 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. 25正确答案
  2. 10
  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 道题。

练习本课