How smart is the Python interpreter?
Gary Herron
gherron at islandtraining.com
Thu Jul 31 12:16:16 EDT 2008
ssecorp wrote:
> def str_sort(string):
> s = ""
> for a in sorted(string):
> s+=a
> return s
>
>
> if i instead do:
>
> def str_sort(string):
> s = ""
> so = sorted(string)
> for a in so:
> s+=a
> return s
>
>
> will that be faster or the interpreter can figure out that it only has
> to do sorted(string) once? or that kind of cleverness is usually
> reserved for compilers and not interpreters?
> --
> http://mail.python.org/mailman/listinfo/python-list
>
The 'for' statement is only executed once of course. It's the body of
the 'for' which is executed multiple times. So in both pieces of code,
the 'sorted' is only executed once, and the returned string is bound to
a name in the second but not the first.
However, you are worrying about optimizing the wrong things here. The
's+=a' line has terrible (quadratic) performance. Instead use the
string method 'join' which has linear performance.
def str_sort(string):
return "".join(sorted(string))
No for loop, no inefficient accumulation.
Gary Herron
More information about the Python-list
mailing list