装饰器

装饰器

一:什么是装饰器?

装饰器就是装饰函数的函数,为函数添加功能的容器

二:为什么要有装饰器?

代码开发遵循开放封闭原则,针对源码是封闭的,不建议修改,但是扩展是开放的,装饰器是在,不修改原来代码情况下,对功能进行扩展。

三:如何使用装饰器

# 无参数装饰器模板
def wrapper(func):
	def inner(*args,**kwargs):
        res = func(*args,**kwargs)
        reunrn res
    retun inner

示列
#  写一个程序运行,计算程序快慢
import time
def timer(func):
    def wrapper(*args,**kwargs):
        start_t = time.time()
        res = func(*args,**kwargs)
        end_t = time.time()
        pritn("这个程序运行时间:{}".format(end_t-start_t))
        return res
    return wrapper

def foo():
    print(1)
    time.sleep(2)

foo=timer(foo)
foo()

@timer   # bar = timer(bar)
def bar(a,b):
    print(a,b)
    return a,b

bar(1,3)

有参数装饰器

def outer(type_):
    
    def wrapper(func):
        def inner(*args,**kwargs):
            inp_name = input('请输入你的用户名:')
            inp_pwd = input('请输入你的密码:')
            if type_ == 'mysql': # 这段代码过段时间补充上去
                pass
            elif type_ == 'LDAP': # 这段代码过段时间补充上去
                imp
                pass
            elif type_ == 'file':
                with open(r'db.txt',encoding='utf-8',mode='rt') as f:
                    for line in f:
                        q_name, q_pwd = line.strip().split(':')
                        if q_name == inp_name and q_pwd == inp_pwd:
                            res = func(*args,**kwargs)
                            return res
                    else:
                        print("密码或者用户名错误!")
                
        return inner
    return wrapper





posted @ 2020-06-18 21:58  为了等  阅读(114)  评论(0编辑  收藏  举报