装饰器

装饰器:定义一个函数,为其他函数添加额外功能

def index(x,y,z):
    print(x,y,z)
def outter(func):
    def wrapper(*args,**kwargs):
        import time
        start = time.time()
        res = func(*args,**kwargs)
        end = time.time()
        return res
    return wrapper
index = outter(index)
index(1,2,3)

开放封闭原则:拓展功能开放,修改源码封闭

语法糖:@timmer

def auth(func):
    def wrapper(*args,**kwargs):
        # 1、调用原函数
        # 2、为其增加新功能
        name=input('your name>>: ').strip()
        pwd=input('your password>>: ').strip()
        if name == 'egon' and pwd == '123':
            res=func(*args,**kwargs)
            return res
        else:
            print('账号密码错误')
    return wrapper



@auth
def index():
    print('from index')

index()
@func
把下面的函数名传入@后面的函数名加括号的里面的参数,然后将返回值赋值给下面的函数名

wrapper.__name__ = func.__name__
wrapper.__doc__ = func.__doc__

from functools import wraps

在wrapper定义上再加装饰器
@wraps(func)

wapper改了参数,那index调用的时候也得变,那就不符合要求了

有参装饰器:

from functools import wraps

def auth(x1,y1,z1):
    def outter(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            import time
            start = time.time()
            res = func(*args,**kwargs)
            end = time.time()
            print(x1,y1,z1)
            return res
        return wrapper
    return outter

@auth(0,0,0)
def index(x,y,z):
    print(x,y,z)

index(1,2,3)
print(index.__name__)

装饰器调用:
加载顺序:自下而上
最终index就是最外层的wrapper

执行顺序:从外层到内层

posted @   pythoner_wl  阅读(78)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示