• 作业14


    作业14

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

    import time
    def du():
        print("嘟嘟喂嘟嘟")
        time.sleep(2)
    
    

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

    
    import time
    
    
    def timmer(func):
        def wrapper(*args,**kwargs):
            start_time = time.time()
            res = func(*args,**kwargs)
            stop_time = time.time()
            print("程序运行时间为{}".format(stop_time-start_time))
            return res
        return wrapper
    
    
    @ timmer
    def du():
        print("嘟嘟喂嘟嘟")
        time.sleep(2)
    
    
    du()
    

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

    import time
    
    
    def identify(func):
        def wrapper(*args,**kwargs):
            inp_user = input("请输入用户名:")
            inp_password = input("请输入密码:")
            with open("user_info.txt","r",encoding="utf-8") as f:
                for line in f:
                    user,password = line.strip().split(":")
                    if user == inp_user and password == inp_password:
                        print("登录成功")
                        break
                    elif user == inp_user and password != inp_password:
                        print("密码错误")
                        return
                else:
                    print("用户名不存在")
                    return
            res = func(*args,**kwargs)
            return res
        return wrapper
    
    
    @ identify
    def du():
        print("嘟嘟喂嘟嘟")
        time.sleep(2)
    
    
    du()
    

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

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

    import time
    online_user = None
    
    
    def identify(func):
        def wrapper(*args, **kwargs):
            global online_user
            if not online_user:
                inp_user = input("请先登录,输入用户名:")
                inp_password = input("请输入密码:")
                with open("user_info_dict.txt", "r", encoding="utf-8") as f:
                    for line in f:
                        user_dict = eval(line.strip())
                        if user_dict.get("name") == inp_user and user_dict.get("password") == inp_password:
                            print("登录成功")
                            online_user = inp_user
                            break
                        elif user_dict.get("name") == inp_user and user_dict.get("password") != inp_password:
                            print("密码错误")
                            return
                    else:
                        print("用户名不存在")
                        return
            res = func(*args, **kwargs)
            return res
    
        return wrapper
    
    
    @identify
    def du():
        print("DJ,开始")
        print("嘟嘟~嘟嘟~
    嘟嘟喂嘟嘟")
        time.sleep(2)
    
    
    @identify
    def efs():
        print("DJ,开始")
        print("857~
    857!")
    
    
    du()
    efs()
    
    
    
    
    

    五:编写装饰器,为多个函数加上认证功能,

    要求登录成功一次,在超时时间内无需重复登录,

    超过了超时时间,则必须重新登录

    import time
    
    online_user = None
    online_time = 0
    
    
    def identify(func):
        def wrapper(*args, **kwargs):
            global online_user, online_time
            now_time = time.time()
            if not (online_user and now_time - online_time <= 180):
                inp_user = input("请先登录,输入用户名:")
                inp_password = input("请输入密码:")
                with open("user_info_dict.txt", "r", encoding="utf-8") as f:
                    for line in f:
                        user_dict = eval(line.strip())
                        if user_dict.get("name") == inp_user and user_dict.get("password") == inp_password:
                            print("登录成功")
                            online_user = inp_user
                            online_time = time.time()
    
                            break
                        elif user_dict.get("name") == inp_user and user_dict.get("password") != inp_password:
                            print("密码错误")
                            return
                    else:
                        print("用户名不存在")
                        return
            res = func(*args, **kwargs)
            return res
    
        return wrapper
    
    
    @identify
    def du():
        print("DJ,开始")
        print("嘟嘟~嘟嘟~
    嘟嘟喂嘟嘟")
        time.sleep(2)
    
    
    @identify
    def efs():
        print("DJ,开始")
        print("857~
    857!")
        time.sleep(2)
    
    
    du()
    print(time.time())
    efs()
    print(time.time())
    time.sleep(176)
    print(time.time())
    du()
    print(time.time())
    du()
    print(time.time())
    

    六:选做题

    思考题(选做),叠加多个装饰器,

    加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下

    @deco1 # index=deco1(deco2.wrapper的内存地址)

    @deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)

    @deco3 # deco3.wrapper的内存地址=deco3(index)

    def index():

    pass

    import time
    
    
    def deco1(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            print("1开始", start_time)
            res = func(*args, **kwargs)
            stop_time = time.time()
            print("1结束", stop_time)
            return res
    
        return wrapper
    
    
    def deco2(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            print("2开始", start_time)
            res = func(*args, **kwargs)
            stop_time = time.time()
            print("2结束", stop_time)
            return res
    
        return wrapper
    
    
    def deco3(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            print("3开始", start_time)
            res = func(*args, **kwargs)
            stop_time = time.time()
            print("3结束", stop_time)
            return res
    
        return wrapper
    
    
    @deco1
    @deco2
    @deco3
    def test():
        print("执行test")
    
    
    test()
    

    1

  • 相关阅读:
    iphoneX 兼容
    app 判断网络状态
    app 版本升级
    express 安装
    app打开QQ与陌生人聊天
    app项目中几个常用的cordvoa插件
    axios请求拦截器和相应拦截器
    vue中MD5+base64加密
    想啥写啥
    react canvas圆环动态百分比
  • 原文地址:https://www.cnblogs.com/achai222/p/12553229.html
Copyright © 2020-2023  润新知