Python 装饰器

yueyue · 2022年02月15日 · 1803 次阅读

个人理解的装饰器即将函数作为参数进行调用,适用于多个函数执行所要调用的公共代码,类似于 unittest 中的 setup 或者 teardown。

引用规则
@ 装饰器方法名

实际应用

  • 以登录功能为例,执行 fun1,fun2 都需要校验用户是否登录。
def is_login(func):
    def decorate():
        url = ""  # 登录接口地址
        header = {}  # 登录接口请求体
        body = {}  # 登录接口请求体
        response = requests.post(url=url,data=body,headers=header)
        if response.status_code == 200:
            print("登录成功")
            func()
        else:
            print("登录失败,请重试")
    return decorate


@is_login   # 调用装饰器
def fun1():
    """
    登录成功后执行的操作
    """
    pass


@is_login  # 调用装饰器
def fun2():
    """
    登录成功后执行的操作
    """

  • 以 0-100 求和计算为例,函数是否带参数,是否带返回值,代码写法有所区别。
"""
不带参数,不带返回值
"""

def cal_sum_01(func):
    def wrapper():
        func()
    return wrapper


@cal_sum_01
def data_sum_01():
   print(sum(range(1,100)))



"""
带参数,不带返回值
"""
def cal_sum_02(func):
    def wrapper(number):
        func(number)
    return wrapper


@cal_sum_02
def data_sum_02(number):
   print(sum(range(1,number)))


"""
不带参数,带返回值
"""
def cal_sum_03(func):
    def wrapper():
        result = func()
        print(result)
    return wrapper


@cal_sum_03
def data_sum_03():
    return sum(range(1,100))

# 调用函数  
data_sum_01()
data_sum_02(100)
data_sum_03()
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册