通过运行下面的代码,我可以直接与 if 语句进行比较,与使用 max 函数相比,速度几乎提高了 4 倍。
我正在尝试了解这背后的原因。
比较:0.63s,最长:2.3s
import time
if _name_ == '_main_':
sim = 10**7
s = time.time()
for _ in range(sim):
if 1 > 2:
pass
res1 = time.time()-s
s = time.time()
for _ in range(sim):
max(1, 2)
res2 = time.time()-s
print('comparison : {:.2}s, max : {:.2}s'.format(res1, res2))
因为
max
涉及到函数名称的字典查找,然后是函数调用,而直接 <
运算符则不然。
当您拥有更多元素时,max
开始变得有趣。
相关/相同速度差异:
我有一个假设,但我并不完全确定。这是我尝试过的:
from time import time
from random import random
factor = 100
def lesser(a,b):
if a < b:
return a
return b
if __name__ == "__main__":
start = time()
for _ in range(10000000):
a = random() * factor
b = random() * factor
l = lesser(a,b)
end = time()
print(end-start)
start = time()
for _ in range(10000000):
a = random() * factor
b = random() * factor
l = min(a,b)
end = time()
print(end-start)
当我在笔记本电脑上运行此程序时,我得到:
5.072136402130127
7.319249391555786
那么这怎么解释呢?函数调用的查找?我不知道,因为我的也是一个函数。全球与本地真的有那么不同吗?
但是这里有一个想法。 python
min
函数的作用比我的更多:它接受任意数量的参数。查看 python 内置函数的代码。