Python 技巧:使用函数参数实现全局缓存

文章介绍了如何在Python中通过函数参数的缺省值来创建一个全局缓存,例如在`find_data`函数中,如果键存在于缓存`_cache`,则直接返回,否则从数据库加载数据并存入缓存。这种方式避免了全局变量的使用,且每个函数调用共享同一默认参数实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的这个参数只在函数内有效,即便是其他函数再声明一个一模一样的参数,作用范围仍然在函数内,这点是需要注意的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值