装饰器:=====> 要求记住最后的结论
装饰器本质上是一个闭包
作用:
1在不改变原有函数调用的情况下. 给函数增加新的功能.
2直白: 可以在函数前后添加新功能, 但是不改原来的代码
应用场景:
在用户登录的地方, 日志.
通用装饰器的写法:
def wrapper(fn): wrapper: 装饰器, fn: 目标函数
def inner(*args, **kwargs):
# 在目标函数执行之前.....
ret = fn(*args, **kwargs) # 执行目标函数
# 在目标函数执行之后.....
return ret
return inner 千万别加()
@wrapper
def target():
pass
target() # => inner()
一个函数可以被多个装饰器装饰.
@wrapper1
@wrapper2
def target():
print('我是目标')
规则和规律 wrapper1 wrapper2 TARGET wrapper2 wrapper1
案例:
login_flag = False
def login_verify(fn):
def inner(*args, **kwargs):
global login_flag
if login_flag == False: # ????
# 这里完成登录校验
print('还未完成用户登录操作')
while 1:
username = input(">>>")
password = input(">>>")
if username == "admin" and password == "123":
print("登录成功")
login_flag = True
break
else:
print("登录失败, 用户名或密码错误")
ret = fn(*args, **kwargs) # 后续程序的执行
return ret
return inner
@login_verify
def add():
print("添加员工信息")
@login_verify
def delete():
print("删除信息")
@login_verify
def upd():
print("修改信息")
@login_verify
def search():
print("查询员工信息")
add()
upd()
delete()
search()
标签:fn,python,verify,inner,print,login,装饰,def
From: https://www.cnblogs.com/pdxt666/p/16729058.html