17、编写(或重写)这三个过滤函数以使用 @cache 装饰器。务必比较使用缓存和不使用缓存的过滤函数的性能。由于当我们使用简单的 @cache 装饰器时,原始的未缓存函数将不再可用,所以可以使用类似 func_c = cache(func) 的方式,这样我们可以同时保留原始的(未缓存)函数和带有缓存的对应函数。这样做可以让我们收集缓存和未缓存实现的计时数据。
要完成此任务,可按以下步骤操作:
- 编写或重写三个过滤函数,并使用
@cache
装饰器来包装低级别解析,如path.split('/')
函数,以提高效率。 - 为了比较使用缓存和不使用缓存的过滤函数的性能,可采用
func_c = cache(func)
的方式,这样能同时保留原始的未缓存函数和带有缓存的对应函数。 - 收集缓存和未缓存实现的计时数据。
18、在示例中对响应进行扩展,要求除了将结果数据序列化为 CSV 和 JSON 之外,还将其序列化为 XML。请说明实现 XML 序列化的方法以及还需要做什么来确保响应符合要求。
在相关示例中,要对响应进行扩展,使得结果数据除了能被序列化为 CSV
和 JSON
格式外,还能被序列化为 XML
格式。有两种实现方式:
- 下载安装能序列化
Series
和Pair
对象的库; - 编写可处理
list[dict[str, Any]]
对象的函数。
同时,为确保响应格式和内容符合预期,需要添加相应的测试用例。
19、在 RESTful API 示例中,要扩展响应,除了将结果数据序列化为 CSV 和 JSON 之外,还要将其序列化为 HTML。HTML 序列化比 XML 序列化更复杂,因为 HTML 数据呈现存在相当多的开销。通常不采用对 Pair 对象进行表示,而是包含一个完整的 HTML 表格结构,该结构与 CSV 的行和列相对应。同时,添加 HTML 序列化格式还需要添加测试用例,以确认响应具有预期的格式和内容。请说明具体操作步骤。
可按照以下步骤操作:
- 扩展 RESTful API 示例中的响应,使其除了支持 CSV 和 JSON 序列化格式外,还支持 HTML 序列化格式。
- 由于 HTML 数据呈现开销大,不采用对 Pair 对象的表示方式,而是包含完整的 HTML 表格结构,该结构要与 CSV 的行和列对应。
- 添加测试用例,以确保响应的格式和内容符合预期。
20、将递归函数重新定义为向下计数而非向上计数,在第二种情况中使用 [�, � - 1)。实现这一更改,并测量更改前后的性能,查看是否有性能影响。
可按以下思路操作:
- 将递归函数修改为向下计数逻辑
- 实现更改后使用 Python 的
timeit
模块测量原函数和修改后函数的性能 - 对比两者时间
以加法递归函数为例:
- 原函数:
add(a - 1, b + 1)
- 修改后可尝试:
add(a, b - 1)
等形式 - 再进行性能测试
21、重写 some_function() 函数。首先,为 some_function() 和 main() 创建一个测试套件,使用嵌入在文档字符串中的 doctest 套件。其次,重写 some_function() 函数,将 global_adjustment 变为一个参数,这将导致需要修改 main() 函数和所有测试用例。
- 要完成此任务:
1. 先为some_function()
和main()
编写测试套件;
2. 接着重写some_function()
,让global_adjustment
作为参数传入;
3. 同时相应修改main()
和测试用例。
22、文件Anscombe.txt几乎是有效的CSV格式文件,但开头有三行无用文本。对这些标题行中的值应用float()函数会引发ValueError异常。一些团队成员建议使用正则表达式检查值是否为有效数字,即“三思而后行”(LBYL)算法;另一些成员建议使用更简单的try语句来发现无效的非数字标题并丢弃它们,即“请求原谅比请求许可容易”(EAFP)算法。两种算法都可行。实现这两种变体后,哪种似乎更能表达过滤和获取数据的目的?
以下是调整为 Markdown 格式的文本内容:
`LBYL` 可完全依赖生成器表达式,但需编写识别所有可能浮点值的正则表达式;`EAFP` 需要单独函数实现 `try` 语句处理,也适合用生成器表达式或 `map()` 函数编写。