私はプログラミング試験のために勉強していますが、知っておく必要がある単語の 1 つは Python に適用される決定論です。
2 に答える
プログラムを実行するたびに同じ結果と動作が得られる場合、そのプログラムは決定論的です。この用語は Python に固有のものではありません。
Python ドキュメントにこれへの参照があり、Google での検索によって返される最初の結果です。
決定論的プロファイリングは、すべての関数呼び出し、関数戻り、および例外イベントが監視され、これらのイベント間の間隔 (ユーザーのコードが実行されている間) の正確なタイミングが作成されるという事実を反映することを目的としています。対照的に、統計プロファイリング (このモジュールでは実行されません) は、有効な命令ポインターをランダムにサンプリングし、どこで時間が費やされているかを推測します。後者の手法は、伝統的にオーバーヘッドが少なくなりますが (コードを計測する必要がないため)、時間が費やされている場所の相対的な指標のみを提供します。
Python では、実行中にアクティブなインタープリターがあるため、決定論的プロファイリングを行うためにインストルメント化されたコードが存在する必要はありません。Python は、各イベントにフック (オプションのコールバック) を自動的に提供します。さらに、Python の解釈された性質は、実行に非常に多くのオーバーヘッドを追加する傾向があるため、決定論的プロファイリングは、典型的なアプリケーションではわずかな処理オーバーヘッドしか追加しない傾向があります。その結果、決定論的プロファイリングはそれほど高価ではありませんが、Python プログラムの実行に関する広範な実行時間統計を提供します。
呼び出し回数の統計を使用して、コード内のバグ (驚くべき回数) を特定したり、インライン展開ポイントの可能性 (呼び出し回数が多い) を特定したりできます。内部時間統計を使用して、慎重に最適化する必要がある「ホット ループ」を特定できます。累積時間統計を使用して、アルゴリズムの選択における高レベルのエラーを特定する必要があります。このプロファイラーでの累積時間の異常な処理により、アルゴリズムの再帰的実装の統計を反復的実装と直接比較できることに注意してください。