带参数的装饰器
可是,本人在最近的工做学习中遇到了一些坑,所以又返回头去从新学习并练习了下,下面就用一个例子来讲明一下带参数装饰器
的简单使用。
基于带参数装饰器的简单登录:
先上代码:
def outer(type):
def inner(func):
def wrapper():
if type == 'usual':
username = input('用户名:').strip()
password = input('密码:').strip()
if username == 'whw' and password == '123':
print('%s 登录成功'%func.__name__)
func()
else:
print('%s 登录失败'%func.__name__)
elif type == 'super':
print('welcome super func!')
func()
return wrapper
return inner
@outer('usual')
def func_usual():
print('普通玩家...')
@outer('super')
def func_super():
print('付费玩家...')
if __name__ == '__main__':
func_usual()
print('**********')
func_super()
上面代码实现的效果是:“超级函数”不用进行认证便可执行,“普通函数”须要认证后才能执行。
咱们能够这样理解:在定义装饰器函数outer时,咱们先赋予他一种外在的“气质”(也就是他带的参数type),若是他的这个“气质”是“吊丝”——usual,那就在内层的执行函数wrapper里为他设置“门槛”;固然若是人家是付费用户,固然能够随心所欲,直接“do as you want~”。对于第二层inner函数,它携带的是具体函数的内存地址,咱们能够理解它是程序的发放者,当知足条件后能够在对应的地方加上()执行——固然根据需求也能够不执行外面的函数。
最后提醒你们,无论是带参数的装饰器仍是不带参数的装饰器,写法都是很固定的,但愿你们多加练习,只有多练才能提高本身的理解,不要眼高手低,致使没必要要的小bug的发生!
最后上运行结果:
