用 Python 编写 If 语句的最快方法

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

我一直想知道在 python 中编写 if 语句的不同方式有什么意义。本质上,所有方法都归结为检查一个值是否等于另一个值。研究了一段时间后,我只能遇到 3 种不同的方法。在此线程中,我将展示我的代码以及我的发现,以便您了解如何以最高效率在 Python 中编写 if 语句。

使用代码:

import time

def if_test(x):

    s = time.perf_counter()

    if x == 1:

        1

    if x == 2:

        2

    else:

        None

    return time.perf_counter() - s

def match_test(x):

    s = time.perf_counter()

    match x:

        case 1:

            1

        case 2:

            2

        case _:

            None

    return time.perf_counter() - s

def dict_test(x):

    s = time.perf_counter()

    {1: 1, 2: 2}.get(x)

    return time.perf_counter() - s

if_speed = []
match_speed = []
dict_speed = []

for i in range(10000000):

    if_speed.append(if_test(1))

    match_speed.append(match_test(1))

    dict_speed.append(dict_test(1))

print('if: ', sum(if_speed))
print('match: ', sum(match_speed))
print('dict: ', sum(dict_speed))

TLDR:有 3 种方法可以编写 if 语句。第一个是经典的“if-elif-else”语句。这是最常用的一种,令人惊讶的是,它并不是最快的。第二种是使用“匹配”语句。最后,还有使用字典的方法,并在其上使用“.get()”方法。

结果

if:  4.6341567997587845
match:  4.472052920144051
dict:  8.842875797010493
  1. 比赛声明
  2. If语句
  3. 字典.get()语句

跑了很多很多次后,我通常会找到这些排名。令人惊讶的是,这与我的预期大不相同。我希望字典 .get() 是最快的,因为它使用哈希表并且在找到正确的值之前不需要查看每个值。它更像是相反,几乎是其他方法的两倍。但是,如果您使用更多案例,结果可能会有所不同。根据我的发现,match 语句在运行之前被简单地编译成一个 if 语句,这是有道理的,因为它在性能方面通常接近 if 语句。然而,这并没有改变它始终快 4-5% 的事实。最后,令我惊讶的是 if 语句并不是最快的。我仍然认为应该使用它们,因为如果你有保护条款,它们就不会真正起作用。

外卖

我认为这个结果非常有趣,我个人肯定会更多地使用 match 语句。我可能会用 python 中的其他类型的常见任务尝试这个实验,以获得我的程序的最大效率。如果我做错了什么,或者还有其他的 if 语句,请告诉我,我可以测试它们。

python performance if-statement switch-statement processing-efficiency
© www.soinside.com 2019 - 2024. All rights reserved.