linecache.py from python 2.0

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中,源代码line 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。

几个函数都多了一个参数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的感觉。

你可能感兴趣的:(linecache.py from python 2.0)