2

Python コードは functions でより高速に実行されるという質問に出くわしました。そのため、コードをできるだけ多くの部分に分割することが、より迅速なアプローチになると考えました。しかし、いくつかの関数のタイミングを計ったとき、それが実際には正しくないことがわかりました。

コードは現在 codereview でレビュー用に配置されているため、ここには投稿しません。そのコードも codereview でレビューのために配置されており、報奨金にもかかわらず多くの回答が得られていないため、タイミングを行うための最良の方法をまだ考えています。

パフォーマンスのメリットは無限ではなく、関数を分割するとパフォーマンスのメリットが得られなくなるという制限が必要であることがわかりました。

では、Python コードをさまざまな関数に分割することによって、パフォーマンスの向上が止まる限界はどこにあるのでしょうか? パフォーマンスの観点から、コードを関数に分割することが役に立たなくなるのはいつですか?

4

2 に答える 2

2

アクセス時間のために、コードがグローバル スコープよりも関数内で高速に実行されることは事実です。関数には、配列として実装される独自のローカル スコープがありますが、グローバル スコープは実際には単なる辞書です。配列は dict よりも高速にアクセスされ、これは内部の C レベルで発生しています。

これは、コードを多くの関数に分割することで速度が向上することを意味するものではありません。コードをグローバルから関数内に移動する、アクセス時間が改善され、全体的な速度が向上する可能性があることを意味するだけです。

グローバルではなくローカル スコープを使用するためだけにすべてのコードを 1 つの関数内に押し込んだとしても、実際にコードをプロファイリングすることによってのみ決定できるパフォーマンスの向上は保証されません。これは、Python では関数呼び出しのオーバーヘッドが比較的高く、ローカル アクセス時間の高速化によるパフォーマンスの向上が見過ごされる可能性があるためです。

あなたが提供した最初のリンクのページには、これを確認する多くの情報があります。

于 2013-07-20T18:16:46.177 に答える
1

私が理解しているように、パフォーマンスの向上は、アクセス時間が改善されるため、グローバル変数が関数のローカルスコープに移動された場合にのみ適用されます。コードをさらに多くの関数に分割しても、同様のブーストは得られません。

于 2013-07-20T16:49:05.453 に答える