zoukankan      html  css  js  c++  java
  • 函数闭包带参数装饰器

    '''函数闭包带参数装饰器'''
    user_list = [
       {'name':'alex', 'passwd':'123'},
       {'name':'lhf', 'passwd':'123'},
       {'name':'yuanhao', 'passwd':'123'},
       {'name':'wupeiqi', 'passwd':'123'},
    ]
    user_dic = {'name':None, 'login':False}
    
    def auth(auth_type='filedb'):
       def auth_func(func):
          def wrapper(*args, **kwargs):
             print('认证类型是',auth_type)
             if auth_type == 'filedb':
                if user_dic['name'] and user_dic['login']:
                   res = func(*args, **kwargs)
                   return res
                username = input('请输入用户名:').strip()
                passwd = input('请输入密码:').strip()
                for i in user_list:
                   if username == i['name'] and passwd == i['passwd']:
                      user_dic['name'] = username
                      user_dic['login'] = True
                      res = func(*args, **kwargs)
                      return res
                else:
                   print('用户名或密码错误')
             elif auth_type == 'ldap':
                print('不知道怎么玩')
             else:
                print('你这个认证无法识别')
          return wrapper
       return auth_func
    
    @auth(auth_type='filedb') # auth_func=auth(auth_type='filedb')-->@auth_func 附加了一个auth_type-->index=auth_func(index)
    def index():
       print('欢迎登录系统')
    
    @auth(auth_type='ldap')
    def home(name):
       print('%s欢迎回到个人主页' % name)
    
    @auth(auth_type='bbb')
    def shopping_car(name):
       print('%s,您的购物清单里有%s,%s,%s' % (name, '篮球', '足球', '橄榄球'))
    
    index()
    home('wupeiqi')
    shopping_car('alex')
    while True: print('studying...')
  • 相关阅读:
    Javascript面向对象(三):非构造函数的继承
    Javascript面向对象(二):构造函数的继承
    Javascript 面向对象(一):封装
    .NET面试题系列[12]
    .NET面试题系列[11]
    .NET面试题系列[10]
    .NET面试题系列[9]
    .NET面试题系列[8]
    .NET面试题系列[7]
    .NET面试题系列[6]
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14482261.html
Copyright © 2011-2022 走看看