装饰器复习

Posted bigdata_devops

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器复习相关的知识,希望对你有一定的参考价值。

装饰器前奏:

装饰器变形:

(1)第一种变形

(2)第二种变形

(3)第三种变形

(4)第四种变形(正确且标准得装饰器)

装饰器装饰带有参数的函数:

 

带标志位的装饰器:

 

应用场景:例如装饰器是为了测试代码运行时间,但是生产环境上线是需要去掉多余得功能,这时候可以把装饰器标志位改为False即可,避免了频繁的删除操作。

带参数的装饰器:

import time

current_login = {\'name\': None, \'login\': False}

def timmer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)  # my_max(1,2)
        stop_time = time.time()
        print(\'run time is %s\' % (stop_time - start_time))
        return res
    return wrapper

def auth2(auth_type=\'file\'):
    def auth(func):
        # print(auth_type)
        def wrapper(*args, **kwargs):
            if current_login[\'name\'] and current_login[\'login\']:
                res = func(*args, **kwargs)
                return res
            if auth_type == \'file\':
                name = input(\'username: \')
                password = input(\'password: \')
                if name == \'luchuan\' and password == \'123\':
                    print(\'auth successfull\')
                    res = func(*args, **kwargs)
                    current_login[\'name\'] = name
                    current_login[\'login\'] = True
                    return res
                else:
                    print(\'auth error\')
            elif auth_type == \'sql\':
                print(\'还他妈不会玩\')
        return wrapper
    return auth

@timmer
@auth2(auth_type=\'file\')  # @auth  #index=auth(index)
def index():
    print(\'welcome to inex page\')

@auth2()
def home():
    print(\'welcome to home page\')

# 调用阶段
index()
home()

以上是关于装饰器复习的主要内容,如果未能解决你的问题,请参考以下文章

Python_装饰器复习_30

Python(72)_生成器函数与装饰器复习

python-flask复习—— 装饰器的坑及解决办法flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件重定义错误页面)

Python基础装饰器

装饰器复习

函数复习