5.装饰器作业

1. 编写装饰器, 在每次执行被装饰函数之前打印”每次执行被装饰函数之前都要先经过这里, 这里根据需求添加代码”

def wrapper(fn):
    def inner(*args,**kwargs):
        print("每次执行被装饰函数之前都要先经过这里, 这里根据需求添加代码")
        ret = fn(*args,*kwargs)
        return ret
    return inner

@wrapper
def func():
    print("我是目标函数")
func()

2. 编写装饰器, 在每次执行被装饰函数之前打印”每次执行被装饰函数之后都要经过这里, 这里根据需求添加代码”

def wrapper(fn):
    def inner(*args,**kwargs):
        ret = fn(*args,*kwargs)
        print("每次执行被装饰函数之后都要先经过这里, 这里根据需求添加代码")
        return ret
    return inner

@wrapper
def func():
    print("我是目标函数")
func() 

3. 编写装饰器, 在每次执行被装饰函数之前让用户输入用户名, 密码, 给用户三次机会, 登录成功之后, 才能访问该函数

def wrapper(fn):
    def inner(*args,**kwargs):
        count = 0
        while count < 3:
            username = input("请输入你的用户名")
            password = input("请输入你的密码")
            if username == "alex" and password == "123":
                ret = fn(*args,*kwargs)
                return ret
            else:
                print("登录失败")
                count+=1
    return inner

@wrapper
def func():
    print("今天去wusir家玩")
func() 

4. 编写装饰器, 为多个函数加上认证功能(用户的账户密码来源于文件, 用户有三次登录的机会), 要求, 如果用户登录成功了, 后续就不需要再次登录了.

flag = False
def login():
    global flag
    username = input("请输入你的用户名")
    password = input("请输入你的密码")

    with open("userinfo",mode="r",encoding="utf-8") as f:
        for line in f:
            dic = eval(line.strip())
            if username == dic['username'] and password == dic["password"]:
                print("登录成功")
                flag = True
                break
        else:
            print("登录失败")
            flag = False

def wrapper(fn):
    def inner(*args,**kwargs):
        count = 0
        while count < 3:
            if flag == True:
                ret = fn(*args,*kwargs)
                return ret
            else:
                login()
                count+=1
    return inner

@wrapper
def func():
    print("今天去wusir家玩")
func()

5. 给每个函数写一个记录日志的功能.

功能要求: 每一次调用函数之前, 要将函数名称, 事件节点记录到log的日志中.

所需模块:

import time

print(time.strftime(“%Y-%m-%d %H:%M:%S”)

import time

def logger(fn):
    def inner(*args,**kwargs):
        f = open("log",mode="a",encoding="utf-8")
        f.write("在%s,访问了%s函数\n"%(time.strftime("%Y-%m-%d %H:%M:%S"),fn.__name__))
        ret = fn(*args,**kwargs)
        return ret
    return inner
@logger
def chi():
    print("wusir特别能吃")
@logger
def he():
    print("太白特别能喝")
@logger
def shui():
    print("alex特别能睡")

chi()
he()
shui()

 

posted @ 2019-02-24 14:56  等待の喵  阅读(252)  评论(0)    收藏  举报