欢迎访问宙启技术站
智能推送

Python装饰器-让函数更加优雅

发布时间:2023-06-25 07:49:42

Python装饰器是一种可用于修改或增强函数功能的语法结构,可以在不修改原函数代码的情况下,为函数添加新的功能。

装饰器的使用是通过一个函数来包装原函数,使得当调用原函数时,会先执行装饰器函数,再执行原函数。由于装饰器函数可以接受原函数作为参数,因此可以在装饰器函数中对原函数进行修改,从而增强其功能。

例如,我们有一个计算函数:

def add(a, b):
    return a + b

我们想要为这个函数增加一个打印日志的功能,可以使用装饰器来实现:

def log(func):
    def wrapper(*args, **kwargs):
        print(f"calling {func.__name__} with args:{args} kwargs:{kwargs}")
        return func(*args, **kwargs)
    return wrapper

@log
def add(a, b):
    return a + b

这里定义了一个装饰器函数log,它接受一个参数func,这个参数是被装饰的函数,即上面的add函数。在装饰器函数中,我们定义了一个内部函数wrapper,它接受任意的参数和关键字参数,并在函数执行前打印日志,然后调用原函数并返回其结果。

最后,我们使用@log语法将add函数装饰起来,这等价于将add函数作为参数传递给log函数,并将log函数的返回值赋值给add函数。这样,在调用add函数时,实际上会先执行log函数,再执行add函数。

调用装饰后的函数:

result = add(1, 2)
print(result)

输出如下日志信息:

calling add with args:(1, 2) kwargs:{}
3

可以看到,装饰器函数成功地为add函数增加了打印日志的功能,这在一些调试场景下非常有用。

除了增强函数的功能外,装饰器还可以用于统计函数的执行时间、缓存函数的结果等场景。由于装饰器可以链式调用,因此可以将许多装饰器组合在一起使用,进一步增强函数的功能。

装饰器是Python中非常强大的语法特性,它可以让函数更加优雅、简洁,同时增强其功能,提高代码的可读性和可维护性。掌握装饰器的使用是Python程序员必不可少的技能之一。