| 言外之意是,在实践中为了更具体直白地表达出业务,可能不需要进一步抽象成 pluck()。 print pipeline_each(bands, [call(lambda x: 'Canada', 'country'),                             call(lambda x: x.replace('.', ''), 'name'),                             call(str.title, 'name'),                             pluck(['name', 'country'])]) 
 练习5: pluck()输入是要从每条记录中提取键的列表。试着实现一下。它会是一个高阶函数。 我的实现方案: 现在开始我们可以做什么?def pluck(keys):     def pluck_fn(record):         return reduce(lambda a, x: assoc(a, x, record[x]),                       keys,                       {})     return pluck_fn 
 函数式代码与其他风格的代码可以很好地共存。本文中的转换实现可以应用于任何语言的任何代码库。试着应用到你自己的代码中。 想想特工玛丽、伊丝拉和山姆。转换列表迭代为 map和reduce。 想想车赛。将代码分解为函数。将这些函数转成函数式的。将重复过程的循环转成递归。 想想乐队。将一系列操作转为管道。 注:
    不可变数据是无法更改的。某些语言(如 Clojure)默认就是所有值都不可变。任何『变更』操作都会复制该值,更改副本然后返回更改后的副本。这消除了不完整模型下程序可能进入状态所带来的Bug。支持一等公民函数的语言允许像任何其他值一样对待函数。这意味着函数可以创建,传递给函数,从函数返回,以及存储在数据结构中。尾调用优化是一个编程语言特性。函数递归调用时,会创建一个新的栈帧( stack frame)。栈帧用于存储当前函数调用的参数和本地值。如果函数递归很多次,解释器或编译器可能会耗尽内存。支持尾调用优化的语言为其整个递归调用序列重用相同的栈帧。像Python这样没有尾调用优化的语言通常会限制函数递归的次数(如数千次)。对于上面例子中race()函数,因为只有5个时间段,所以是安全的。柯里化( currying)是指将一个带有多个参数的函数转换成另一个函数,这个函数接受第一个参数,并返回一个接受下一个参数的函数,依此类推所有参数。并行化( parallelization)是指,在没有同步的情况下,相同的代码可以并发运行。这些并发处理通常运行在多个处理器上。惰性求值( lazy evaluation)是一种编译器技术,可以避免在需要结果之前运行代码。如果每次重复执行都产生相同的结果,则过程就是确定性的。 【编辑推荐】 【责任编辑:张燕妮 TEL:(010)68476606】PYPL 9 月编程语言排行榜发布,Python 一枝独秀用 Rust 开发 Linux 驱动?内核维护者表示愿意接受为什么谷歌的开发人员认为敏捷开发是无稽之谈?苹果可能以人民币美元 1:1 的兑换率给中国开发者汇款编程语言Nim 中文官网现已上线
 点赞 0
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |