def log(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with {args}, {kwargs}")
return func(*args, **kwargs)
return wrapper
'''
log 是一个装饰器函数,它接受一个函数 func 作为参数。
wrapper 是一个内部函数,它接受任意数量的位置参数 *args 和关键字参数 **kwargs。
在 wrapper 函数中,首先打印一条日志信息,显示正在调用的函数名称和传递的参数。
然后,wrapper 函数调用原始的 func 函数,并将结果返回。
log 函数返回 wrapper 函数。
'''
@log
def add(x, y):
return x + y
'''
@log 是一个装饰器语法糖,它等价于 add = log(add)。
这意味着 add 函数被 log 装饰器包装,add 现在指向 wrapper 函数。
'''
print(add(2, 3)) # Calling add with (2, 3), {} 5
'''
当你调用 add(2, 3) 时,实际上调用的是 wrapper(2, 3)。
wrapper 函数首先打印日志信息:Calling add with (2, 3), {}。
然后,wrapper 函数调用原始的 add 函数:add(2, 3),并返回结果 5。
最后,print 函数输出结果:5。
'''