定义:装饰器本质是函数,装饰其他函数,也就是为其他函数添加附加功能
原则: 1、不能修改被装饰的函数的源码
2、不能修改被装饰的函数的调用方式
装饰器的基础知识:
1、函数即“变量”
2、高阶函数
a、把一个函数名当成实参传递给另外一个函数
(在不修改被装饰函数源代码的情况下为其添加功能)
b、返回值中包含函数名(不修改函数的调用方式)
3、嵌套函数(在函数体内通过def声明的函数)
装饰器 = 高阶函数 + 嵌套函数
def bar()
pass
bar ----输出的函数的内存地址
bar() ----运行函数
以上就可以说名函数即“变量”
#牛逼的装饰器
def auth(auth_type):
print('auth_type is :',auth_type)
def outer_wapper(func):
print('func is',func)
def wapper(*argv,**kwargv): #可以传入参数
if auth_type == 'local':
user =input('please input your user name:').strip()
password = input('plesase input your password:').strip()
if user_name == user and pass_wd ==password:
print('\033[31;1m我就是要红色字体,给不给\033[0m')
res = func(*argv,**kwargv)
else:
print('请输入正确密码,摄像头宝宝')
elif auth_type =='ldap':
print('ldap是什么鬼,老子就是不会')
return wapper #返回wapper的函数内存函数地址
return outer_wapper #返回outer__wapper的函数内存地址
@auth(auth_type='local') #index = out_wapper(index) 把wapper的函数地址传递给index
def index(address,test): #
print('这是一个普通的{address},一个不同的{test}'.format(address=address,test=test))
index('旧金山','试验')