装饰器函数

一、装饰器的定义

装饰其就是特殊的闭包函数

def timer(func):
    def inner(*args,**kwargs):
        '''执行函数之前要做的'''
        re = func(*args,**kwargs)
        '''执行函数之后要做的'''
        return re
    return inner

二、开放封闭原则

1.对扩展是开放的

    为什么要对扩展开放呢?

    我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。

  2.对修改是封闭的

    为什么要对修改封闭呢?

    就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。

装饰器完美的遵循了这个开放封闭原则。

三、装饰器

1)简单装饰器

  

import time
def timmer(fucn):
    def inner():
        start_time=time.time()
        fucn()
        end_time=time.time()
        print("run time is %s"%(end_time-start_time))
    return inner

@timmer def index(): time.sleep(3) print("welcome to index")

 3.1)多个装饰器装是一个函数

#装饰器 访问3-6函数检测用户是否登录,没登录让用户登录
def auth(f1):
    def inner(*args,**kwargs):
        if user_status.get('status'):
            res = f1(*args,**kwargs)
            return res
        else:
            print("请先登录")
            login()
            res=f1(*args,**kwargs)
            return res
    return inner

# 装饰器 用户登录,写入日志
def user_log(fucn):
   def inner(*args,**kwargs):
       struct_time = time.localtime()
       log_time = str(time.strftime("%Y-%m-%d %H:%M:%S", struct_time))
       with open("user.log",mode='a',encoding="utf-8") as f_write:
           f_write.write('用户:%s 时间%s\n' % (user_status['username'], log_time))
           res =fucn(*args,**kwargs)
           return res
   return inner


@auth
@user_log
def article():
    print("welcome %s article page" %user_status["username"])

  

 

posted @ 2018-05-01 17:24  鱼丸粗面没鱼丸  阅读(127)  评论(0编辑  收藏  举报