0%

设计模式--函数编程中的装饰者模式

假设我们想对一个函数进行它执行时间的打印,我们可以用函数式编程,完成一个装饰器。

下面给出Python3和Go中的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def timeSpent(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
res = func(*args, **kwargs)
print("time sleep", time.perf_counter() - start)
return res

return wrapper


@timeSpent
def add(x, y):
time.sleep(0.1)
return x + y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func timeSpent(inner func(op int) int) func(op int) int {
return func(n int) int {
start := time.Now()
ret := inner(n)
fmt.Println("time spent:", time.Since(start).Seconds())
return ret
}
}
func slowFunc(op int) int {
time.Sleep(time.Second * 1)
return op
}

func TestFn(t *testing.T) {
tsSF := timeSpent(slowFunc)
t.Log(tsSF(10))
}

这样就可以对一个想要计算执行时间的函数,快速添加计算执行时间的代码。