【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

C5 一等函数

5.2 高阶函数

自测

1. 什么是高阶函数?请举python中内置的高阶函数例子

答案

1. 接受函数为参数,或者把函数作为结果返回的函数是高阶函数(higher-order function)。 map 、 filter 、 reduce 和 apply 。 apply 函数在 Python 2.3 中标记为过时,在 Python 3 中移除了,因为不再需要它了。

5.2 高阶函数

自测

1. 什么是高阶函数?请举python中内置的高阶函数例子
2. 马赛克返回的是A还是B?
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

3. map 、 filter 和 reduce 的现代替代品是什么?

答案

1. 接受函数为参数,或者把函数作为结果返回的函数是高阶函数(higher-order function)。map 、sorted函数就是一例。

2. A。sorted函数的功能是对迭代对象的排序。
自定义函数返回的是字符串的逆转,放在迭代对象这个大整体中就是对象的逆转,无需再排序,因为逆转本身就是一种再排序。
如果以下案例是对返回的长度,放在代对象这个大整体中就是对象的长度统计,这里就做了排序,因为本身没有再排序。

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

3.
map 和 filter 返回生成器(一种迭代器),因此现在它们的直接替代品是生成器表达式(在 Python 2 中,这两个函数返回列表,因此最接近的替代品是列表推导)
在 Python 2 中, reduce 是内置函数,但是在 Python 3 中放到 functools 模块里了。这个函数最常用于求和,自 2003 年发布的 Python 2.3 开始,最好使用内置的 sum 函数。在可读性和性能方面,这是一项重大改善

5.3 匿名函数

自测

1. 你在什么情况下见的匿名函数最多

答案

1. 除了作为参数传给高阶函数之外,Python 很少使用匿名函数。由于句法上的限制,非平凡的 lambda 表达式要么难以阅读,要么无法写出。

5.4 可调用对象

自测

1. 如果想判断对象能否调用,用什么方法?

答案

1.

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

5.5 用户定义的可调用类型

自测

1. __call__方法在类中有什么作用

答案

1. 创建了函数类对象的简便方式。但使用时,应此时必须在内部维护一个状态,让
它在调用之间可用,例如 BingoCage 中的剩余元素。维护状态后文会说到,有比如用装饰器、闭包方法可做到。
如下图,实例化对象就可以像函数一样使用,使用callable()调用值为True:
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
现在我将它注释了,请观察区别
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

5.7 从定位参数到仅限关键字参数

补充

书上的例子是为了展示在函数中同时存在【流畅的python】笔记(C5一等函数)自测知识点和书籍补充会传入什么参数,但例子太复杂,我简化了一下

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
这里的cls就称作:仅限关键字参数。 cls 参数只能通过关键字参数指定,它一定不会捕获未命名的定位参数。定义函数时若想指定仅限关键字参数,要把它们放到前面有 * 的参数后面。
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

5.9 函数注解

自测

1. 函数注解的内容存在在哪个属性里?

答案

1. 注解不会做任何处理,只是存储在函数的 annotations 属性(一个字典)中

【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

5.10 支持函数式编程的包

5.10.1  operator 模块

自测

1.能替代从序列中取出元素或读取对象属性的 lambda 表达式的方法?

答案

1.
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

5.10.2 使用 functools.partial 冻结参数

自测

1. functools.partial作用是?
2. functools.partialmethod 与 functools.partial区别

答案

1. functools.partial 这个高阶函数用于部分应用一个函数。部分应用是指,基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。使用这个函数可以把接受一个或多个参数的函数改编成需要回调的 API,这样参数更少。
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充
【流畅的python】笔记(C5一等函数)自测知识点和书籍补充

2. 第一个是处理方法的,第二个是处理函数的。