为什么 max() 函数在比较 2 个元素时比直接与 if 语句比较慢得多?

问题描述 投票:0回答:2

通过运行下面的代码,我可以直接与 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))
python max
2个回答
11
投票

因为

max
涉及到函数名称的字典查找,然后是函数调用,而直接
<
运算符则不然。

当您拥有更多元素时,

max
开始变得有趣。

相关/相同速度差异:


0
投票

我有一个假设,但我并不完全确定。这是我尝试过的:

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 内置函数的代码。

© www.soinside.com 2019 - 2024. All rights reserved.