##
1 `Stats` クラス

`Stats` には次のメソッドがあります。

`strip_dirs`( | )

  このメソッドは `Stats` にファイル名の前に付いているすべてのパス 情報を取り除かせるためのものです。出力の幅を80文字以内に収めたいときに 重宝します。このメソッドはオブジェクトを変更するため、取り除いたパス情 報は失われます。パス情報除去の操作後、オブジェクトが保持するデータエント リは、オブジェクトの初期化、ロード直後と同じように``ランダムに''並んで います。`strip_dirs()` を実行した結果、2つの関数名が区別できな い(両者が同じファイルの同じ行番号で同じ関数名となった)場合、一つのエン トリに合算されされます。

`add`( | filename[, ...])

  `Stats` クラスのこのメソッドは、既存のプロファイリング・オブジェ クトに情報を追加します。引数は対応するバージョンの `profile.run()` または `cProfile.run()` によって生成 されたファイルの名前でなくてはな りません。関数の名前が区別できない(ファイル名、行番号、関数名が同じ)場 合、一つの関数の統計情報として合算されます。

`dump_stats`( | filename)

  `Stats` オブジェクトに読み込まれたデータを、ファイル名 filename のファイルに保存します。ファイルが存在しない場合 新たに作成され、すでに存在する場合には上書きされます。 このメソッドは `profile.Profile` クラスおよび `cProfile.Profile` クラスの同名のメソッドと等価です。 バージョン 2.3 で 新たに追加 された仕様です。

`sort_stats`( | key[, ...])

  このメソッドは `Stats` オブジェクトを指定した基準に従ってソート します。引数には通常ソートのキーにしたい項目を示す文字列を指定します (例: `'time'` や`'name'` など)。

  2つ以上のキーが指定された場合、2つ目以降のキーは、それ以前のキーで同等 となったデータエントリの再ソートに使われます。たとえば `sort_stats('name', 'file')` とした場合、まずすべてのエントリが関 数名でソートされた後、同じ関数名で複数のエントリがあればファイル名でソー トされるのです。

  キー名には他のキーと判別可能である限り綴りを省略して名前を指定できます。 現バージョンで定義されているキー名は以下の通りです。

  正式名 | 内容
  --- | ---
  `'calls'` | 呼び出し回数
  `'cumulative'` | 累積時間
  `'file'` | ファイル名
  `'module'` | モジュール名
  `'pcalls'` | プリミティブな呼び出しの回数
  `'line'` | 行番号
  `'name'` | 関数名
  `'nfl'` | 関数名/ファイル名/行番号
  `'stdname'` | 標準名
  `'time'` | 内部時間

  すべての統計情報のソート結果は降順(最も多く時間を消費したものが一番上 に来る)となることに注意してください。ただし、関数名、ファイル名、行数 に関しては昇順(アルファベット順)になります。`'nfl'` と `'stdname'` はやや異なる点があります。標準名(standard name)とは表 示欄の名前なのですが、埋め込まれた行番号の文字コード順でソートされます。 たとえば、(ファイル名が同じで)3、20、40という行番号のエントリがあった 場合、20、30、40 の順に表示されます。一方 `'nfl'` は行番号を数値 として比較します。結果的に、`sort_stats('nfl')` は `sort_stats('name', 'file', 'line')` と指定した場合と同じになりま す。

  後方互換性のため、数値を引数に使った `-1`、 `0`、 `1`、 `2` の形式もサポートしています。 それぞれ `'stdname'`、`'calls'`、`'time'`、 `'cumulative'` として処理されます。引数をこの旧スタイルで指定した場合、 最初のキー(数値キー)だけが使われ、複数のキーを指定しても2番目以降は無 視されます。

`reverse_order`( | )

  `Stats` クラスのこのメソッドは、オブジェクト内の情報のリストを逆 順にソートします。 デフォルトでは選択したキーに応じて昇順、降順が適切に選ばれることに注意 してください。

`print_stats`( | [restriction, ...])

  `Stats` クラスのこのメソッドは、`profile.run()` の項で 述べた プロファイルのレポートを出力します。

  出力するデータの順序はオブジェクトに対し最後におこなった `sort_stats()` による操作にもとづいたものになります (`add()` と `strip_dirs()` による制限にも支配されます)。

  引数は一覧に大きな制限を加えることになります。初期段階でリストはプロファ イルした関数の完全な情報を持っています。制限の指定は(行数を指定する)整 数、(行のパーセンテージを指定する) 0.0 から 1.0 までの割合を指定する小 数、(出力する standard name にマッチする)正規表現のいずれかを使ってお こないます。正規表現は Python 1.5b1 で導入された `re` モジュー ルで使える Perl スタイルのものです。複数の制限は指定された場合、それは 指定の順に適用されます。たとえば次のようになります。

      print_stats(.1, 'foo:')

  上記の場合まず出力するリストは全体の10%に制限され、さらにファイル名の 一部に文字列 .*foo: を持つ関数だけが出力されます。

      print_stats('foo:', .1)

  こちらの例の場合、リストはまずファイル名に .*foo: を持つ関数だ けに制限され、その中の最初の 10% だけが出力されます。

`print_callers`( | [restriction, ...])

  `Stats` クラスのこのメソッドは、プロファイルのデータベースの中か ら何らかの関数呼び出しをおこなった関数すべてを出力します。出力の順序は `print_stats()` によって与えられるものと同じです。出力を制限す る引数も同じです。 各呼出し側関数についてそれぞれ一行ずつ表示されます。 フォーマットは統計を作り出したプロファイラごとに微妙に異なります。

  - `profile` を使った場合、 呼出し側関数の後にパーレンで囲まれて表示される数値は 呼出しが何回おこなわれたかを示すものです。続いてパーレンなしで表示され る数値は、便宜上右側の関数が消費した累積時間を繰り返したものです。

  - `cProfile` を使った場合、 各呼出し側関数は3つの数字の後に来ます。その3つとは、 呼出しが何回おこなわれたか、 呼出しの結果現在の関数内で費やされた合計時間および累積時間です。

`print_callees`( | [restriction, ...])

  `Stats` クラスのこのメソッドは指定した関数から呼出された関数のリ ストを出力します。呼出し側、呼出される側の方向は逆ですが、引数と出力の 順序に関しては `print_callers()` と同じです。