day17 作业

目录一、编写函数(函数执行的时间用time.sleepn)模拟)二、编写装饰器,为函数加上统计时间的功能三、编写装饰器,为函数加上认证的功能四、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码五、编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

一、编写函数(函数执行的时间用time.sleepn)模拟)

import time
def time_sleepn):
    print"函数开始")
    time.sleepn)
    print"函数结束")
time_sleep1)

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

import time
def timmerfunc):
    def outter*args,**kwargs):
        start = time.time)
        func*args,**kwargs)
        stop = time.time)
        printstop - start)
    return outter
@timmer
def time_sleepn):
    print"函数开始")
    time.sleepn)
    print"函数结束")
time_sleep1)

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

def loginfunc):
    """登录装饰器"""
    def wrapper*args,**kwargs):
        name_inp = input"请输入你的用户名:")
        pwd_inp = input"请输入你的密码:")
        with open"a.txt","r",encoding="utf-8") as f:
            for line in f :
                name,password = line.strip).split":")
                if name ==name_inp and password == pwd_inp:
                    print"登录成功")
                    func*args,**kwargs)
                    return
            else:
                    print"输入错误")
    return wrapper
@login
def eatn):
    """吃东西"""
    printf"吃{n}吨屎")
eat100)

四、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

注意:从文件中读出字符串形式的字典,可以用eval'{"name":"egon","password":"123"}’)转成字典格式

is_login = False
def judge_loginlogin_user):
    def loginfunc):
        def wrapper*args,**kwargs):
            if not login_user:
                name_inp = input"请输入你的用户名:")
                pwd_inp = input"请输入你的密码:")
                with open"a.txt","r",encoding="utf-8")as f :
                    for line in f:
                        name,pwd = line.strip).split":")
                        if name == name_inp and pwd_inp == pwd:
                            print"登录成功")
                            func*args,**kwargs)
                            global is_login
                            is_login = True
                            break
                    else:
                        print"登录失败")
            else:
                func*args,**kwargs)
        return wrapper
    return login
@judge_loginis_login)
def eat_chickenn):
    '''吃鸡腿'''
    printf"吃{n}个鸡腿")
eat_chicken1)
@judge_loginis_login)
def eat_chocolatesm):
    '''吃巧克力'''
    printf"吃{m}个巧克力")
eat_chocolates2)

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

import time
user_list={"name" : None, "password":None ,"now":None,"timeout":5}
def loginfunc):
    def wrapper*args,**kwargs):
        if user_list['name']:
            timeout = time.time) - user_list['timeout']
            if timeout < user_list['now']:
                return func*args, **kwargs)
            else:
                print"已超时")
        name_inp = input"请输入你的用户名:")
        pwd_inp = input"请输入你的密码:")
        if name_inp == "hz" and pwd_inp == "123":
            print"登录成功")
            user_list["name"]=name_inp
            user_list["password"]=pwd_inp
            user_list["now"]=time.time)
            func*args,**kwargs)
        else:
            print"登录失败")
    return wrapper
@login
def eat_chickenn):
    '''吃鸡腿'''
    time.sleep2)
    printf"吃{n}个鸡腿")
eat_chicken1)
@login
def eat_chocolatesm):
    '''吃巧克力'''
    printf"吃{m}个巧克力")
    time.sleep3)
eat_chocolates2)
@login
def eat_pign):
    printf"吃{n}头猪")
eat_pig1000)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注