一、什么是一等函数
- 运行时创建
- 作为变量传给函数
- 作为函数的结果返回
- 能赋值给变量或数据结构中的元素
二、把函数视为对象
- doc 是函数对象众多属性中的一个。
- 是 function 类的实例。 type() 查看是哪个类。
三、高阶函数
接受函数为参数,或者把函数作为结果返回的函数是高阶函数(higherorder-function)
- map
- filter
- reduce
- sorted
四、可调用的对象
不仅 Python 函数是真正的对象,任何 Python 对象都可以表现得像函数。为此,只需实现实例方法 call。调用类时会运行类的 new 方法创建一个实例,然后运行__init__ 方法,初始化实例,最后把实例返回给调用方。
- 类的实例 如果类定义了 call 方法,那么它的实例可以作为函数调用。
- 如果想判断对象能否调用,可以使用内置的 callable() 函数。
import random
class BingoCage:
"""
这个类的实例使用任何可迭代对象构建,
而且会在内部存储一个随机顺序排列的列表。
调用实例会取出一个元素。
"""
def __init__(self, items):
self._items = list(items)
random.shuffle(self._items)
def pick(self):
try:
return self._items.pop()
except IndexError:
raise LookupError('pick from empty BingoCage')
def __call__(self):
return self.pick()
bingo = BingoCage(range(3))
bingo.pick()
bingo()
# bingo.pick() 的快捷方式是 bingo()
callable(bingo)
五、 支持函数式编程的包
- operator 模块
- 使用functools.partial冻结参数