python-装饰器的最终形态和固定格式 语法糖

Posted alet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-装饰器的最终形态和固定格式 语法糖相关的知识,希望对你有一定的参考价值。


import time
def timer(f):   #  这是一个装饰器函数
    def inner():
        start = time.time()
        f()     # 被装饰的函数
        end = time.time()
        print(函数执行了%d秒 %(end-start) )
    return inner
@timer      # 语法糖  @装饰器函数名
def func(): # 被装饰的函数
    time.sleep(3)
    print(这是一个函数执行的内容)
func() 

 

装饰带参数函数的装饰器

import time
def timer(f):   #  这是一个装饰器函数
    def inner(*args,**kwargs):
        start = time.time()
        ret = f(*args,**kwargs)     # *args,表示打散元组中每个元素传递
        end = time.time()
        print(函数执行了%s秒 %(end-start) )
        return ret
    return inner
# 两个参数传递,按位置传递参数方式 *args就可以解决
@timer      # 语法糖  @装饰器函数名
def func(a,b): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a,b)
    return 新年好

# 一个位置参数,*args就能传递
@timer      # 语法糖  @装饰器函数名
def func1(a): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a)
    return 新年好

# 如果赋值传递则需要**kwargs来解决
@timer      # 语法糖  @装饰器函数名
def func2(a,b=2): # 被装饰的函数
    time.sleep(0.02)
    print(同志们,a,b)
    return 新年好

ret = func(1,2)
ret1 = func1(1)
ret2 = func2(1)
print(ret,ret1,ret2) 

 

装饰器的固定格式

def wrapper(f):   #  这是一个装饰器函数
    def inner(*args,**kwargs):
        ret = f(*args,**kwargs)     # *args,**kwargs表示打散元组中每个元素传递
        return ret
    return inner
@wrapper
def func(a,b): # 被装饰的函数,可以传递参数
    print(这是函数主体,a,b)

ret = func(1,2) # 这里执行的是inner

 

 

 

技术分享图片

 

以上是关于python-装饰器的最终形态和固定格式 语法糖的主要内容,如果未能解决你的问题,请参考以下文章

Python(71)_装饰器的固定模式

python装饰器的简单理解

Python中的装饰器的使用及固定模式

python 装饰器

Python装饰器的另类用法

python装饰器带括号和不带括号的语法和用法