day14 作业

一:编写函数,(函数执行时间用time.sleep(n)代表)

import  time
from functools import wraps
def timmer(n):
    time.sleep(n)
    print('=====>',n)

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

def outter(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        start=time.time()
        res=func(*args,**kwargs)
        stop=time.time()
        print(f'运行时间:{stop-start}')
        return res
    return wrapper
@outter
def timmer(n):
    time.sleep(n)
    print('=====>',n)
timmer(3)

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

def authenticate(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        while True:
            name=input('name:').strip()
            pwd=input('pwd:').strip()
            if name=='egon'and pwd=='123':
                print('登录成功!')
                break
            else:
                print('账号密码错误')
            res = func(*args, **kwargs)
            return res
    return wrapper
@authenticate
def timmer(n):
    time.sleep(n)
    print('=====>',n)
timmer(1)

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

def outter(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        with open('db.txt','r',encoding='utf-8')as f:
            for line in f:55
                info_dic=eval(line)
                name=input('name:')
                pwd=input('pwd:')
                if name in info_dic and pwd==info_dic[name][0]:
                    print('登录成功')
                    break
                else:
                    print('账号密码错误')
                    continue
        res=func(*args,**kwargs)
        return res
    return wrapper
@outter
def timmer(n):
    time.sleep(n)
    print('=====>',n)
timmer(1)

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

def outter(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        with open('db.txt','r',encoding='utf-8')as f:
                for line in f:
                    info_dic=eval(line)
        while True:
            name = input('name:')
            pwd = input('pwd:')
            if name in info_dic and pwd == info_dic[name][0]:
                print('登录成功')
                info_dic[name][1] = time.time() + 3
                res = func(*args, **kwargs)
                if time.time() > info_dic[name][1]:
                    continue
                return res
            else:
                print('账号密码错误')

    return wrapper
@outter
def timmer(n):
    time.sleep(n)
    print('=====>',n)
timmer(4)

八:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

九 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取

import time
time.strftime('%Y-%m-%d %X')
import time

def foo(file):
    def outter(func):
        def wrapper(*args,**kwargs):
            t = time.strftime('%Y-%m-%d %X')
            func(*args, **kwargs)
            with open(r'%s'%file,'a',encoding='utf-8')as f:
                f.write('f1日志写入时间:%s\n'%t)
                print(f)
        return wrapper
    return outter

@foo(file='access.log')
def f1():
    print(1)
    time.sleep(1)
f1()

你可能感兴趣的:(day14 作业)