使用 toolz 库清理 python 代码

使用 toolz 库清理 python 代码

toolz 库是一个小而强大的 python 库。在这篇文章中,我们将探讨几个最有效的工具,它们将帮助您编写干净高效的 Python 代码。

关于 toolz 的快速说明。 Toolz 融合了函数式编程思想。如果你对函数式编程不熟悉,可以了解更多 这里

简而言之,与使用此库相关的函数式编程概念是 toolz 中的许多函数都是“惰性运算符”。这意味着在需要输出之前不会评估函数。在 python 中,这通常是通过创建生成器或迭代器对象来完成的。通常我们需要在返回的对象上声明数据结构,但这些对象的重要部分是它们能够实现巨大的流量控制,并允许您连续执行操作而不会产生副作用或其他问题。在某些情况下,该函数会立即进行评估。我们将在下面的代码中看到这两种情况的示例,但值得一提的是以避免稍后混淆。虽然这对于新的 Python 用户来说可能有点陌生,或者如果你来自面向对象的编程风格,但它的好处是巨大的,所有的编程风格都可以从它们的使用中受益。因此,这使我们能够编写干净、可读和可重现的代码。

toolz 库中有三个模块。 Itertoolz、Functoolz 和 Dicttoolz .我们不会广泛涵盖所有功能,而是重点介绍一些有用且广泛适用的功能。请务必查看 API 文档 因为该软件包非常广泛,并且有很多非常棒的功能。

最后,在一些示例中,我们将使用一些匿名的 ** 拉姆达** 功能。这些非常简单,但您可以随时查看它们 这里 如果你不熟悉。让我们进入它!

伊特工具兹

1) get():从序列中检索特定元素

我们可以使用 get() 函数轻松地从序列中检索特定元素。这适用于可交互的:字符串、列表、numpy 数组、元组甚至字典。

2)mapcat():将一个函数映射到多个序列上并连接一个列表

当您有多个要应用函数并将其连接在一起的序列时,此函数非常有用。在此示例中,我们有两个离散的名称列表,在一次调用中,我们映射一个函数以大写名称,并将两个列表连接起来。请注意,我们必须将列表函数包装在代码周围以生成列表并立即调用该函数。

3)频率():生成频率表

频率()可能是最有用的函数之一,因为它允许我们从任何序列生成频率表。这对于列表和字典特别有用——注意在这种情况下我们返回一个字典。

4) diff():查找变量之间的差异

diff() 函数可用于查找变量之间的差异。这对于查找两个列表之间的差异特别有用。使用是一个轻微的边缘情况,但它对特定情况很有用。请注意,输出是一个元组列表,其中包含该特定索引之间不同的值。

5) interleave():交错迭代

interleave 函数在它的我们中也有点边缘情况,但它对于特定情况很有用。该函数接受多个迭代并将它们交错。当您有多个列表并且想要通过交替它们的不规则将它们组合成一个列表时,这很有用。

功能工具

6) pipe():管道函数

pip 函数是 toolz 库中我最喜欢的函数之一。它允许您设置用于处理数据的管道,而无需保存中间变量。

7) juxt() 在一个输入上调用多个函数

当您想在一个输入上调用多个函数时,可以使用 juxt() 函数。这允许函数的快速并行化。在这里,我们将使用我们上面定义的相同的三个函数。函数的输出是每个函数结果的元组。

词典工具

dicttoolz 模块对于处理字典非常方便。因为字典比单个序列更复杂,所以在改变数据时它们会变得更复杂。我们通常需要编写某种迭代过程来处理它们,但是 dicttoolz 模块使这更加简单和简洁。

8):valmap():将函数映射到字典中的所有值

valmap() 可能是最有用的,因为它允许我们将函数应用于字典中的所有值。这是一个将所有值乘以 10 的简单示例。

9)keymap():将一个函数映射到字典中的所有键

就像 valmap 一样,我们可以使用 keymap() 将函数应用于字典中的所有键。在这里,我们将所有键更改为大写。

10) valfilter() 和 keyfilter():过滤字典

valfilter() 和 keyfilter() 类似于 valmap() 和 keymap() 但它们允许我们过滤字典中的值和键。在这里,我们将过滤掉所有小于 30 的值,以及用于浮动类型的过滤器键。

奖励:为干净的代码组合功能

在这里,我将给您一个示例,说明我们如何组合函数以使我们的代码更具可读性。如果单词长度小于 10 个字符,我们将生成一个管道以从 10 个单词列表中获取频率计数。

我们的管道将如下所示:

我们将为此示例生成一个嵌套的单词列表,称为 .我从中提取了四段 本文 并生成一个包含 4 个单词列表的列表。我在这里保存了代码,因为它很长。以下是每个列表中的单词数:

首先让我们定义我们所有的功能

现在我们可以使用 pipe() 来处理或数据

概括

而已!希望您发现 toolz 库很有用。我只是触及了它可以做的事情的表面,但我认为它是一个很好的工具,可以放在你的盒子里。值得注意的是,如果您关心性能,C python (cython) 中的 toolz 库有一个相同的实现,称为 细胞器 这大约快 2 到 5 倍。如果您有任何问题或意见,或者您是否在自己的项目中使用过 toolz 库,请告诉我。如果您喜欢这篇文章,请联系我 推特 或者 链接在 我,让我知道!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/24386/17261008

posted @ 2022-09-10 08:17  哈哈哈来了啊啊啊  阅读(229)  评论(0编辑  收藏  举报