Python中,可以使用参数的缺省值来实现一个全局的缓存,如下:
def load_from_db(key: str):
return f"{key}'s value"
def find_data(key: str, _cache= {}):
if key in _cache:
print(f"{key} found in cache")
return _cache[key]
data = load_from_db(key) #假如这一步是比较耗时的操作
_cache[key] = data #把数据放入缓存
return data
#调用举例
if __name__ == '__main__':
#调用的时候不传_cache这个参数
print(find_data("key1")) #第一次,_cache中没有,会调用load_from_db
print(find_data("key2"))
print(find_data("key1")) #第二次,_cache中已经有了
执行的结果:
key1's value
key2's value
key1 found in cache
key1's value
会发现key1在缓存中已经存在了。
原因
参数_cache有一个缺省是一个dict,当不传该参数时,python会自动创建一个,而且是全局唯一的,以后再调用时都不会再重新创建,这算是python的一个语法糖。使用这个特性,就不用全局变量轻松实现全局缓存,而且代码足够简洁。
注意
缺省值参数的作用域仅限于参数内,虽然是个全局变量,但_cache的这个参数只在函数内有效,即便是其他函数再声明一个一模一样的参数,作用范围仍然在函数内,这点是需要注意的。