什么是更快的Python,"while"或"for xrange"

boc*_*cco 5 python micro-optimization

我们可以做数字迭代,如:

for i in xrange(10):
    print i,
Run Code Online (Sandbox Code Playgroud)

和C风格:

i = 0
while i < 10:
    print i,
    i = i + 1
Run Code Online (Sandbox Code Playgroud)

是的,我知道,第一个不容易出错,更像pythonic,但它是否足够快作为C风格的版本?

PS.我是来自C++星球,而且是Python上的新星.

J S*_*J S 15

谁在乎?认真.如果您想知道,请使用timeit包(您可以使用-m从命令行调用它).

但这根本不重要,因为差异可以忽略不计.一般而言,如果您想要速度,Python不是您选择的语言.

  • 是的,并且很可能每个Python实现都可以这样做.相信编译器.我记得C代码应该使用"do-while"或"while"更快的时间......根据十年前在一些破旧的编译器上发生的事情.这听起来像是同一种想法. (3认同)

u0b*_*6ae 15

我确定while版本速度较慢.Python必须在循环的每个回合中查找整数对象的添加操作等,它不是纯粹的C,因为它看起来像它!

如果你想要一个完全如上所述的pythonic版本,请使用:

print " ".join(str(i) for i in xrange(10))
Run Code Online (Sandbox Code Playgroud)

编辑:我的时间看起来像这样.这只是一个没有打印的愚蠢运行循环,只是为了向您展示在Python中写出"i + = 1"等成本.

$ python -mtimeit "i=0" "while i < 1000: i+=1"
1000 loops, best of 3: 303 usec per loop
$ python -mtimeit "for i in xrange(1000): pass"
10000 loops, best of 3: 120 usec per loop
Run Code Online (Sandbox Code Playgroud)

  • 在Python 3中,print是一个函数,只需说`print(*range(10))` (4认同)
  • @ kaizer.se:你可以在python 2.6中使用`from __future__ import print_function` (2认同)