python 装饰器用法

本文深入探讨了Python中装饰器的应用,包括简单的装饰器用于计时和打印信息,以及更复杂的装饰器实现请求验证功能,通过具体示例展示了装饰器如何增强函数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一: 简单测试的装饰器

import functools
import time


def test(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)
        print('I am a test decorator')

    return wrapper


def times(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)  # func(a, b)   都可以
        end_time = time.time()
        print(end_time - start_time)
        return end_time - start_time

    return wrapper


@times
def fun(a, b):
    print("hello")
    time.sleep(1)
    print(a, b)
    print("world")


@times
@test
def fun2(*args, **kwargs):
    print('this is fun2')
    time.sleep(0.5)


if __name__ == '__main__':
    fun(2, 3)
    fun2(1, 2, 3)

运行结果

hello
2 3
world
1.001413345336914
this is fun2
I am a test decorator
0.5009095668792725```

二:稍微复杂一点的装饰器:
这个装饰器是判断一般请求需要携带token才能访问到的。

```powershell
import functools

def check_token(token_field='token', method=GET):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(request):
            paras = get_paras_from_request(request, method)
            token = paras.get(token_field, '')
            if not token:
                return error_response('请传入 token')
            query_result = User.objects.filter(token=token)
            if not query_result:
                return error_response('token 错误,请传入正确的 token')
            return func(request)

        return wrapper

    return decorator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BRYTLEVSON

打赏的都是天使,创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值