可爱的 Python: 在 Python 中进行函数编程,第 3 部分
2008-11-13 13:19:33 来源:WEB开发网清单 6:列表理解的有效逐级下降
>>> [func for x in list_of_list[:1]
... for car in (x[0],)
... for func in (car+car**2,)][0]
2
高阶函数:Curry
有三个最普通的高阶函数内建在 Python 中: map() 、 reduce() 和 filter() 。这些函数所做的 -- 也是我们称之为“高阶”的原因 -- 是把其他的函数作为他们的(一些)参数。其它的高阶函数(不是这些内建函数)返回函数对象。
Python 总是通过第一类函数对象的地位优势赋予使用者建造他们自己的高阶函数的能力。以下是一个小示例:
清单 7:小 Python 函数工厂
>>>
def
foo_factory
():
...
def
foo
():
...
print
"Foo function from factory"
...
return
foo
...
>>> f = foo_factory()
>>> f()
Foo function from factory
我在这个系列的 第 2 部分讨论过 Xoltar 工具包,它是带有高阶函数的非常好的集合。Xoltar 的 functional 模块提供的大多数函数是从各种传统的函数语言发展而来的,并且它们的有效性在这么多年已经被证实了。
可能最著名的和最重要的高阶的函数是 curry() 。 curry() 是以逻辑学家 Haskell Curry 命名的,他的名字也曾命名上面提到的编程语言。"currying" 优越的地方在于它能够象对待一个局部参数函数那样处理(几乎)每一个函数。所有对于 Curry 有必要做的就是容许函数的返回值对于它们自己也是函数,但是带有返回的函数可能是“狭窄”的或者“接近完成”的。这项工作和我所写的 第 2 部分有些相近 -- 每次连续的调用 curried 返回函数“充满”了在最后计算中的更多数据(数据依附于过程)。
更多精彩
赞助商链接