什么是装饰器?
装饰器是一个特殊的函数,可以理解为一种特殊的闭包。
详见https://blog.csdn.net/ljt735029684/article/details/80703649
如何理解?
闭包:函数内嵌套函数
将目标函数当作参数传入闭包中,在不修改目标函数的情况下,可以在闭包中进行函数功能的增加。
有什么用?
比如你做了一个功能,每个部门都可以用,但是后来某个部门和你吵架了,你不想让他用,就在原函数的基础上加一个装饰器,增加权限验证的功能,没有密码无法使用。代码如下:
# -*- coding: utf-8 -*-
def get_fuc(fuc):
def fuc_1():
x = input("请输入密码:")#此处添加权限验证
if x == "123456":
fuc()#密码正确才能调用该函数
else:
print("密码错误")#f否则提示密码错误
return fuc_1
@get_fuc //等同于test = get_fuc(test)#这是一个语法糖,所以装饰器里不能返回fuc_1()
def test():
print("欢迎回来")
装饰器传参
本质:在最外层构建一个方法,将原来的装饰器函数进行返回
# -*- coding: utf-8 -*-
def get_fucc(pwd):
def get_fuc(fuc):
def fuc_1():
x = input("请输入密码:")#此处添加权限验证
if x == pwd:
fuc()#密码正确才能调用该函数
else:
print("密码错误,登录失败")#f否则提示密码错误
return fuc_1
return get_fuc
@get_fucc(pwd = "111111") #等同于test = get_fuc(test)#这是一个语法糖,所以装饰器里不能返回fuc_1()
def test():
print("欢迎回来")