装饰器

装饰器


1.装饰器的固定格式

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

 

补充: 装饰器修复

2.装饰器的本质

装饰器是一个闭包函数

在不修改原函数及其调用方式的情况下对原函数功能进行扩展

 

开放封闭原则

1.对扩展是开放的

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

2.对修改是封闭的

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

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

 

示例

import time
def timer(func):
    def inner(*args,**kwargs):
        start_time = time.time()
        ret = func(*args,**kwargs)
        end_tiame = time.time()
        print(end_tiame - start_time)
        return ret
    return inner
@timer
def zhou(a,b):
    time.sleep(0.1)
    print('老板万岁')
    return a+b

haha = zhou(1,2)
print(haha)
计算函数运行时间
def diaoyong(func):
    def inner(*args,**kwargs):
        print ('正在调用%s函数'%(func.__name__))
        ret = func(*args,**kwargs)


        return ret
    return inner
@diaoyong
def welcome(name):
    return 'welcome%s'%name

a = welcome('周军豪')
print(a)
正在调用的函数

func.__name__

正在调用的函数名

posted @ 2017-08-31 20:10  选择远方,风雨兼程。  阅读(108)  评论(0编辑  收藏  举报