zoukankan      html  css  js  c++  java
  • Python基础12-装饰器

    装饰器:本质就是函数,功能是为其他函数添加附加功能 装饰器=高阶函数+函数嵌套+闭包

    原则:1.不修改被修饰函数的源代码

              2.不修改被修饰函数的调用方式

    #用修饰器模拟验证功能
    user_list=[
        {'user':'alex','passwd':'123'},
        {'user':'justin','passwd':'123'},
        {'user':'balley','passwd':'123'}
    ]
    user_tag = {'username':None,'login':False}
    
    def login(func):
        def wrapper(*args,**kwargs):
            if user_tag['username'] and user_tag['login']:
                res = func(*args,**kwargs)
                return  res
            name = input('请输入用户名:').strip()
            passwd = input('请输入您的密码:').strip()
            for name_dic in user_list:
                if name_dic['user']==name and name_dic['passwd']==passwd: #记住登录状态,调用其他函数时不用再重新登录
                    user_tag['username'] = name_dic['user']
                    user_tag['login'] = True
                    res = func(*args, **kwargs)
                    return res
            else:
                print('用户名或账号密码错误')
        return wrapper
    
    @login #相当于home = login(home)
    def home(name,x='!!!'):
        print('亲爱的%s:欢迎回家%s' %(name,x))
    
    @login
    def buycar():
        print('这是你的购物车')
    
    @login
    def order():
        print('这是你的订单')
    
    home('alex',x='!')
    buycar()
    
    输出结果:
    请输入用户名:alex
    请输入您的密码:123
    亲爱的alex:欢迎回家!
    这是你的购物车
  • 相关阅读:
    IIS配置跨域请求
    ABP框架页面权限验证
    WPF-DataGrid增删改查不绑定数据源
    WPF-DataGrid增删改查绑定数据源
    .NET开发框架集合(长期更新)
    C# Webbrowser 常用方法及多线程调用
    Devexpress-GridLookUpEdit
    Devexpress提示框的使用
    Asp.Net MVC中Action跳转小结
    ASP.NET MVC备忘
  • 原文地址:https://www.cnblogs.com/josie930813/p/9680877.html
Copyright © 2011-2022 走看看