zoukankan      html  css  js  c++  java
  • Python中的装饰器——11

    装饰器

    什么是装饰器

    装饰他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象

    原则

    --- 不修改被修饰函数的源代码

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

    装饰器的目标

    在遵循原则的基础上为被装饰对象添加新功能

    无参装饰器

    import time#导入time模块
    
    def timmer(func):
        def wrapper():
            start_time = time.time()#开始的时间
            res = func()
            stop_time = time.time()#结束的时间
            print('run time is %s'%(stop_time-start_time))#打印运行时间
            return res
        return wrapper
    
    @timmer
    def test():
        time.sleep(1)
        print('from test')
    
    test()

    简易验证登录状态的装饰器

    user_list = [
        {'name':'ahe520','passwd':'6201134'},
        {'name':'xl520','passwd':'123'},
        {'name':'hzz520','passwd':'12345'}
    ]#存放用户名密码的列表
    current_dic = {'username':None,'userlogin':False}#登录状态
    
    def auth_func(func):
        def warpper(*args,**kwargs):
            if current_dic['username'] and current_dic['userlogin']:
                res = func(*args,**kwargs)
                return res
            username = input('请输入用户名:')
            userpasswd = input('请输入密码:')
            for user_dic in user_list:
                if username ==user_dic['name'] and userpasswd == user_dic['passwd']:
                    current_dic['username'] = username
                    current_dic['userlogin'] = True
                    res = func(*args,**kwargs)
                    return res
            else:
                print('用户名或密码错误')
        return warpper
    
    def index():
        print('欢迎进入主页')
    @auth_func
    def home():
        print('欢迎回家')
    @auth_func
    def shipping_car():
        print('购物车里有[%s],[%s],[%s]'%('牛奶','饮料','啤酒'))
    
    index()
    home()
    shipping_car()
  • 相关阅读:
    卡尔曼滤波的原理与思想
    什么是端口
    什么是ICD文件
    USB口,串口,以太网口简介
    Linux基本操作笔记
    网络营销学习路线图
    读书推荐:2017 第一期
    又见Bug
    如何请教别人问题?
    圆桌问答 (2017 第一季)
  • 原文地址:https://www.cnblogs.com/winsdom/p/9133316.html
Copyright © 2011-2022 走看看