可爱的 Python : Python中的函数式编程,第三部分

368 查看

英文原文:Charming Python: Functional programming in Python, Part 3,翻译:开源中国

摘要:  作者David Mertz在其文章《可爱的Python:“Python中的函数式编程”》中的第一部分第二部分中触及了函数式编程的大量基本概念。本文中他将继续前面的讨论,解释函数式编程的其它功能,如currying和Xoltar Toolkit中的其它一些高阶函数。

表达式绑定

有一位从不满足于解决部分问题读者,名叫Richard Davies,提出了一个问题,问是否可以将所有的绑定全部都转移到一个单个的表达式之中。首先让我们简单看看,我们为什么想这么做,然后再看看由comp.lang.python中的一位朋友提供的一种异常优雅地写表达式的方式。

让我们回想一下功能模块的绑定类。使用该类的特性,我们可以确认在一个给定的范围块内,一个特定的名字仅仅代表了一个唯一的事物。
具有重新绑定向导的 Python 函数式编程(FP)

绑定类在一个模块或者一个功能定义范围内做这些我们希望的事情,但是没有办法在一条表达式内使之工作。然而在ML家族语言(译者注:ML是一种通用的函数式编程语言),在一条表达式内创建绑定是很自然的事。
Haskell 命名绑定表达式

Greg Ewing 发现用Python的list概念实现同样的效果是有可能的;甚至我们可以用几乎与Haskell语法一样干净的方式做到。
Python 2.0+ 命名绑定表达式

在列表解析(list comprehension)中将表达式放入一个单项元素(a single-item tuple)中的这个小技巧,并不能为使用带有表达式级绑定的高阶函数提供任何思路。要使用这样的高阶函数,还是需要使用块级(block-level)绑定,就象以下所示:
Python中的使用块级绑定的’map()’

这样真不错,但如果我们想使用函数map(),那么其中的绑定范围可能会比我们想要的更宽一些。然而,我们可以做到的,哄骗列表解析让它替我们做名字绑定,即使其中的列表并不是我们最终想要得到的列表的情况下也没问题:
从Python的列表解析中“走下舞台”