is this sort method the same as the one in python 2.4

Fredrik Lundh fredrik at pythonware.com
Sun Jan 30 02:30:17 EST 2005


Raymond Hettinger wrote:

>> I'm trying to emulate the sorted() method introduced in python 2.4. The
>> only difference is that it takes a sequence as one of its arguments
>> rather than being a method of the sequence class. Does my method do the
>> same as the sorted()?
>
> Almost.  This is closer to the mark:
>
> def sorted(iterable, cmp=None, key=None, reverse=False):
>    "return a sorted copy of its input"
>    if sys.version_info >= (2,4):
>        return sorted(iterable, cmp, key, reverse)

with your code

    print sorted([1, 2, 3])

gives me a traceback that ends with

  File "test.py", line 6, in sorted
    return sorted(iterable, cmp, key, reverse)
  File "test.py", line 6, in sorted
    return sorted(iterable, cmp, key, reverse)
  File "test.py", line 6, in sorted
    return sorted(iterable, cmp, key, reverse)
  File "test.py", line 5, in sorted
    if sys.version_info >= (2,4):
RuntimeError: maximum recursion depth exceeded in cmp

the recursion isn't really that hard to explain, but the runtime error doesn't
really seem right...

:::

to fix the recursion, move the if-statement so you only define the function
if needed:

     if sys.version_info < (2,4):
        def sorted(...):
            ....

</F> 






More information about the Python-list mailing list