python第二十七天
浙大疏锦行-CSDN博客
编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值)
import functoolsdef logger(func):@functools.wraps(func) # 保留原函数的元信息(如函数名)def wrapper(*args, **kwargs):# 执行前:打印函数名和参数args_repr = [repr(a) for a in args] # 将位置参数转换为字符串kwargs_repr = [f"{k}={repr(v)}" for k, v in kwargs.items()] # 将关键字参数转换为字符串all_args = ", ".join(args_repr + kwargs_repr) # 合并所有参数print(f"[日志] 开始执行 {func.__name__}({all_args})")# 执行原函数并记录返回值result = func(*args, **kwargs)# 执行后:打印返回值print(f"[日志] {func.__name__} 返回: {repr(result)}")return resultreturn wrapper
@logger
def add(a, b):"""计算两数之和"""return a + b@logger
def greet(name, greeting="Hello"):"""打招呼"""return f"{greeting}, {name}!"# 测试函数
print(add(3, 5))
print(greet("Alice", greeting="Hi"))