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?

The optimizations performed by a Python interpreter and where they are performed depend on the implementation and version. CPython is conservative about optimizations. Not only do the developers want to be sure they are 100% correct (unlike too many optimizing compilers), but Guido also rejects some that are too tricky and too fragile (easily broken by new maintainers). In Python 3.0, here are two compiler optimizations

>>> from dis import dis
>>> def f(): return 1+2

>>> dis(f)
  1           0 LOAD_CONST               3 (3)
              3 RETURN_VALUE

# constant arithmetic (folding); done with floats also

>>> def f():
        a,b = 1,2
        return a+b

>>> dis(f)
  2           0 LOAD_CONST               3 ((1, 2))
              3 UNPACK_SEQUENCE          2
              6 STORE_FAST               0 (a)
              9 STORE_FAST               1 (b)

  3          12 LOAD_FAST                0 (a)
             15 LOAD_FAST                1 (b)
             18 BINARY_ADD
             19 RETURN_VALUE

# tuples with constant members are pre-built by the compiler and stored
in the code object. What you don't see (if it is still there) is an optimization in the interpreter loop for BINARY_ADD that takes a shortcut if both operands are ints.

tjr

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to