首页 > 其他 > 详细

第十四天

时间:2020-03-01 09:36:47      阅读:57      评论:0      收藏:0      [点我收藏+]

装饰器-开放封闭原则


在不改变原函数的代码以及调用方式的前提下,为其增加新功能

开放:对代码的扩展开放的

类比游戏:更新地图,加新枪 ,加新英雄

封闭:对源码的修改是封闭的

类比游戏:开枪 扔雷 不会改变

装饰器就是一个函数

功能:

加一个测试函数运行时间的函数

def index():
    print("我爱小屋")
import time
def timer(f):
    def  inner():
        start=time.time()
        f()
        time.sleep(3)
        end = time.time()
        print(f'测试的时间是{end-start}')
    return inner

index=timer(index)
index()

装饰器标准版

import time
def timer(f):
    def  inner():
        start=time.time()
        f()
        time.sleep(3)
        end = time.time()
        print(f'测试的时间是{end-start}')
    return inner

@timer   #index=timer(index)
def index():
    print("我爱小屋")
index()

当index(被装饰) 有返回值

import time
def timer(f):
    def  inner():
        start=time.time()
        f=f()
        time.sleep(3)
        end = time.time()
        print(f'测试的时间是{end-start}')
        return f
    return inner

@timer   #index=timer(index)
def index():
    print("我爱小屋")
    return 666
index()

当index(被装饰) 有参数

import time
def timer(f):
    def  inner(n):
        start=time.time()
        f=f(n)
        time.sleep(3)
        end = time.time()
        print(f'测试的时间是{end-start}')
        return f
    return inner

@timer   #index=timer(index)
def index(name):
    print("我爱小屋")
    return 666
index(n)

当index(被装饰) 有多个参数-最标准的

import time
def timer(f):
    def  inner(*args,**kwargs):
        start=time.time()
        f=f(*args,**kwargs)
        time.sleep(3)
        end = time.time()
        print(f'测试的时间是{end-start}')
        return f
    return inner

@timer   #index=timer(index)
def index(name,age):
    print(f'{name}今年{age}岁')
    return 666
index(n)

模板

def wrapper(f):
    def inner():
        
        
        
        **添加额外的功能 执行被装饰函数前的操作 **
        
        
        
        ret = f(*args,**kwargs)
        
        
        **添加额外的功能 执行被装饰函数后的操作 **

            
            
            return ret
    return inner

装饰器的应用

def auth(f):
    def inner(*args,**kwargs):
        if status_dict["status"]:


            ret=f(*args,**kwargs)

            return ret
        else:
            username=input("请输入用户名").strip()
            password=input("请输入密码").strip()
            if username=="xiaowu" and password=="woaini":
                print("登陆成功")
                status_dict["status"]=True
                ret = f(*args, **kwargs)

                return ret
            else:
                print("登录失败")


    return inner

status_dict={
    "status":False

}

def login():
    print("请完成登陆功能")

@auth
def article():
    print("欢迎访问文章")
@auth
def comment():
    print("欢迎访问评论")

@auth
def dariy():
    print("欢迎访问日记")


article()
comment()
dariy()

第十四天

原文:https://www.cnblogs.com/xueba/p/12387462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!