表 14-6 中的函数都接受一个可迭代的对象,然后返回单个结果。这些函数叫“归约”函数、“合拢”函数或“累加”函数。其实,这里列出的每个内置函数都可以使用functools.reduce
函数实现,内置是因为使用它们便于解决常见的问题。此外,对 all
和
any
函数来说,有一项重要的优化措施是 reduce
函数做不到的:这两个函数会短路(即一旦确定了结果就立即停止使用迭代器)。
例子:
还有一个内置的函数接受一个可迭代的对象,返回不同的值——sorted
。reversed
是生成器函数,与此不同,sorted
会构建并返回真正的列表。毕竟,要读取输入的可迭代对象中的每一个元素才能排序,而且排序的对象是列表,因此 sorted
操作完成后返回排序后的列表。我在这里提到 sorted
,是因为它可以处理任意的可迭代对象。
当然,sorted
和这些归约函数只能处理最终会停止的可迭代对象。否则,这些函数会一直收集元素,永远无法返回结果。