码迷,mamicode.com
首页 > 编程语言 > 详细

Python中的装饰器——11

时间:2018-06-04 16:41:21      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:可调用对象   als   from   UNC   tar   列表   app   开始   home   

装饰器

什么是装饰器

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

原则

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

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

装饰器的目标

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

无参装饰器

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()

 

Python中的装饰器——11

标签:可调用对象   als   from   UNC   tar   列表   app   开始   home   

原文地址:https://www.cnblogs.com/winsdom/p/9133316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!