Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is faster in Python, "while" or "for xrange"

We can do numeric iteration like:

for i in xrange(10):
    print i,

and in C-style:

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

Yes, I know, the first one is less error-prone, more pythonic but is it fast enough as C-style version?

PS. I'm from C++ planet and pretty new on Python one.

like image 630
bocco Avatar asked Sep 04 '09 05:09

bocco


4 Answers

I am sure the while version is slower. Python will have to lookup the add operation for the integer object on each turn of the loop etc, it is not pure C just because it looks like it!

And if you want a pythonic version of exactly the above, use:

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

Edit: My timings look like this. This is just a silly running loop without printing, just to show you what writing out "i += 1" etc costs in Python.

$ 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
like image 104
u0b34a0f6ae Avatar answered Sep 18 '22 20:09

u0b34a0f6ae


Who cares? Seriously. If you want to know, use timeit package (you can invoke it from command line with -m).

But it doesn't matter at all, because the difference is negligible. And in general, Python is not a language that you choose if you want speed.

like image 41
J S Avatar answered Sep 21 '22 20:09

J S


The first one.

You mean, faster to develop, right?

PS: It doesn't matter, machines these days are so fast that it is meaningless to ponder on micro optimizations, prior to identifying the bottlenecks using a thorough profiler.

like image 34
lprsd Avatar answered Sep 18 '22 20:09

lprsd


They are both to avoid :-)

Generally speaking, each time I see an iteration over numbers, I see some non-pythonic code, that could be expressed in a better way using iterations over lists or generators.
Actually, I've said "pythonic", but it is all about readability. Using idiomatic code will increase readability, and ultimately also performance, because the compiler will better know how to optimize it.

like image 28
rob Avatar answered Sep 19 '22 20:09

rob