【Python 工具人快餐 · 第 3 份】

开袋即食

functools 把「高阶函数」打包成 3 个即插即用的 API:
@lru_cache 自动记忆、@wraps 装饰器美颜、partial 预设参数,一行顶十行。


1 行代码 3 连发

from functools import lru_cache, wraps, partial

@lru_cache(maxsize=None)          # 无限缓存
def fib(n): return n if n < 2 else fib(n-1) + fib(n-2)

@wraps(func)                      # 保留原函数签名
def wrapper(*a, **kw): return func(*a, **kw)

int16 = partial(int, base=16)     # 预设进制

场景实拍:接口缓存 30 秒,减少 90 % 重复请求

需求:天气 API 调用费钱,30 秒内同一城市直接返回缓存。

import requests, time
from functools import lru_cache

@lru_cache(maxsize=128, typed=False)
def weather(city: str) -> dict:
    print(f"💸 真实请求 {city}")
    url = f"https://api.openweathermap.org/data/2.5/weather"
    return requests.get(url, params={"q": city, "appid": "xxx"}).json()

# 30 秒后缓存自动失效
weather("London")
time.sleep(1)
weather("London")   # 直接走缓存,无打印

升级加料

  1. cache_clear() 手动清空缓存。
  2. @singledispatch 做函数重载。
  3. partialmethod 给类方法预设参数。

打包带走 :
函数重复算?@lru_cache 贴上!
参数太长?partial 预设!
装饰器丢签名?@wraps 美颜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YumOS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值