Nick Coghlan wrote:

def mysort(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) seq = list(iterable) if reverse: seq.reverse() # preserve stability if key is not None: seq = [(key(elem), i, elem) for i, elem in enumerate(seq)] seq.sort(cmp) if key is not None: seq = [elem for (key, i, elem) in seq] if reverse: seq.reverse() return seq


You'd be better off defining things once (and using the standard name) rather than doing a test every time your function is called. Something like:

    import sys
    ...
    if sys.version_info < (2, 3):
        def enumerate(iterable): # iterators not yet invented
            return zip(range(len(iterable)), iterable)

    if sys.version_info < (2, 4):
        def sorted(iterable, cmp=None, key=None, reverse=False):
            "return a sorted copy of its input"
            seq = list(iterable)
            if reverse:
                seq.reverse()        # preserve stability
            if key is not None:
                seq = [(key(elem), i, elem) for i, elem
                       in enumerate(seq)]
                seq.sort(cmp)
            if key is not None:
                seq = [elem for (key, i, elem) in seq]
            if reverse:
                seq.reverse()
            return seq

If you like your names better, you can use:

    if sys.version_info >= (2, 4):
        mysort = sorted
    else:
        def mysort(iterable, cmp=None, key=None, reverse=False):
            ...

or even (if you can't be bothered to look up when features happened):

    try:
        test = enumerate
    except NameError:
        def enumerate(iterable):
            ...
    try:
        test = sorted
    except NameError:
        def sorted(iterable, cmp=None, key=None, reverse=False):
            ...


--Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list

Reply via email to