Python 不计算执行函数的时间
Python doesn't calculate time for executing a function
我正在学习一些 Python 基础知识,我们有关于包装函数以及如何使用它们向包装函数添加功能的代码。所以我们计算用于计算两个不同函数的时间:
import time
def timer(fn):
def wrapper():
t0 = time.time()
result = fn()
dt = time.time() - t0
return dt
return wrapper
def pow_2():
return 10000000 ** 2
def in_build_pow():
return pow(10000000, 2)
pow_2 = timer(pow_2)
in_build_pow = timer(in_build_pow)
a, b = 0, 0
N = 100
for i in range(N):
a += pow_2()
b += in_build_pow()
print("a = ", a)
print("b = ", b)
print(f"Average time pow_2 = {a / N:.10f}")
print(f"Average time in_build_pow = {b / N:.10f}")
但我的结果是这样的:
除非我将迭代次数N增加到1000以上。N越高,结果不是0.0的次数就越多。
这是 N = 1000:
这是 N = 10,000:
有谁知道为什么会这样吗?为什么我不能为更少的迭代计算时间?不过,该代码在在线编译器中运行良好。但是 VSCode、VS2022 和 PyCharm 对我来说都有同样的问题。
有些 OS 在使用这些函数计算非常短的时间间隔时遇到问题。所以最好使用时间模块的 perf_counter_ns() 方法。我个人在 Win10 上遇到了问题,而 MacOS 使用 time() 方法工作得很好。
我正在学习一些 Python 基础知识,我们有关于包装函数以及如何使用它们向包装函数添加功能的代码。所以我们计算用于计算两个不同函数的时间:
import time
def timer(fn):
def wrapper():
t0 = time.time()
result = fn()
dt = time.time() - t0
return dt
return wrapper
def pow_2():
return 10000000 ** 2
def in_build_pow():
return pow(10000000, 2)
pow_2 = timer(pow_2)
in_build_pow = timer(in_build_pow)
a, b = 0, 0
N = 100
for i in range(N):
a += pow_2()
b += in_build_pow()
print("a = ", a)
print("b = ", b)
print(f"Average time pow_2 = {a / N:.10f}")
print(f"Average time in_build_pow = {b / N:.10f}")
但我的结果是这样的:
除非我将迭代次数N增加到1000以上。N越高,结果不是0.0的次数就越多。
这是 N = 1000:
这是 N = 10,000:
有谁知道为什么会这样吗?为什么我不能为更少的迭代计算时间?不过,该代码在在线编译器中运行良好。但是 VSCode、VS2022 和 PyCharm 对我来说都有同样的问题。
有些 OS 在使用这些函数计算非常短的时间间隔时遇到问题。所以最好使用时间模块的 perf_counter_ns() 方法。我个人在 Win10 上遇到了问题,而 MacOS 使用 time() 方法工作得很好。