linecache.py from python 2.0

1780 ワード

githubで見つけられるlinecache.pyの最初のバージョンはpython 2.0から来ており、ここにリンクされています.
python 2.0バージョンではlinecache.pyは全部で93行で、グローバル変数cacheストレージキャッシュを定義しています.実際にcacheは辞書で、keyはファイル名で、valueは(size、mtime、lines、fullname)です.
getline(filename,fileno)を呼び出すと、プログラムはgetlines(filename)でファイルを読み込みます.ファイルがcacheでキャッシュされている場合は、cache[filename][2]に直接戻ります.ファイルがまだキャッシュに存在しない場合は、updatecache(filename)を呼び出してファイルをキャッシュに読み込みます.グローバルキャッシュcache変数はclearcache()関数でクリアできます.関数checkcache()は、現在のキャッシュが無効になっているかどうかを確認できます.プログラムはcheckcache()を自動的に呼び出してキャッシュが有効かどうかをチェックするのではなく、cache missが発生した場合にのみupdatecache()によってキャッシュが更新されることに注意してください.
python 2.1では、ソースライン12が__増加するall__=['getline', 'clearcache', 'checkcache'].
python 2.3では、ソースコードヘッダのfrom stat import*の行が削除する、プログラムはfilestat[stat.ST_MTIME]のようなファイル情報を読み取るのではなく、直接filestatを用いる.st_mtimeはファイル情報を読み出します.興味深いことに、私の実験の過程で、filestat[sta.ST_MTIME]はlongタイプを返し、filestat.st_mtimeはfloatタイプを返しますが、これはちょっとおかしいです.
python 2.4では、checkcache(filename=None)が更新され、元のcheckcache()はすべてのファイルをチェックし、filenameで指定されたファイルをチェックできるようになりました.
python 2.5ではlinecache.pyこのファイルはまた新しい変化があって、このような小さいモジュールがpythonバージョンが更新するたびに小さい変化があるとは思いもよらなかったX_X.
いくつかの関数に1つのパラメータmodule_が追加されました.globals
13 def getline(filename, lineno, module_globals=None):
14     lines = getlines(filename, module_globals)
15     if 1 <= lineno <= len(lines):
16         return lines[lineno-1]
16     else:
17         return ''

このバージョンでは,理解できない点がいくつかあります.(
このような小さなモジュールが歴史とともに進化しているのを見て、少しexcitedのような感じがします.