可爱的 Python: 在 Python 中进行函数编程,第 3 部分
2008-11-13 13:19:33 来源:WEB开发网有个诀窍是把表达式放在列表理解的单项元组里,但是并不能提供任何使用表达层次绑定来处理高阶函数的方法。为了使用高阶函数,我们仍然需要使用块层次的绑定,如下所示:
清单 4:带有 'map()' 的 Python 块级别绑定
>>> list_of_list = [[1,2,3],[4,5,6],[7,8,9]]
>>> let = Bindings()
>>> let.car =
lambda
l: l[0]
>>> map(let.car,list_of_list)
[1, 4, 7]
不错,但是如果我们使用 map() ,绑定的范围仍旧比我们期望的要扩大了一点。虽然如此,即便在列表不是我们最终想使用的情况下,耐心地使用列表理解来为我们做名字绑定也是可能的:
清单 5:Python 列表理解的“逐级下降”
# Compare Haskell expression:
# result = func car_car
# where
# car (x:xs) = x
# car_car = car (car list_of_list)
# func x = x + x^2
>>> [func
for
x
in
list_of_list
...
for
car
in
(x[0],)
...
for
func
in
(car+car**2,)][0]
2
我们已经完成了 list_of_list 中基于第一个元素的算术运算,而且同时命名了那个算术计算(但只是在表达式的范围内)。作为“优化”,我们大可不必去创建一个比开始的元素更长的列表,因为我们用最后的索引 0 来选择唯一的第一个元素:
更多精彩
赞助商链接