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

    2020-06-18

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

    import time
    
    
    def index(x, n):
        print(x, 'from func')
        time.sleep(n)
        return 111


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

    import time
    
    
    def outer1(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            res = func(*args, **kwargs)
            end_time = time.time()
            print('Running time is %s' % (end_time - start_time))
            return res
    
        return wrapper
    
    
    index = outer1(index)


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

    def outer2(func):
        def wrapper(*args, **kwargs):
            inp_name = input("请输入您的用户名:").strip()
            inp_pwd = input("请输入您的密码:").strip()
            if inp_name == "jason" and inp_pwd == "123":
                print("认证成功!")
                res = func(*args, **kwargs)
                return res
            else:
                print("用户名或密码错误,认证失败!")
    
        return wrapper
    
    
    index = outer2(index)

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

    user_login = ""
    
    
    def outer3(func):
        def wrapper(*args, **kwargs):
            while user_login == "":
                inp_name = input("请输入您的用户名:").strip()
                inp_pwd = input("请输入您的密码:").strip()
                with open('registration.txt', mode='r', encoding='utf-8') as f:
                    for line in f:
                        if inp_name == eval(line)['name'] and inp_pwd == eval(line)['pwd']:  # 假设文件中用户信息以字典形式的字符串存放
                            print('login successfully!')
                            global user_login
                            user_login = inp_name
                        else:
                            print("login failure")
    
            res = func(*args, **kwargs)
            return res
    
        return wrapper
    
    
    @outer3
    def login():
        pass
    
    
    @outer3
    def transfer():
        pass
    
    
    @outer3
    def withdraw():
        pass

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

    import time
    from functools import wraps
    
    user_login = ""
    
    
    def outer4(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            while user_login == "":
                inp_name = input("请输入您的用户名:").strip()
                inp_pwd = input("请输入您的密码:").strip()
                with open('registration.txt', mode='r', encoding='utf-8') as f:
                    for line in f:
                        if inp_name == eval(line)['name'] and inp_pwd == eval(line)['pwd']:  # 假设文件中用户信息以字典形式的字符串存放
                            print('login successfully!')
                            global user_login
                            user_login = inp_name
                        else:
                            print("login failure")
    
            login_time = time.time()
            res = func(*args, **kwargs)  # 未完待续
    
            return res
    
        return wrapper

    六:编写装饰器,为多个函数加上记录日志的功能:函数一旦运行则按照下述格式记录日志
    函数开始执行的时间 函数名 返回值
    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__

    import time
    
    from functools import wraps
    
    
    def outer6(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            res = func(*args, **kwargs)
            with open('access.log', mode='a', encoding='utf-8') as f:
                print('%s %s %s
    ' % (time.strftime('%Y-%m-%d %H-%M-%S'), func.__name__, res))
            return res
    
        return wrapper
  • 相关阅读:
    spring2.5 mvc使用注解upload上传文件
    从5点来分析搜索引擎算法
    搜索引擎算法研究专题六:HITS算法
    搜索引擎算法研究专题五:TFIDF详解
    搜索引擎算法研究专题二:HITS算法及其衍生算法分析
    搜索引擎算法研究专题一:基于页面分块的搜索引擎排序算法改进
    搜索引擎算法研究专题三:聚集索引与非聚集索引介绍
    Spring最佳实践9.1 集成邮件服务
    搜索引擎算法研究专题四:随机冲浪模型介绍
    搜索引擎算法研究专题七:Hilltop算法
  • 原文地址:https://www.cnblogs.com/cui-cheng/p/13160843.html
Copyright © 2011-2022 走看看