在Python中使用函数式编程的最佳实践!
第一次运行 test_pluraize 时该测试可以或许通过,但往后每次运行城市失败,由于它会重复添加“s”和“es”。为了让它酿成纯函数, 可以这样写:
留意这里并没有行使任何 FP 特有的观念,只是建设并返回了一个新的工具,而不是重用并修改已有的旧工具。这样输入的内容也会保持稳固。 固然这个例子像个玩具,但想象一下,假如你转达并改变了某个伟大的工具,可能通过数据库毗连举办了某些操纵。当编写许多许多测试用例时就会发明,你必需很是警惕地处理赏罚测试用例的次序,可能花大量价钱在每个测试用例之后破除并从头建设状态。这些事变应该是在 e2e 集成测试阶段的活儿,不该该在较量小的单位测试阶段举办。 领略(并停止)可修改性 先来个观测,你以为哪些数据布局是可修改的? 为什么这一点很重要?有些时辰列表和元组可以交流行使,因此人们常常会在代码中随机行使两者之一。于是当你试图修改一个元组(好比给个中一个元素赋值)时就会堕落。可能试图用列表作为字典的键,也会导致 TypeError,由于列表是可修改的。元组和字符串可以作为字典的键行使,由于它们不行修改,可以获得确定的哈希值,而其他数据布局都不可,由于它们的工具标识纵然保持稳固,值也会改变。 最重要的是,在转达字典、列表或集适时,它们也许会在其他上下文中被料想之外地改变。这种题目很是难以调试。可修改的默认参数就是个经典的例子:
字典、荟萃和列表很强盛、服从很高、很是 Python,并且很是有效。写代码时完全不行使它们是不明智的。但纵然云云,我永久会在默认参数的位置行使元组或 None(取代空字典或空列表),而且在缺乏足够的防止代码的环境下,停止将可修改的数据布局在差异的上下文中转达。 镌汰类的行使 类(及着实例)的可修改性是把双刃剑。跟着写的 Python 代码越来越多,,我开始倾向于仅在绝对须要时才行使类,并且我险些从不行使可修改的类属性。对付那些高度面向工具的说话(如 Java)的措施员来嗣魅这一点也许很难做到,但很多其他说话中在类层面完成的对象,在 Python 可以在模块层面完成。譬喻,假如必要将函数或常量或定名空间分组,那么可以把它们一路放到另一个 .py 文件中。 我常常看到一些类的目标是生涯几个定名变量的值,这种环境下 namedtuple(其范例是 typing.NamedTuple)就足够,并且照旧不行改变的。
假如确实必要状态的来历,并且多个视图都必要改变该状态,那么类是绝佳的选择。另外,与静态要领对比,我更倾向于单例纯函数,这样它们能在其他上下文中组合行使。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |