reduce()の問題点は何ですか?
2023-10-13 18:10:40
質問
Python 3.0のreduce()関数の変更について、ネット上で多くの熱い議論が交わされているようです。私は、なぜそうなのか少し理解に苦しみます。私は、さまざまなケースでそれを使用することは非常に合理的であると思います。もし侮辱が単に主観的なものであったなら、これほど多くの人がそれを気にすることは想像できません。
私は何を見逃しているのでしょうか?reduce()の何が問題なのでしょうか?
どのように解決するのですか?
Guidoが彼の Python 3000におけるreduce()の運命 の投稿で述べています。
さて、次はreduce()です。なぜなら、+ や * を含むいくつかの例を除いて、ほとんど毎回、自明ではない関数の引数で reduce() を呼び出すのを見るたびに、reduce() が何をすることになっているのかを理解する前に、実際にその関数に何が供給されているかを紙とペンで図にしなければならないからです。私の考えでは、reduce()の適用範囲は連想演算子にかなり限定されており、他のすべてのケースでは蓄積ループを明示的に書き出す方がよいでしょう。
混乱させるような優れた例として
reduce
の中に
関数型プログラミングHOWTO
の記事を参照してください。
早速ですが、以下のコードは何をしているのでしょうか?
total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]
解るけど、解るようになるまでには時間がかかる。 を解くのに時間がかかります。短いネストしたdef文を使うと、少しはマシになります。
def combine (a, b):
return 0, a[1] + b[1]
total = reduce(combine, items)[1]
でも、単純にforループを使っていれば一番いいんですけどね。
total = 0
for a, b in items:
total += b
あるいは、sum()組み込みとジェネレータ式。
total = sum(b for a,b in items)
reduce()の多くの用途は、forループとして書かれるとより明確になります。
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] Python 3 の "python -m SimpleHTTPServer" に相当するものは何ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 数値の配列の和の求め方
-
[解決済み】なぜPythonは関数型プログラミングにあまり向いていないのでしょうか?[終了] Pythonはなぜ関数型プログラミングに向かないのか?
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] C++の標準ライブラリにはなぜtransform_ifがないのですか?