2016-11-24 2 views
0

減らす好き。理解Pythonの組み込みコマンドは、私はこのようなものからコードをリファクタリング

しかし、変更の本当のメリットは何ですか(Pythonで)?

メモリ使用、GC、それが何であってもかまいません。

+1

私は最初のコードが優れていると思います。より読みやすく、計算上も似ています。あなたの "機能的な"コードは、 'sets [ana] = ...'行でオブジェクトの状態を変更してはならないという理想に違反しているので、 "予測可能"という利点はありません。 –

+0

可読性が低下しますか? ;)FWIW、[Guidoは 'reduce'のファンではありません](http://www.artima.com/weblogs/viewpost.jsp?thread=98196)、特にその関数argが連想ではない場合、それはいいえですPython 3の組み込み関数が長くなりました。これは 'functools'に委譲されました。 Guidoはそれを完全に取り除きたいと思っていたが、抗議が続いた後もそれを守ることを余儀なくされた。 –

+0

@ Jared、私は状態を変えていることに気付きました。あなたのポイントは私の質問の緊張です。しかし、 '{}'を減らすためのパラメータとして、メモリ内に異なる方法で座っているので、メリットがあります。 –

答えて

2

ループは事実上、再帰が関数型プログラミング言語で提供する抽象と同じです。 Pythonのreduce関数では、ユーザ定義関数内のループの本体であるものをパッケージ化する必要があります。そのような関数は、パフォーマンスを低下させるオーバヘッドの層を必要とします。

Pythonは、関数型言語が唯一の(または少なくとも第一次の)再帰の手段を作るための選択をするため、ほとんどの関数型言語と同様に再帰も最適化しません(実際には、 Pythonはforwhileループの両方を提供し、データ構造を効率的に反復処理します。最後に

は、reduceを使用すると、稀に簡単なforループのように読めることはないだろう、より優れた性能を持っていることはありませんが、通常により繰り返し呼び出される関数を提供する必要性に悪化しの性能を持っています。それは機能的なスタイルのの外観でプログラミングすることができ、それをサポートするために関数型言語が提供する通常の利点はありません。

関連する問題