【发布时间】:2012-04-08 22:13:55
【问题描述】:
我正在从文件创建一些对象(来自模板 xsd 文件的验证器,以便将其他 xsd 文件组合在一起,当它发生时),我想在磁盘上的文件更改时重新创建这些对象。
我可以创建类似的东西:
def getobj(fname, cache = {}):
try:
obj, lastloaded = cache[fname]
if lastloaded < last_time_written(fname):
# same stuff as in except clause
except KeyError:
obj = create_from_file(fname)
cache[fname] = (obj, currenttime)
return obj
但是,如果存在其他人的测试代码,我更愿意使用它。是否有现有的库可以执行此类操作?
更新:我使用的是 python 2.7.1。
【问题讨论】:
-
请注意,不要在
if语句中重复except子句中的代码,而可以只使用raise KeyError()。 -
不错的可变默认参数!
-
@Amber 或者使用内部函数,这样可能会更干净。
-
与@Katriel 相反,我不喜欢这里的可变默认参数,因为我认为它们的行为并不直观。大多数时候,可变的默认参数会在您不希望它们发生变化时发生变化。在这种情况下,它当然是有意的,但是其他阅读代码的人可能会发现自己(a)不理解函数的工作原理,因为缓存不是 {} 是违反直觉的,或者(b)怀疑该函数将在某些时候失败,因为它使用可变的默认参数。