根据任务要求审查这个使用 functools 的生成实现。
对任意由整数式收费项组成的可迭代对象返回整数总额,包括空输入;保留函数元数据;记录调用但不记录令牌;并避免不必要的重复复制。
Python
from functools import partial, reduce
def audit(log, func):
def wrapper(*args, **kwargs):
log(f"calling {func.__name__}: {kwargs!r}")
func(*args, **kwargs)
return wrapper
def normalize_charges(charges):
return reduce(
lambda acc, charge: acc + [int(charge)],
charges,
[],
)
def total_cents(charges, *, token):
return reduce(lambda left, right: left + right,
normalize_charges(charges))
def emit(message, *, sink):
sink.append(message)
events = []
audit_log = partial(emit, sink=events)
charge_total = partial(audit, audit_log)(total_cents)
生成代码仅作示例,不代表任何特定模型