参考 python函数修饰符@的使用方法解析 - 云+社区 - 腾讯云
修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。修饰符是解决这类问题的绝佳设计,有了修饰符,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,修饰符的作用就是为已经存在的对象添加额外的功能。
import time
def timeslong(func):
start = time.clock()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
上面的程序中,定义了一个函数,对另外一个对象的运行时间进行计算,如果采用通常的方式需要将 func() 重新在 timeslong 中重新写一遍。
(1)、修饰函数
为了简化这种操作,便提出了修饰符的概念。如下:
import time
def timeslong(func):
def call():
start = time.clock()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
return call
@timeslong
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
return y
print(f())
Output:
---------------------------------------
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
It's used : 3.996044816994668e-05 .
--------------------------------------
这样出现便不用再函数内部再进行嵌入函数,通过 @timeslong对其进行修饰达到目的,是整个代码美观,而且少些部分代码。
(2)、修饰类
修饰符也可以通过类来进行使用,共享该类,如下为一个实例:
import time
class timeslong(object):
def __init__(self,func):
self.f = func
def __call__(self):
start = time.clock()
print("It's time starting ! ")
self.f()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
@timeslong
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
return y
print(f())
Output:
------------------------------------
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
It's used : 4.266453864761224e-05 .
------------------------------------