在实践中,为什么比较整数比比较字符串好?

2024-10-01 09:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了这个测试

import time
def test1():
    a=100
    b=200
    start=time.time()
    if (a>b):
        c=a
    else:
        c=b
    end=time.time()
    print(end-start)


def test2():
    a="amisetertzatzaz1111reaet"
    b="avieatzfzatzr333333ts"
    start=time.time()

    if (a>b):
        c=a
    else:
        c=b
    end=time.time()
    print(end-start)

 def test3():
     a="100"
     b="200"
     start=time.time()

     if (a>b):
         c=a
     else:
         c=b
     end=time.time()
     print(end-start)

并得到结果

^{pr2}$

执行时间相似。的确,使用整数而不是字符串可以减少存储空间,但是执行时间呢?在


Tags: importiftimedef时间startelseend
2条回答

对一小段代码的单次执行计时并不能告诉您很多信息。特别是,如果你看一下你的test1test3中的计时数字,你会发现这些数字是相同的。这应该是一个警告信号,事实上,你在这里看到的只是计时器的分辨率:

>>> 2.0 / 2 ** 20
1.9073486328125e-06
>>> 1.0 / 2 ** 20
9.5367431640625e-07

为了获得更好的结果,您需要多次运行代码,并测量并减去计时开销。Python有一个内置的模块^{}来完成这项工作。让我们来计算每种比较的1亿次执行时间:

^{pr2}$

因此,您可以看到差异并不是很大(在本例中,字符串比较只慢了大约25%)。那么为什么字符串比较慢呢?好吧,找到答案的方法是看看比较操作的实现。在

在Python2.7中,比较是由^{} function in ^{}实现的。(请在一个新窗口中打开这段代码,以继续我的其余分析。)在第817行,您将看到,如果被比较的对象是同一类型的,并且它们的类结构中有一个tp_compare函数,那么这个函数就被调用了。在整数对象的情况下,会发生这样的情况,函数是^{} in ^{},您将看到它非常简单。在

但是字符串没有tp_compare函数,因此do_cmp继续调用^{},后者最多调用^{}(依次尝试三个比较运算符EQ、LT和GT)。这调用^{},后者调用^{} in ^{}。在

所以字符串比较比较慢,因为它必须使用复杂的“富比较”基础设施,而整数比较更直接。但即便如此,也没什么区别。在

嗯?由于存储空间减少,需要比较的比特数也减少了。比较比特就是工作,少做工作意味着它走得更快。在

相关问题 更多 >