KKc*_*KKc 1 python comparison time python-3.x
我做了这个测试
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)
Run Code Online (Sandbox Code Playgroud)
并获得结果
1.9073486328125e-06 #test1()
9.5367431640625e-07 #test2()
1.9073486328125e-06 #test3()
Run Code Online (Sandbox Code Playgroud)
执行时间类似.这是真的,使用整数而不是字符串减少存储空间但是执行时间呢?
单个执行一小段代码的时间并不能完全告诉你.特别是,如果你看看从你的时序数test1和test3,你会看到的数字是相同的.这应该是一个警告信号,事实上,你在这里看到的只是计时器的分辨率:
>>> 2.0 / 2 ** 20
1.9073486328125e-06
>>> 1.0 / 2 ** 20
9.5367431640625e-07
Run Code Online (Sandbox Code Playgroud)
为了获得更好的结果,您需要多次运行代码,并测量和减去时序开销.Python有一个内置的模块timeit来完成这个.让我们为每种比较执行1亿次执行:
>>> from timeit import timeit
>>> timeit('100 > 200', number=10**8)
5.98881983757019
>>> timeit('"100" > "200"', number=10**8)
7.528342008590698
Run Code Online (Sandbox Code Playgroud)
所以你可以看到差异实际上并不是那么多(字符串比较在这种情况下只有约25%).那么为什么字符串比较慢呢?那么,找出的方法是看比较操作的实现.
在Python 2.7中,比较由do_cmp函数object.c实现.(请在新窗口中打开此代码以完成我的其余分析.)在第817行,您将看到如果被比较的对象是相同的类型,并且如果它们tp_compare的类结构中有一个函数,那么该函数叫做.在整数对象的情况下,这就是所发生的,函数int_compare在intobject.c,你会看到非常简单.
但是字符串没有tp_compare函数,所以do_cmp进行调用try_rich_to_3way_compare然后调用try_rich_compare_bool最多三次(依次尝试三个比较运算符EQ,LT和GT).这就要求try_rich_compare它调用string_richcompare在stringobject.c.
因此,字符串比较较慢,因为它必须使用复杂的"丰富比较"基础结构,而整数比较更直接.但即便如此,它也没有那么大的差别.
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |