在Python中使用函数式编程的最佳实践!
副问题[/!--empirenews.page--]
简介 Python 是一种成果富厚的高级编程说话。它有通用的尺度库,支持多种编程说话范式,尚有很多内部的透明度。假如你乐意,还可以查察 Python 的底层并修改,乃至能在措施运行的时辰直接修改运行时。 我最近留意到一个有履历的 Python 措施员行使 Python 的新要领。就像很多 Python 新手一样,我在第一次看到 Python 时喜好它的简朴易懂的根基轮回、函数和类界说的语法。在把握了基本语法之后,我开始对高级成果感乐趣,如担任、天生器、元编程等。可是,我不太清晰它们的行使要领,常常会在不适当的处所行使。有一段时刻里我写的代码伟大又难领略。其后我重复修改,出格是必要恒久在统一段代码上事变时,最终会将大部门代码逐步改回行使根基的函数、轮回、单例类。 尽量云云,那些高级成果必然有其存在的来由,它们也必然长短常重要的器材。很明明,“奈何编写优越的代码”是个很是普及的话题,乃至没有独一的正确谜底!相反,这篇文章的方针是一个特定的话题:Python 中函数式编程的应用。我将接头函数式是什么,奈何在 Python 中行使,并按照我的履历先容最佳行使要领。 什么是函数式编程? 函数式编程(简称 FP)是一种编程范式,个中最根基的元素是不行修改的值,以及不与其他函数共享状态的“纯函数”。纯函数对付给定的输入永久返回同样的输出,并且不会修改任何数据,也不会造成副浸染。因此,纯函数常常与数学运算较量。譬喻,3+4 永久便是 7,不管同时举办了其他任何数学运算,也不管之前举办了几多次加法运算。 有了纯函数和不行修改的值,措施员就可以建设逻辑布局了。迭代可以用递归取代,由于递归才是让统一个举措多次执行的“函数式”做法。函数行使新的输入挪用本身,直到参数满意某个终止前提。另外,尚有高阶函数,它的输入是其他函数,返回另一个函数。我稍后会先容这个观念。 尽量函数式编程从上世纪五十年月就呈现了,并且很多说话也都实现了它,但它并没有完全地描写一门说话。Clojure、Common Lisp、Haskell 和 OCaml 都是以函数式为主的说话,也都融合了其他差异的编程说话观念,如范例体系、严酷或懒惰求值等。大大都说话还用某种要领支持副浸染,如写入文件、读取文件等,凡是这些副浸染都被细心地标志为“不纯净”。 人们凡是都以为函数式很深奥,并且与可实践性对比,它更垂青优雅和简捷。大公司很少会在大局限项目上依靠于函数式为主的说话,纵然要用也是在较小的范畴内,远远不如其他 C++、Java、Python 等说话风行。可是,FP 现实上只是一种框架,一种思量逻辑流的方法,它自己也有利益和弱点,并且也能与其他编程范式共同行使。 Python 支持什么? 尽量Python并不是以函数式为主的说话,但对它来说支持函数式编程也相比拟力轻易,由于Python中的统统都是工具。这意味着函数界说也可以赋给变量并转达。
Lambda 通过 Lambda 表达式的语法,可以用声明式的方法建设函数。要害字 lambda 来自希腊字母,常常在正式的数学逻辑顶用来描写函数和变量的假造绑定,即“lambda 演算”,它的汗青比函数式编程还要长远。这一观念的另一个术语叫做“匿名函数”,由于 lambda 函数可以直接嵌入到行内行使,不必要事先指命名称。将匿名函数赋值给变量后,它的举动与正常函数完全一样。
lambda 函数最常见的用法就是提供应那些接管可挪用工具作为参数的函数。“可挪用工具”是任何可以或许通过括号挪用的对象,详细来说有类、函数和要领。个中最常见的用法就是在对数据布局举办排序时,通过参数的键指定排序的相对次序。
行内嵌入式 lambda 函数的弱点在于它不会在栈跟踪中表现名称,也许会给调试带来贫困。 Functools 高阶函数是函数式编程的英华,部门由 Python 直接提供,部门通过 functools 函数库提供。你也许在大局限漫衍式数据说明方面传闻过 map 和 reduce,但现实上它们也是最重要的两个高阶函数。map 在给定序列的每个元素上执行函数,然后返回功效的序列;reduce 行使一个函数网络序列中的每个元素,然后返回单个值。
(编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |