3.23作业

# 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def index():
    time.sleep(3)
    print('工具人')

  

# 二:编写装饰器,为函数加上统计时间的功能
import time
def timeer(func):
    def upper(*args,**kwargs):
        start_time=time.time()
        func(*args,**kwargs)
        last_time=time.time()
        print('执行需要:',last_time - start_time)
    return upper
@timeer
def index():
    time.sleep(3)
    print('工具人')
index()

  

# 三:编写装饰器,为函数加上认证的功能
def timeer(func):
    def upper(*args,**kwargs):
        name=input('请输入您的用户名').strip()
        psw=input('请输入您的密码').strip()
        if name =='zcy' and psw =='666':
            func(*args, **kwargs)
        else:
            print('账户密码输入错误')

    return upper
@timeer
def index():
    time.sleep(3)
    print('工具人')
index()

  

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

login_user=None def verify(func): def upper(*args,**kwargs): global login_user if not login_user: namer=input('请输入您的用户名:').strip() psd=input('请输入您的密码:').strip() with open('db',mode='r',encoding='utf-8') as f: for line in f: user_info = eval(line) if namer==user_info['name'] and psd==user_info['password']: print('认证成功') login_user =111 func(*args, **kwargs) else: print('认证失败') return upper() @verify def money(): print('钞能力') @verify def got(): print('提取')

 

# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
login_user=None
import time
verify = {'login_time': 0,'out_time':5}
def auth(func):
    def wrapper(*args,**kwargs):
        global login_user
        start_time = time.time()
        if login_user == None:
            print('请先登录。')
            name = input('请输入用户名:').strip()
            psd = input('请输入密码:').strip()
            with open(r'db.txt','r',encoding='utf-8') as f:
                for line in f:
                    user_info = eval(line)
                    if name == user_info['name'] and psd == user_info['password']:
                        print('认证成功。')
                        login_user = name
                        func(*args, **kwargs)#如果登录时间超过5s下次执行指令需重新登录
                        verify['login_time'] = time.time()
                        if verify['login_time'] - start_time > verify['out_time']:
                            login_user = None
                    else:
                        print('认证失败。')
        else:
            func(*args,**kwargs)
    return wrapper

@auth
def money():
    print('钞能力')
@auth
def got():
    print('提取')
money()

  

 

posted @ 2020-03-23 20:29  清轩挽长风  阅读(108)  评论(0编辑  收藏  举报