Python中类似代码的速度差异

时间:2015-01-19 09:27:51

标签: python performance timeit

我有这三个功能:

def is_compatible(values):
    supported_types = [(str, unicode), (int, long)]
    for allowed_types in supported_types:
        if isinstance(values[0], allowed_types):
            return all(isinstance(item, allowed_types) for item in values)
    return False


def is_compatible2(values):
    supported_types = [(str, unicode), (int, long)]
    for allowed_types in supported_types:
        if all(isinstance(item, allowed_types) for item in values):
            return True
    return False


def is_compatible3(values):
    supported_types = [(str, unicode), (int, long)]
    return any(
            all(isinstance(item, allowed_types) for item in values) for
            allowed_types in supported_types
        )

有人可以向我解释一下,为什么当我用[1,2,3,4,5]作为arg在timetit中运行它们时,结果是2.47,3.07和3.94?所以第一个是最快的,最后一个是最慢的。我根本看不出这些速度差异的原因。感谢。

1 个答案:

答案 0 :(得分:2)

您的答案似乎在此处:Why is Python's 'all' function so slow?

all中设置迭代器需要时间。

在你的第一个功能中你只能这样做一次。在你的第二个功能中,你偶尔会这样做两次。所以先打第二。

你的第二次因为同样的原因再次击败第三名。设置的开销更大。对any的{​​{1}}调用比简单for allowed_types in ...更有限。