• 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:欢迎回家!
    这是你的购物车
  • 相关阅读:
    [hive]case 语句中字符串匹配
    shell-删除指定时间前的文件
    tensorflow expand_dims和squeeze
    nexus建立maven仓库私服及Snapshots、release的版本管理
    FileChannel指南
    java8关于时间的新特性
    java程序加到系统托盘的方法
    java程序 避免重复启动的方法
    httpClient 进行get请求
    springboot 多线程的使用
  • 原文地址:https://www.cnblogs.com/josie930813/p/9680877.html
Copyright © 2020-2023  润新知