python装饰器的使用

语法糖:

def outter(param):

  def decorator(func):

    def warpper(*args, **kwargs):

      pass

      return func(*args, **kwargs)

    return warpper

  return decorator

@outter("xxx")

def test():

  pass

test()  # 装饰后的调用

举例:

import time
dic = {
'username': None,
}

def auth(engine):
def auth2(func):
def wrapper(*args, **kwargs):
if engine == 'login1': #如果传入的是"login1",就进入这种身份的认证
if dic['username']:
print('已经登陆过了')
res = func(*args, **kwargs)
return res

name = input('用户名>>: ').strip()
pwd = input('密码>>: ').strip()
if name == 'egon' and pwd == '123':
print('登陆成功')
dic['username'] = name
res = func(*args, **kwargs)
return res
else:
print('用户名或密码错误')


elif engine == 'login2': #"login2"这种模式的身份认证
print('匿名认证')
elif engine == 'login3': #"login3"
print('用户认证')
return wrapper
return auth2

@auth('login3') #以"login3"模式的身份认证来使用"index"
def index():
time.sleep(1)
print('欢迎登入')
return 123

@auth('login1') #以"login1"模式的身份认证来使用"home"
def home(song):
time.sleep(2)
print('啧啧啧%s' % song)

index()
home('外婆家')

 

上一篇:BaseSerializer部分源码


下一篇:十二、装饰器 3.装饰器的参数和返回值