関数型プログラミングの「fold」関数に相当する「Python」の機能は何ですか? 質問する

関数型プログラミングの「fold」関数に相当する「Python」の機能は何ですか? 質問する

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 の実装である関数を提供していますが、私が聞いたところによると、'Python 的な' プログラミング方法は、lambda項や高階関数を避け、可能な場合はリストの内包表記を優先するということです。したがって、関数ではなく、Python でリストまたはリストのような構造を折りたたむための推奨される方法reduce、またはreduceこれを実現する慣用的な方法はありますか?

ベストアンサー1

Pythonで配列を合計する方法は、sum他の目的のために、reduce(からfunctoolsモジュール)とoperatorモジュール、例:

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

reduceHaskell の用語では、 は実際には であることに注意してくださいfoldl。折り畳みを実行するための特別な構文はなく、組み込みの はなくfoldr、実際に をreduce非結合演算子とともに使用することは悪いスタイルと見なされます。

高階関数の使用は、非常に Python 的です。関数やクラスを含むすべてがオブジェクトであるという Python の原則をうまく利用しています。ラムダが一部の Python ユーザーから嫌われているのは事実ですが、それは主に、ラムダが複雑になると読みにくくなる傾向があるためです。

おすすめ記事