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

Python装饰器及应用场景

发布时间:2023-06-17 00:35:03

一、什么是Python装饰器

Python装饰器是一个能够修改其他函数的功能的函数。它们是最有力的Python工具之一,使得程序员可以创建优美而健壮的代码。装饰器在不改变原函数的前提下,可增强其功能或者改变其行为。

二、Python装饰器的示例

下面是Python装饰器的示例:

def decorator(func):
    def decorated():
        print("Before the function is called.")
        func()
        print("After the function is called.")
    return decorated
 
@decorator
def main_function():
    print("I'm a function!")
    
main_function()

该示例中,“decorator”函数是一个装饰器,使用@符号将其应用于“main_function”函数中。当“main_function”被调用时,将先执行“decorator”函数,“decorated”函数中再去执行真正的函数“main_function”。

三、Python装饰器的应用场景

1.打印日志

在函数调用前后打印出“函数开始执行”和“函数执行结束”的日志:

def log(func):
    def wrapper(*args, **kwargs):
        print("函数开始执行")
        func(*args, **kwargs)
        print("函数执行结束")
    return wrapper

@log
def add(a, b):
    print("%d + %d = %d" % (a, b, a+b))

add(1, 2)

2.身份认证

在函数调用前,对用户进行身份验证:

def authenticate(func):
    def wrapper(*args, **kwargs):
        if check_user_auth():
            func(*args, **kwargs)
        else:
            raise Exception("请先登录")
    return wrapper

@authenticate
def add(a, b):
    print("%d + %d = %d" % (a, b, a+b))

add(1, 2)

3.缓存

在函数被调用时,将其返回的结果缓存下来,避免重复计算:

from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(6))

4.计时器

统计函数执行时间:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        print("函数执行时间:%.2f秒" % (end_time - start_time))
    return wrapper

@timer
def sleep_3_seconds():
    print("开始睡眠3秒")
    time.sleep(3)
    print("结束睡眠")

sleep_3_seconds()

四、总结

Python装饰器可以使代码更加优美而健壮,它具有灵活可扩展的特性,并且可以应用于各个场景,如日志打印、身份验证、缓存、计时器等,使程序的开发与维护更加方便和简单。