当前位置: 首页 > 面试题库 >

功能编程中的“ pythonic”等同于“ fold”函数是什么?

潘阳舒
2023-03-14
问题内容

在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完全相同的功能,它是fold的一种实现,但是,有人告诉我,“
pythonic”编程方式是避免使用lambda术语和高阶函数,而是尽可能使用列表理解。因此,有没有一种首选的方式来折叠列表或不是Pythonreduce函数的类似列表的结构,或者是reduce实现这一目标的惯用方式?


问题答案:

用Python方式对数组求和的方法是使用sum。为了其他目的,有时可以使用reduce(来自functools模块)和operator模块的某种组合,例如:

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

请注意,reduce实际上这是一个foldl用Haskell表示的。没有执行折叠的特殊语法,没有内置函数foldr,实际上reduce与非关联运算符一起使用被认为是不好的样式。

使用高阶函数是相当Python的;它很好地利用了Python的原理,即一切都是对象,包括函数和类。没错,lambda被某些Pythonista所反对,但这主要是因为它们变得复杂时往往不太可读。



 类似资料:
  • Java 中有什么函数可以等同于 Excel 中的 NORMINV 函数, 需求是计算一致,函数的传参规则也一致,这样使用起来比较方便。

  • 问题内容: 我在linux中有一个应用程序,该应用程序已成功编译。我想在Windows中运行相同的程序。 但是编译会产生以下与头文件有关的错误。 找不到sys / select.h 找不到termios.h 我怎样才能解决这个问题? 问题答案: Windows API在结构上和风格上与任何Unix风格提供的系统调用和库例程的组合都非常不同。 期限 Windows使用与任何* nix系统完全不同的模

  • 在Java8中,新的包是Java。util。函数包含很多函数接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)多次提到“函数形状”: 有几种基本函数形状,包括函数(从T到R的一元函数)、消费者(从T到void的一元函数)、谓词(从T到布尔的一元函数)和供应者(从T到

  • 问题内容: 经过多次尝试优化代码之后,似乎最后的资源就是尝试使用多个内核来运行以下代码。我不确切地知道如何转换/重组我的代码,以便它可以使用多个内核更快地运行。如果能得到指导以实现最终目标,我将不胜感激。最终目标是能够对数组A和B尽可能快地运行此代码,其中每个数组包含大约700,000个元素。这是使用小数组的代码。700k元素数组已被注释掉。 我想做的是模仿一个称为ismember [2]的MAT

  • 问题内容: PostgreSQL有一个有用的功能,称为。它返回那些传递给它记录的最大价值在这里。 SQLite中是否有任何等效项? 需要注意的是,我只需要使用它来处理2个参数。 问题答案: 参考:https : //sqlite.org/lang_corefunc.html#maxoreunc 多参数max()函数返回具有最大值的参数,如果任何参数为NULL,则返回NULL。多参数max()函数从

  • 问题内容: 在可以保证线程安全。那呢 谢谢! 问题答案: 在C ++中使用以下内容: