Python3: on removing map, reduce, filter
Steven Bethard
steven.bethard at gmail.com
Mon Jan 10 01:22:27 EST 2005
beliavsky at aol.com wrote:
> Steve Bethard wrote:
>> Robert Kern wrote:
>>> def square(x):
>>> return x*x
>>> map(square, range(1000))
>>>
>>> versus
>>> [x*x for x in range(1000)]
>>>
>>> Hint: function calls are expensive.
>>
>> $ python -m timeit -s "def square(x): return x*x" "map(square, range(1000))"
>> 1000 loops, best of 3: 693 usec per loop
>>
>> $ python -m timeit -s "[x*x for x in range(1000)]"
>> 10000000 loops, best of 3: 0.0505 usec per loop
>
> Functions will often be complicated enought that inlining them is not
> feasible.
True, true. However, list comprehensions still seem to be comparable in
speed (at least in Python 2.4):
$ python -m timeit -s "def f(x): return x*x" "[f(x) for x in xrange(1000)]"
1000 loops, best of 3: 686 usec per loop
$ python -m timeit -s "def f(x): return x*x" "map(f, xrange(1000))"
1000 loops, best of 3: 690 usec per loop
Presumably this is because the C code for the byte codes generated by a
list comprehension isn't too far off of the C code in map. I looked at
bltinmodule.c for a bit, but I'm not ambitious enough to try verify this
hypothesis. ;)
Steve
More information about the Python-list
mailing list