微信号:infoqchina

介绍:有内容的技术社区媒体

想在Python中进行函数式编程?不妨试试Fn.py

2013-03-14 16:09 InfoQ

Python是门多范型语言,所以你可以在某种程度上把它当做函数式语言来用。函数式编程风格有很多好处:

  • 形式上可证

  • 模块性

  • 组合性

  • 易于调试及测试

但是呢,由于Python它毕竟不是函数式语言,这导致在你尝试在Python中编写可读同时又可维护的函数式代码时,你会很快发现诸多问题。

Fn.py类库就是为了应对这些问题而诞生的。

在Python中创建Lambda函数的语法非常冗长,来比较一下:

Python
map(lambda x: x*2, [1,2,3])

Scala
List(1,2,3).map(_*2)

Clojure
(map #(* % 2) '(1 2 3))

Haskell
map (2*) [1,2,3]

受Scala的启发,Fn.py提供了一个特别的_对象以简化Lambda语法。
from fn import _

assert (_ + _)(10, 5) = 15
assert list(map(_ * 2, range(5))) == [0,2,4,6,8]
assert list(filter(_ < 10, [9,10,11])) == [9]

除此之外还有许多场景可以使用_:所有的算术操作、属性解析、方法调用及分片算法。

这个类库还有很多其他的功能。如果你觉得它看起来还行,不妨深入了解一下。


点击“阅读原文”查看更多内容并吐槽吧。

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 一位大神级别程序员的工作总结 苦尽甘未来 30秒钟评价一个网页的好坏 Bugtags 创业一年总结 简单易懂的区分HTTP、Socket与TCP