装饰器常用形态(结合装饰器起飞版来看)

在inner()函数中:                                                                                       #  结合装饰器起飞版来看

1.inner()函数中,在被装饰函数之前添加新功能(执行)                             如 用户登录

2.inner()函数中,在被装饰函数之后添加新功能(执行)                             如 关闭浏览器,断开数据库连接

3.被装饰函数的前后都添加新功能(执行)                                                       如 用于统计被装饰函数的花费时间

4.inner()函数中,未添加任何新的功能,直接引用原函数,就相当于空装饰器,

    调用被空装器装饰的函数就是调用原函数自己     如:登录装饰器,避免重复登录  (例题待更新

例题:用户登录装饰器  执行使用其它功能前必须先登录 

def  login(func):
    # 2、启动购物程序前,必须要先登录  def login   读文件 做对比   装饰器
    def inner():
        if not islogin:
            uname = input('请输入登录名:').strip()
            pword = input('请输入密码:').strip()
            with open('a.txt','r',encoding='utf-8') as f2:
                for line in f2:     #这里存入json 文件比较好判断
                    line = line.strip('
')   # line = ['seen','123456']
                    line = line.split('|')
                    if uname == line[0] and pword == line[1]:
                        print('登录成功')
                        return func()         #结束当前函数体
                else:
                    print('你输入的用户名或密码不正确')
        else:
            func()                 #如果登录成功则执行返回空装饰器,被装饰的函数执行函数本身
    return inner
原文地址:https://www.cnblogs.com/bigbox/p/11854467.html