无参装饰器作业

# 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
# 二:编写装饰器,为函数加上统计时间的功能
# 三:编写装饰器,为函数加上认证的功能
import time
def timer(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        a = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
        print(a)
        return res
    return wrapper

def homer(func):
    def wrapper(*args,**kwargs):
        name = input('your name>>: ').strip()
        pwd = input('your password>>: ').strip()
        if name == 'ass' and pwd == '123':
            res = func(*args, **kwargs)
            print('hello %s'%name,end=' ')
            return res
        else:
            print('账号密码错误')
    return wrapper

@timer
@homer
def index():
    time.sleep(1)
index()
# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
login_user = {'name': None}
def login(func):
    def wrapper(*args,**kwargs):
        if login_user['name']:
            return func(*args, **kwargs)
        while True:
            inp_name = input('输入账号:').strip()
            with open('a.txt', 'rt', encoding='utf-8')as f:
                for i in f:
                    line = i.strip()
                    print(line)
                    user_dic = eval(line)
                    if user_dic['name'] == inp_name:
                        while True:
                            inp_pwd = input('输入密码:').strip()
                            if inp_pwd == user_dic['pwd']:
                                print('登入成功')
                                login_user['name'] = inp_name
                                return func(*args, **kwargs)
                            else:
                                print('密码错误')
    return wrapper
@login
def a():
    print('1')
@login
def b():
    print('2')
@login
def c():
    print('3')
a()
b()
c()
# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

猜你喜欢

转载自www.cnblogs.com/bk134/p/12553804.html