一说起函数式编程语言,脱口而出的就是lisp、haskell、erlang,一说起python的函数式,脑袋里第一反应就是map、filter、reduce。可函数式只是编程范式而已,其具体实现的语言或者语言点只是载体而已,更应该在方法论上考虑和使用函数式。
函数式几大规范,其本质是stateless。state包括两个方面,函数内的state和函数外的state。函数内的state,比如一个addOne函数, 输入1,返回的永远是2,不能在函数内有缓存变量来影响输入与输出的映射;函数外的state,同样是addOne函数,不能在运算的过程中需要读取函数外的某定植或者变量,更不允许addOne在调用过程中修改函数外的某变量。stateless让函数的执行过程与外界无关,与自身无关,所以可以心无旁骛的执行固有操作,这是并行的基础。
python开发中,并不会有stateless的限制,但是既然知道了函数式的好处,也完全可以应用。比如,定义一个新的函数(甚或模块,甚或是一个独立进程,本质没有区别),要切分合理,执行过程足够内聚且不依赖于外部状态,不用缓存内部状态,若有一天性能需求要求在IO处多线程整改结构,该函数可以直接被多线程调用,而不用担心线程间同步的问题。甚或,假定一个复杂的函数需要在另一个项目中被二次使用(一个程序员不能充分利用自己之前的代码简直是一种耻辱),那也可以简单copy就可以使用,而不用关心这部分代码所出的环境及与环境的依赖。
函数式只是一个编程范式,上升一点就是一个思考问题解决问题的范式,也就是一种方法论。而只有方法且仅只有方法,才是是最坚固的轮子。