可爱的 Python: 在 Python 中进行函数编程,第 3 部分
2008-11-13 13:19:33 来源:WEB开发网Bindings 类在一个模块或者函数 def 的范围之内完成我们想要的功能,但是在一个单独的表达式内无法使其工作。然而,在 ML-系列语言中,就能很自然地在单个表达式内创建绑定:
清单 2:Haskell 表达式级别的名称绑定
-- car (x:xs) = x -- *could* create module-level binding
list_of_list = [[1,2,3],[4,5,6],[7,8,9]]
-- 'where' clause for expression-level binding
firsts1 = [car x | x <- list_of_list] where car (x:xs) = x
-- 'let' clause for expression-level binding
firsts2 = let car (x:xs) = x in [car x | x <- list_of_list]
-- more idiomatic higher-order 'map' technique
firsts3 = map car list_of_list where car (x:xs) = x
-- Result: firsts1 == firsts2 == firsts3 == [1,4,7]
Greg Ewing 注意到使用 Python 的列表理解可以达到同样的效果;我们甚至可以用象 Haskell 的语法那样清楚的方法来做:
清单 3:Python 2.0+ 表达式级别名称绑定
>>> list_of_list = [[1,2,3],[4,5,6],[7,8,9]]
>>> [car_x
for
x
in
list_of_list
for
car_x
in
(x[0],)]
[1, 4, 7]
更多精彩
赞助商链接