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-装饰器的最终形态和固定格式 语法糖的主要内容,如果未能解决你的问题,请参考以下文章