假设我们想对一个函数进行它执行时间的打印,我们可以用函数式编程,完成一个装饰器。
下面给出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)) }
|
这样就可以对一个想要计算执行时间的函数,快速添加计算执行时间的代码。