python 装饰者的回报与实际回报不同

jk9hmnmh  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(142)
代码

为什么我得到不同的结果?

from time import time
def speed_test(func):
    def wrapper(*args, **kwargs):
        start = time()
        func(*args, **kwargs)
        end = time() - start
        print(f"Execution time is: {end:.17f}s  # Decorator")
    return wrapper
@speed_test 
def sorting(L):
    L.sort() # For example
    
def sorting_1(L1):
    L1.sort()
    
T = [10, 5, 3, 1, 0]
L = T.copy()

sorting(T)

a = time()
sorting_1(L)
b = time() - a
print(f"Execution time is: {b:.17f}s  # Main")
预期输出
Execution time is: 0.00000977516174316s  # Decorator
Execution time is: 0.00000977516174316s  # Main
我的输出
Execution time is: 0.00000977516174316s  # Decorator
Execution time is: 0.00000572204589844s  # Main

为什么这两个结果是不同的?编辑:我是说...

m528fe3b

m528fe3b1#

我在这里要说两件事:

  1. time.perf_counter对于这类事情更有效
    1.[猜测]在Python中,修饰函数“替换”了调用堆栈中的原始函数,因此它们可能会因为这个原因而变慢。

相关问题