"linecache" --- テキストラインへのランダムアクセス
**************************************************

**ソースコード:** Lib/linecache.py

======================================================================

"linecache" モジュールを使うと、Python ソースファイルの任意の行を取得
できます。 内部ではキャッシュを利用し、単一ファイルから多くの行を読み
取る一般的なケースを最適化しています。 "traceback" モジュールは、整形
したトレースバックに含めるソースの行を取得するために、このモジュールを
使用しています。

"tokenize.open()" 関数は、ファイルを開くために使用されます。この関数は
、 "tokenize.detect_encoding()" を使用してファイルのエンコーディングを
取得します。エンコーディングトークンが存在しない場合、デフォルトの
UTF-8 になります。

"linecache" モジュールは次の関数を定義しています。

linecache.getline(filename, lineno, module_globals=None)

   *filename* という名前のファイルから *lineno* 行目を取得します。この
   関数は決して例外を発生させません --- エラーの際には "''" を返します
   (行末の改行文字は、見つかった行に含まれます)。

   *filename* が凍結モジュールを示す場合 ("'<frozen '" で始まる場合)、
   *module_globals* が "None" でなければ、"module_globals['__file__']"
   から実際のファイル名を取得しようとします。

   *filename* という名前のファイルが見付からなかった場合、この関数は最
   初に *module_globals* にある **PEP 302** "__loader__" を確認します
   。 ローダーが存在していて、 "get_source" メソッドが実装されていた場
   合、ソースコードの行を決定します ("get_source()" が "None" を返した
   場合は、 "''" が返ります)。 最後に、 *filename* が相対ファイル名だ
   った場合、モジュール検索パス "sys.path" のエントリからの相対パスを
   探します。

   バージョン 3.14 で変更: 凍結モジュールの *filename* をサポートしま
   した。

linecache.clearcache()

   キャッシュをクリアします。それまでに "getline()" を使って読み込んだ
   ファイルの行が必要でなくなったら、この関数を使ってください。

linecache.checkcache(filename=None)

   キャッシュが有効かどうかを確認します。キャッシュしたファイルがディ
   スク上で変更された可能性があり、更新後のバージョンが必要な場合にこ
   の関数を使用します。 *filename* が与えられない場合、全てのキャッシ
   ュエントリを確認します。

linecache.lazycache(filename, module_globals)

   後々の呼び出しで *module_globals* が "None" となっていても、ファイ
   ルの形式でないモジュールの行を後から "getline()" で取得するのに十分
   な詳細を把握しておきます。この関数により、モジュールの globals を無
   限に持ち運ぶ必要無しに、実際に必要な行まで I/O を行う必要がなくなり
   ます。

   Added in version 3.5.

以下はプログラム例です:

   >>> import linecache
   >>> linecache.getline(linecache.__file__, 8)
   'import sys\n'
