性能:(比较字符串)vs(转换为int)

Coo*_*lin 5 python

大家好:我不是Stack Overflow的新手,而是python的新手,但是多年来我一直在编写代码,并且想知道以下哪一项会更好。

假设我已经从os加载了envioron,并且确保环境中的标志为“ 0”或“ 1”。

if environ["Flag"] == "1":
    do_something
Run Code Online (Sandbox Code Playgroud)

要么

if int(environ["Flag"]) == 1:
    do something
Run Code Online (Sandbox Code Playgroud)

乍一看,它看起来像到int的转换,然后由于转换,比较会比较慢,但是,我知道字符串比较也会很慢。

有没有人检查过这个?

谢谢马克。

Mar*_*cin 6

为什么不自己检查一下:

import timeit

print(timeit.timeit('a="1"; a == "1"', number=10000))
print(timeit.timeit('a="1"; int(a) == 1', number=10000))
Run Code Online (Sandbox Code Playgroud)

对我来说结果是:

0.0003461789892753586
0.0019836849969578907
Run Code Online (Sandbox Code Playgroud)

这表明字符串比较速度要快得多。


Pad*_*ham 5

In [44]: timeit int("1") == 1
1000000 loops, best of 3: 380 ns per loop

In [44]: timeit "1" == "1"
10000000 loops, best of 3: 36.5 ns per loop
Run Code Online (Sandbox Code Playgroud)

强制转换为int总是比较慢,这很有意义,您可以从字符串开始,然后转换为int而不是仅仅创建字符串。

转换是最昂贵的部分:

In [45]: timeit 1
100000000 loops, best of 3: 11.9 ns per loop

In [46]: timeit "1" 
100000000 loops, best of 3: 11 ns per loop

In [47]: timeit int("1")
1000000 loops, best of 3: 366 ns per loop
Run Code Online (Sandbox Code Playgroud)

有使用创建一个字符串之间的差异a = "1"不是做a = 1 b = str(1)这是你可能得到confused`。

In [3]: a = 1

In [4]: timeit str(b)
10000000 loops, best of 3: 135 ns per loop
Run Code Online (Sandbox Code Playgroud)

使用python2.7计时,使用python 3的区别几乎相同。

输出是使用ipython magic timeit函数从我的ipython终端获得的