栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 装饰器模板 、自定义@语法糖

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 装饰器模板 、自定义@语法糖

装饰器:增加新功能,但不改变原来的调用方式,也不改变原函数的代码。

# 无参装饰器:2层 

from functools import wraps
def auth(func):
    # func = 被装饰对象的内存地址
    @wraps(func)
    def wrapper(*args,**kwargs):
        # 将原函数的属性赋值给装饰器:
        # 1)手动复制
        # wrapper.__name__ = func.__name__
        # wrapper.__doc__ = func.__doc__
        # 2)用系统提供的装饰器wraps
        # from functools import wraps
        # ...
        # @wraps
        # ...
        # 1.调用原函数
        # 2.增加新功能
        # ......
        res = func(*args,**kwargs)
        # ......
        return res
    return wrapper # 闭包,保证wrapper可用func的参数

@auth # 等价于 index=auth(index)
def index(x,y):
    print("output---%s,%s"%(x,y))

index(1,2)

# 有参装饰器:3层 

from functools import wraps
def auth(db_type):
    def deco(func):
        # func = 被装饰对象的内存地址
        @wraps(func)
        def wrapper(*args,**kwargs):
            # 将原函数的属性赋值给装饰器:
            # 1)手动复制
            # wrapper.__name__ = func.__name__
            # wrapper.__doc__ = func.__doc__
            # 2)用系统提供的装饰器wraps
            # from functools import wraps
            # ...
            # @wraps
            # ...
            # 1.调用原函数
            # 2.增加新功能
            # ......
            res = func(*args,**kwargs)
            # ......
            return res
        return wrapper # 闭包,保证wrapper可用func的参数
    return deco

@auth(db_type='mysql') # 1)@deco # 2)index = deco(index) # 3) index=wrapper
def index(x,y):
    print("output---%s,%s"%(x,y))

index(1,2)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号