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()

浙公网安备 33010602011771号