在Python中,“while”和“for xrange”哪个更快?

6 投票
7 回答
15247 浏览
提问于 2025-04-15 14:04

我们可以像这样进行数字迭代:

for i in xrange(10):
    print i,

还有C风格的写法:

i = 0
while i < 10:
    print i,
    i = i + 1

是的,我知道,第一种写法出错的可能性更小,更符合Python的风格,但它的速度够快吗,跟C风格的相比?

顺便说一下,我来自C++的世界,对Python还很陌生。

7 个回答

3

第一个。

你的意思是,开发得更快,对吧?

补充说明:其实没关系,现在的机器都很快,所以在找到性能瓶颈之前,去考虑那些微小的优化是没有意义的,最好先用详细的分析工具来找出问题所在。

15

谁在乎呢?说真的。如果你想知道,可以用timeit这个工具包(你可以在命令行里用 -m 来调用它)。

不过这根本不重要,因为差别微乎其微。而且一般来说,如果你想要速度快,Python并不是你会选择的语言。

17

我敢肯定,while版本会更慢。因为在每次循环的时候,Python都需要查找整数对象的加法操作,这并不是纯粹的C语言,虽然它看起来像是!

如果你想要一个更符合Python风格的版本,可以使用:

print " ".join(str(i) for i in xrange(10))

补充:我的时间测试结果是这样的。这只是一个简单的循环,没有打印,只是为了让你看到在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

撰写回答