我有一个child
函数,它将迭代1000000
次。现在,当我在两个不同的函数上调用子函数时。这表明每次执行都需要不同的时间。为什么会这样
import timeit
def child():
for i in range(1_000_000):
yield i
def slow():
yield from child()
def fast():
yield from child()
baseline = timeit.timeit(
stmt='for _ in slow(): pass',
globals=globals(),
number=50
)
comparision = timeit.timeit(
stmt='for _ in fast(): pass',
globals=globals(),
number=50
)
print(f'Manual nesting {baseline:.2f}s')
print(f'Composed nesting {comparision:.2f}s')
输出
# First execution
Manual nesting 9.94s
Composed nesting 9.35s
# Second execution
Manual nesting 9.20s
Composed nesting 9.77s
正如您已经看到的,上面的输出。它显示了不同的时间间隔。为什么同样的过程会发生这种情况
任何Python函数在每次运行时都会花费不同的时间,彼此接近,但有点不同。原因有很多:
所有这些以及更多的原因使得整个Python执行系统在时间上不可预测,这意味着每次运行函数都会有轻微的(有时甚至是巨大的)时间差异
即使不仅仅是Python,而且对于任何在计算机上运行的程序,这些原因中的大多数都是适用的,并且任何程序在每次执行时的速度都会有所不同。我想可能存在一些特殊的编程语言,可以将每个指令/操作码的执行与某些高分辨率时钟同步,例如在火星着陆航天器上,每个函数的执行可能需要精确到纳秒。那么,对于用这种语言编写的程序,计时几乎是精确的。但不是Python,它在运行操作码时不进行任何时间同步
相关问题 更多 >
编程相关推荐