Functional Programming(函数式编程) 的概念最早起源于 LISP,由约翰 · 麦卡锡在 1958 年创立,最早提出了自动垃圾回收的理念,这一理念现在也被 Python/Java/Ruby 等多种语言借鉴。发展到今天,LISP 已经衍生出了多种方言,比如 Scheme/Hashkell/Erlang/Clojure 等。相比面向对象编程,函数式编程的一大优势就是 Immutable Data(数据不可变),就是不依赖于外部的数据,而且也不改变外部数据的值,这种思想可以大大减少我们代码的 Bug,而且函数式编程也支持我们像使用变量一样使用函数。Python 作为面向对象语言,也提供了对于函数式编程的支持,虽然并不是那么纯粹,而且也不支持尾递归优化。