zoukankan      html  css  js  c++  java
  • 作业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

  • 相关阅读:
    grunt in webstorm
    10+ Best Responsive HTML5 AngularJS Templates
    响应式布局
    responsive grid
    responsive layout
    js event bubble and capturing
    Understanding Service Types
    To add private variable to this Javascript literal object
    Centering HTML elements larger than their parents
    java5 新特性
  • 原文地址:https://www.cnblogs.com/achai222/p/12553229.html
Copyright © 2011-2022 走看看