码迷,mamicode.com
首页 > 其他好文 > 详细

10-3 函数装饰器

时间:2018-10-04 10:01:33      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:time()   .com   sleep   wap   python   print   height   返回值   例子   

装饰器形成的过程

  最简单的装饰器----有返回值的----有一个参数----万能参数装饰器的作用:


不想修改函数的调用方式,但是还想再原来的函数前后添加功能#原则:开放封闭原则
开放: 对扩展是开放的
封闭: 对修改是封闭的
语法糖:@装饰器函数名,@timmer等价于func = timmer(func),其中func()是被装饰函数,timmer()就是装饰器函数

最简单的装饰器技术分享图片

import time
def timmer(f):
    start = time.time()
    f()
    end = time.time()
    print(end-start)
def func():
    time.sleep(0.1)
    print(‘nice!‘)
timmer(func)

装饰有返回值的装饰器

import time
#timmer()就是装饰器函数,只是对一个函数有装饰作用
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
    def inner():
        start = time.time()
        ret = f()      #被装饰的函数
        end = time.time()
        print(end-start)
        return ret
    return inner

@timmer     #语法糖---@装饰器函数名,等价于func = timmer(func)
def func():     #    被装饰的函数
    time.sleep(0.1)
    print(‘nice!‘)
    return ‘summertrain‘
# func = timmer(func)
result = func()
print(result)

有一个参数

import time
#timmer()就是装饰器函数
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
    def inner(a):
        start = time.time()
        ret = f(a)      #被装饰的函数
        end = time.time()
        print(end-start)
        return ret
    return inner

@timmer     #语法糖---@装饰器函数名,等价于func = timmer(func)
def func(a):     #    被装饰的函数
    time.sleep(0.1)
    print(‘nice!‘,a)
    return ‘summertrain‘
# func = timmer(func)
result = func(1)
print(result)

万能参数

#装饰带多个参数,且包括按照位置以及参数传参的装饰器
import time
#timmer()就是装饰器函数
def timmer(f):#通过此闭包函数返回一个内部函数名,然后在外部接收,让接收的函数名与外部函数名保持一致即可
    def inner(*args,**kwargs):
        start = time.time()
        ret = f(*args,**kwargs)      #被装饰的函数
        end = time.time()
        print(end-start)
        return ret
    return inner

@timmer     #语法糖---@装饰器函数名,等价于func = timmer(func)
def func(a,b):     #    被装饰的函数
    time.sleep(0.1)
    print(‘nice!‘,a,b)
    return ‘summertrain‘
# func = timmer(func)
result = func(1,b=22)
print(result)

装饰器的固定模式

#例子
import time
def wrapper(f):     #   f是被装饰的函数
    def inner(*args,**kwargs):
        ‘‘‘在被装饰函数之前要做的事儿‘‘‘
        ret = f(*args,**kwargs)
        ‘‘‘在被装饰函数之前要后的事儿‘‘‘
        return ret
    return inner

@wrapper
def func(a,b):
    time.sleep(0.1)
    print(‘nice!‘,a,b)
    return ‘summertrain‘



#减缩版
def wapper(func):
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)
        return ret
    return inner
@wapper
#qqxing = wapper(qqxing)
def qqxing():
    print(1111)
result = qqxing()

  

10-3 函数装饰器

标签:time()   .com   sleep   wap   python   print   height   返回值   例子   

原文地址:https://www.cnblogs.com/Cheryol/p/9740436.html

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