day17 python作业

一:编写函数,(函数执行的时间用time.sleep(n)
模拟)
二:编写装饰器,为函数加上统计时间的功能

def outer():
    import time
    import functools

    def wrapper(func):
        @functools.wraps(func)
        def inner():
            start_time = time.time()
            func()
            stop_time = time.time()
            print('%s:函数的执行时间是:%s' % (func.__name__, (stop_time - start_time)))

        return inner

    @wrapper
    def execute_time():
        """
        统计函数时间
        :return:
        """
        time.sleep(0.8)
        print('这是执行函数')

    execute_time()
    print(execute_time.__name__)
    print(help(execute_time))

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

login_flag = False


def auth(fla):
    def login_auth(func):
        def inner(*args, **kwargs):
            if fla:
                func(*args, **kwargs)
            else:
                return print('先登录')

        return inner

    return login_auth


@auth(login_flag)
def home():
    """home"""
    print('这是首页')


home()

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

import time

s = 0


def wrapper(func):
    stay_time = 6

    def inner(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        stop_time = time.time()
        global s
        s += stop_time - start_time
        if s >= stay_time:
            print(s)
            print('登陆超时需要重新登陆')
            login()
            s = 0
        else:
            print(s)

    return inner


@wrapper
def f1():
    time.sleep(3)
    print('这是f1')


@wrapper
def f2():
    print('这是f2')


@wrapper
def login():
    name = input('输入账号:')
    pwd = input('输入密码:')
    if name == 'alex' and pwd == '123':
        print('登陆成功')
    else:
        print('user or pwd error')


login()

f1()

f2()
posted @ 2020-03-24 20:54  nick_xm  阅读(128)  评论(0编辑  收藏  举报