大家好:我不是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的转换,然后由于转换,比较会比较慢,但是,我知道字符串比较也会很慢。
有没有人检查过这个?
谢谢马克。
为什么不自己检查一下:
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)
这表明字符串比较速度要快得多。
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终端获得的