ⅩⅥ:作业

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

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

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

import time
def run_time(func):
    def inner(*args, **kwargs):
        start = time.time()
        func(*args, **kwargs)
        stop = time.time()
        print('run func\'s time is', stop-start)
    return inner

@run_time
def index(*args, **kwargs):
    time.sleep(1)
    print('welcome index')
index()

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

import time
def inner(func):
    inp_user = input('your name:').strip()
    inp_pwd = input('your password:').strip()
    def file():
        with open(r'db.txt', 'rt', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                user_dic = eval(line)
                if inp_user == user_dic['name']:
                    if inp_pwd == user_dic['password']:
                        print('login successful')
                        func(inp_user)
                        break
                    else:
                        print('password err')
                        break
            else:
                print('user is not find')
    return file

@inner
def index(name):
    time.sleep(1)
    print('welcome 【%s】' % name)
index()

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

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

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

六:选做题

# 思考题(选做),叠加多个装饰器,加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下
# @deco1 # index=deco1(deco2.wrapper的内存地址)
# @deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
# @deco3 # deco3.wrapper的内存地址=deco3(index)
# def index():
#     pass

猜你喜欢

转载自www.cnblogs.com/qujiu/p/12555348.html