作业3月23号

一:编写函数,(函数执行的时间用time.sleep(n)模拟)

二:编写装饰器,为函数加上统计时间的功能

import time
def timmer(func):
    def wrapper(*args,**kwargs):
        start=time.time()
        res=func(*args,**kwargs)
        stop=time.time()
        print(stop - start)
        return res

 

三:编写装饰器,为函数加上认证的功能

四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式

五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

import time
login_user = None
login_time = None

def check_session(func):
    time_out = 4
    def wrapper(*args,**kwargs):
        global login_user,login_time
        res = func(*args,**kwargs)
        end = time.time()
        if end - login_time > time_out:
            login_user = None
            print('登陆超时')
            login_time = None
        return res
    return wrapper



def check_login(func):
    def wrapper(*args, **kwargs):
        global login_user,login_time
        if login_user:
            func(*args, **kwargs)
        else:
            ipt_account = input('输入账号:').strip()
            ipt_pwd = input('输入密码:').strip()
            with open('db.txt', mode='rt', encoding='utf-8') as f:
                for i in f:
                    if [ipt_account, ipt_pwd] == i.strip('\n').split(':'):
                        login_user = ipt_account
                        print('登陆成功,现在可以使用功能')
                        login_time = time.time()
                        break
                else:
                    print('账户名或密码错误,无法使用功能')

    return wrapper


@check_session
@check_login
def func1(cmd):
    print('func1', cmd)



@check_session
@check_login
def func2(cmd):
    print('func2', cmd)


menu = {
    '1': ['func1', func1],
    '2': ['func2', func2],
    '3': ['exit', exit]
}

while True:
    for i in menu:
        print(i, menu[i][0])

    cmd = input('cmd:').strip()
    menu[cmd][1](cmd)

 

posted @ 2020-03-23 22:02  疏星淡月  阅读(142)  评论(0编辑  收藏  举报