>> For all practical purpose, it would be enough to define that the
>> expression:
>>
>> mylist += [item]
>>
>> gets optimized to mylist.append(item).
>>
>
> Unfortunately, that would create yet another special case of operators
> breaking the rules. Most operators invoke magic methods. This would prevent
> ``+=`` from invoking ``__iadd__`` for lists, since the right-hand side
> would need to be compiled differently. It's similar to why ``and`` and
> ``or`` keywords can't have magic methods.
>

It seems that the optimization is already in place:

import timeit

COUNT = 10000
REPS = 10000

def using_append():
    result = []
    for i in range(COUNT):
        result.append(i)
    return result


def using_concat():
    result = []
    for i in range(COUNT):
        result += [i]
    return result


def using_iadd():
    result = []
    for i in range(COUNT):
        result.__iadd__([i])
    return result


def main():
    print(timeit.timeit('using_append()', globals=globals(), number=REPS))
    print(timeit.timeit('using_concat()', globals=globals(), number=REPS))
    print(timeit.timeit('using_iadd()', globals=globals(), number=REPS))



if __name__ == '__main__':
    main()


-- 
Juancarlo *Añez*
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to