与函数式编程中的“fold”函数等效的“pythonic”是什么?

2023-12-21

在 Haskell 中实现如下目标的最惯用的方法是什么:

foldl (+) 0 [1,2,3,4,5]
--> 15

或者 Ruby 中的等价物:

[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15

显然,Python 提供了reduce函数,它是 Fold 的实现,与上面完全相同,但是,我被告知“Pythonic”编程方式是避免lambda术语和高阶函数,尽可能首选列表推导式。因此,是否有一种在 Python 中折叠列表或类列表结构的首选方法?reduce函数,或者是reduce实现这一目标的惯用方法是什么?


对数组求和的 Pythonic 方法是使用sum https://docs.python.org/3/library/functions.html#sum。出于其他目的,您有时可以使用某些组合reduce https://docs.python.org/3/library/functools.html#functools.reduce(来自functools https://docs.python.org/3/howto/functional.html#the-functools-module模块)和operator https://docs.python.org/3/library/operator.html#module-operator模块,例如:

def product(xs):
    return reduce(operator.mul, xs, 1)

意识到reduce实际上是一个foldl,用 Haskell 术语来说。没有特殊的语法来执行折叠,也没有内置的foldr,并实际使用reduce使用非关联运算符被认为是不好的风格。

使用高阶函数非常Pythonic;它很好地利用了Python的一切都是对象的原则,包括函数和类。你说得对,一些 Python 爱好者不喜欢 lambda,但主要是因为当它们变得复杂时,它们的可读性往往不高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与函数式编程中的“fold”函数等效的“pythonic”是什么? 的相关文章

随机推荐

  • 使用模式中的数组复制到 postgres 中?

    我正在使用 Ruby Rails Postgres 我的表看起来像这样 架构方面 CREATE TABLE my table name my num double precision NOT NULL my string arr chara
  • BST 中的第二个最大值

    这是一道面试题 找到 BST 中的第二个最大值 最大元素是 BST 中最右边的叶子 第二个最大值是其父级或其左子级 所以解决方案是遍历 BST 找到最右边的叶子并检查其父节点和左子节点 是否有意义 不 那是错误的 考虑这个 BST 137
  •  内容不收缩的 Flex 项目[重复]                
                

    这个问题在这里已经有答案了 我有一个需要握住的布局
  • 手动安装 Ruby 1.8.7(和其他东西)

    我不想再依赖一键安装程序 我想学习如何手动安装 Ruby 有这方面的资源吗 在此处下载 Ruby 1 8 7 的 Windows 二进制文件 http www ruby lang org en downloads http www ruby
  • 关于多核CPU的x86 LOCK问题

    当执行 LOCK 后面的指令时 x86 ASM LOCK 命令前缀是否会导致所有内核冻结 我在一篇博客文章中读到了这一点 但它没有意义 我找不到任何东西表明这是否属实 这是关于锁定该地址的内存总线 Intel 64 和 IA 32 架构软件
  • Gmail API:如何获取访问令牌?

    我正在测试邮箱API https developers google com gmail api 到目前为止我已经做了以下事情 我已经在中创建了该项目谷歌开发者控制台 https console developers google com
  • capybara:用终止输入键填写表单字段值

    我正在测试条形码阅读器输入 它的行为类似于键盘 但用回车键字符终止每个条形码 我的 javascript 检测到输入键并响应 backbone js 应用程序 如何使用具有终止输入键值的字符串 填写 表单字段 我的测试堆栈是cucumber
  • Windows 窗体上的甘特图控件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • AsyncPostBackTrigger 在我的应用程序中不起作用

    我遇到一个有趣的问题 我们正在使用母版页运行一个网站 在其中一个页面中 我需要创建一个更新面板 该面板将在完成时显示组 SSID 因此 在内容占位符之一中 我将其放入
  • Unicode“退格键”U+0008 的用途是什么?

    Unicode 字符 BACKSPACE U 0008 在编程中的用途是什么 它可以用于哪些应用 On output to a terminal it typically moves the cursor one position to t
  • Pandas:将具有重复行名称的数据重塑为列

    我有一个类似这样的数据集 显示第一行 Sample Detector Cq P 1 106 23 53152 P 1 106 23 152458 P 1 106 23 685083 P 1 135 24 465698 P 1 135 23
  • 如何规避第 3 方 https 网站的同源政策?

    我有一个http 需要访问第三方 JSON API 的站点 该 API 公开在https 地点 我已读完规避同源策略的方法 https stackoverflow com questions 3076414 ways to circumve
  • 从包内读取 SSIS 包文件名(包部署)

    我使用包部署模型在 Visual Studio SSDT 2012 中创建了一个 SSIS 包 有没有办法从包内以只读变量或属性的形式访问包的文件名 我没有看到它被列为系统变量 有什么办法可以通过脚本任务吗 我认为您需要检查 System
  • 运行线程时,旋转变换在重绘中无法正常工作

    我一直在努力使这个程序正常工作 尽管我似乎找不到问题所在 这个程序由以下两个类组成 不多也不少 基本上应该在绘图区域中每次单击时绘制一个点 并在第三次单击时连接所有点 我仍然需要努力让它变得更漂亮 更准确 但这部分是有效的 不起作用的是应该
  • Firebase 时间戳返回错误日期 - Javascript

    我正在尝试从 firestore 获取时间戳值 使用 Firebase 函数 并且我已经使用时间戳的 toDate 方法和矩库在本地成功完成了此操作 moment doc data EndDate toDate 但是 当我将代码部署到 fi
  • UIAlertViewDelegate 和更多警报窗口

    我有实现 UIAlertViewDelegate 的控制器 在实施中我有 void alertView UIAlertView alertView clickedButtonAtIndex NSInteger buttonIndex 方法
  • jQuery 远程验证与服务器生成的错误消息

    我正在使用 Validation jQuery 插件来进行一些验证 我有一项服务现在返回 真 和 假 一切都很好 但是 我使用的错误消息是 该名称已被占用 我希望错误消息是 That name is already a href item
  • 为什么针对旧版本框架时会编译 .NET 4.6 特定代码? [复制]

    这个问题在这里已经有答案了 我有一个针对旧版本 NET 框架 NET 4 5 2 的项目 我安装了 Visual Studio 2015 因此我的计算机上安装了 NET 4 6 我注意到 如果我使用 NET 4 6 C 6 中发布的 C 语
  • 百度地图在安全页面上的实现

    我们正在确保中国网站的商店定位器页面安全 但问题是百度 URL自动重定向到 http url 当我点击上面的 URL 时https api map baidu com https api map baidu com 在浏览器中显示以下代码
  • 与函数式编程中的“fold”函数等效的“pythonic”是什么?

    在 Haskell 中实现如下目标的最惯用的方法是什么 foldl 0 1 2 3 4 5 gt 15 或者 Ruby 中的等价物 1 2 3 4 5 inject 0 m x m x gt 15 显然 Python 提供了reduce函数