|
发表于 2024-9-1 09:59:14
|
显示全部楼层
这段代码是一个Python程序,它定义了一个装饰器`logger`,用于记录函数执行的时间,并在执行前后打印一些信息
1. `import time`:导入Python的`time`模块,这个模块提供了各种与时间相关的函数。
2. `def logger(msg):`:定义了一个名为`logger`的装饰器工厂函数,它接受一个参数`msg`,这个参数将用于打印日志信息。
3. `def time_master(func):`:在`logger`函数内部定义了一个嵌套函数`time_master`,它接受一个函数`func`作为参数。
4. `def call_func():`:在`time_master`函数内部定义了一个嵌套函数`call_func`,这个函数是实际被调用的函数,它将执行以下步骤:
- `start=time.time()`:记录当前时间。
- `func()`:调用传入的函数`func`。
- `stop=time.time()`:再次记录当前时间。
- `print(f'{msg}一共耗费了{(stop-start):.2f}')`:计算函数执行的总时间,并打印出来,其中`.2f`表示保留两位小数。
5. `return call_func`:`time_master`函数返回`call_func`函数,这样当`logger`装饰器被应用到一个函数上时,实际上是返回了一个新的函数`call_func`。
6. `return time_master`:`logger`函数返回`time_master`函数,这样它就可以作为一个装饰器使用。
7. `def funA():`:定义了一个名为`funA`的函数,它将休眠1秒(`time.sleep(1)`),然后打印"正在调用funA"。
8. `def funB():`:定义了一个名为`funB`的函数,它将休眠1秒(`time.sleep(1)`),然后打印"正在调用funB"。
9. `funA=logger(msg='A')(funA)`:使用`logger`装饰器装饰`funA`函数,并传递参数`msg='A'`。这将返回一个新的函数,这个函数在执行时会记录并打印`funA`函数的执行时间。
10. `funB=logger(msg='B')(funB)`:同样地,使用`logger`装饰器装饰`funB`函数,并传递参数`msg='B'`。
11. `funA()`:调用被装饰后的`funA`函数,它将打印"正在调用funA",并记录执行时间。
12. `funB()`:调用被装饰后的`funB`函数,它将打印"正在调用funB",并记录执行时间。
|
|