##
10.5.1 `Stats` クラス

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

`strip_dirs`( | )

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

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

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

`dump_stats`( | filename)

  `Stats` オブジェクトに読み込まれたデータを、ファイル名 filename のファイルに保存します。ファイルが存在しない場合 新たに作成され、すでに存在する場合には上書きされます。 このメソッドは `profile.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()` によって与えられるものと同じです。出力を制限す る引数も同じです。呼出し側関数の後にパーレンで囲まれて表示される数値は 呼出しが何回おこなわれたかを示すものです。続いてパーレンなしで表示され る数値は、関数が消費した時間の合計です。

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

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

`ignore`( | )

  リリース 1.5.1 以降で撤廃された仕様です。 現バージョンの Python のPython では不要です。10.2

... では不要です。10.2
  Python が `None` 以外の使われなかった結果を表示するときに使われ たもので、旧バージョンとの互換性のためだけに定義されています。