zoukankan      html  css  js  c++  java
  • day014作业

    作业:

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

    ANSR:

    def func(name):
        time.sleep(2)
        print("This is home of ",name)
        return "D.J.Trump"
    
    # 二:编写装饰器,为函数加上统计时间的功能
    

    ANSR:

    import time
    from functools import wraps
    
    def timmer(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            start_time = time.time()
            res = func(*args,**kwargs)
            stop_time = time.time()
            print("run time is %s s" %(stop_time - start_time))
            return res
    
        return wrapper
    
    @timmer
    def func(name):
        time.sleep(2)
        print("This is home of ",name)
        return "D.J.Trump"
    
    func("Trump")   # This is home of  Trump
                    # run time is 2.0006821155548096 s
    
    # 三:编写装饰器,为函数加上认证的功能
    

    ANSR:

    import time
    from functools import wraps
    
    def auth(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            name = input("用户名:").strip()
            pwd = input("密码: ").strip()
            if name == "egon" and pwd == "250":
                print("用户认证成功!")
                res = func(*args,**kwargs)
                return res
            else:
                print("用户名或密码错误,登录失败!")
    
        return wrapper
    
    @auth
    def func(name):
        time.sleep(2)
        print("This is home of ",name)
        return "D.J.Trump"
    
    func("Trump")   # 用户名:egon
                    # 密码: 250
                    # 用户认证成功!
                    # This is home of  Trump
    
    # 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
    

    ANSR:

    import time
    from functools import wraps
    
    login_user = None
    def auth(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            name = input("用户名:").strip()
            pwd = input("密码: ").strip()
            with open(r"db.txt",mode="rt",encoding="utf-8") as f:
                for line in f:
                    dic = eval(line)
                    if name == dic["name"] and pwd == dic["password"]:
                        print("用户认证成功!")
                        login_user = name
                        res = func(*args,**kwargs)
                        return res
                else:
                    print("用户名或密码错误,登录失败!")
    
        return wrapper
    
    @auth
    def func(name):
        time.sleep(2)
        print("This is home of ",name)
        return "D.J.Trump"
    
    func("Trump")   # 用户名:egon
                    # 密码: 123
                    # 用户认证成功!
                    # This is home of  Trump
    
    # 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
    

    ANSR:

    import time
    from functools import wraps
    
    login_user = None
    def auth(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            name = input("用户名:").strip()
            pwd = input("密码: ").strip()
            with open(r"db.txt",mode="rt",encoding="utf-8") as f:
                for line in f:
                    dic = eval(line)
                    if name == dic["name"] and pwd == dic["password"]:
                        print("用户认证成功!")
                        login_user = name
                        start_time = time.time()  
                        res = func(*args,**kwargs)
    
                        while True:
                            stop_time = time.time()
                            time.sleep(2)
                            run_time = stop_time - start_time
                            if run_time >= (3600):  
                                print("您已登录{}小时,为保证您账户的安全,系统已为您下线,请重新登录".format((run_time / 60 / 60)))
                                login_user = None
                                break
    
                        return res
                else:
                    print("用户名或密码错误,登录失败!")
    
        return wrapper
    
    @auth
    def func(name):
        time.sleep(2)
        print("This is home of ",name)
        return "D.J.Trump"
    
    func("Trump")
    
    # 六:编写装饰器,为多个函数加上记录日志的功能:函数一旦运行则按照下述格式记录日志
        函数开始执行的时间  函数名  返回值
        2020-06-18 12:13:38  index  456
        2020-06-18 12:13:39  home  123
    
        提示:
            统计时间time.strftime('%Y-%m-%d %H:%M:%S')
            函数名func.__name__
    

    ANSR:

    /
    
  • 相关阅读:
    读javascript高级程序设计08-引用类型之Global、Math、String
    读javascript高级程序设计07-引用类型、Object、Array
    读javascript高级程序设计06-面向对象之继承
    读javascript高级程序设计05-面向对象之创建对象
    读javascript高级程序设计04-canvas
    读javascript高级程序设计03-函数表达式、闭包、私有变量
    读javascript高级程序设计02-变量作用域
    C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
    【转】 C#中Finally的一个不太常见的用法
    一看就懂的ReactJs入门教程-精华版
  • 原文地址:https://www.cnblogs.com/huluhuluwa/p/13160946.html
Copyright © 2011-2022 走看看