装饰器
在运行原来功能的基础上,添加一些新的功能,如权限的验证,日志等
不修改原来的代码,进行功能的扩展
python装饰器,是修改了代码,python直接运行代码,不编译
python装饰器 用 @函数名 来表示 被称为语法糖
下面的代码中 @ checklogin 就是一个装饰器
有相对应的函数 checklogin()
def checklogin(func):
def inner():
name= input('name: ')
pwd = input('wd: ')
if name=='qw' and pwd =='123':
func()
else :
print('重新登录')
return inner
# 程序加载到这就先把save当成参数传进checklogin
@checklogin #相当于 save=checklogin(save)
# 执行一次checklogin外部函数 得到返回inner在加载save()
def save():
print('save......')
def delete():
print('delete/./////')
def update():
print('update......')
def select():
print('select........')
save()# 调用save()相当于调用checklogin方法里的内部inner()方法,
# 先运行inner()方法,在运行自身所代表的方法
update()
多个装饰器
即一个函数上面有两个或以上的装饰器,运行顺序如下:
如果第一个装饰器判断不成立,第二个装饰器就不再执行,
带参数的装饰器
def ha(num):
def check(func):
def inner1():
if num>2:
age = input('age : ')
if age=='20':
return func()
else:
print('age error ...')
else:
print('?????')
return inner1
return check
# 装饰器带参数,需要再写一层函数用来传参,里面的函数可以根据参数做出逻辑判断
# 在原有的基础上设置外部变量,即写一层函数,并返回原来基础上的外部函数名
@ha(4)
def add():
print('+++++++')
add()
网友评论