On 2007-10-30, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote:
> On Tue, 30 Oct 2007 15:25:54 GMT, Neil Cerutti <[EMAIL PROTECTED]> wrote:
>>On 2007-10-30, Eduardo O. Padoan <[EMAIL PROTECTED]> wrote:
>>> This is a FAQ:
>>> http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list.htm
>>
>>Holy Airy Persiflage Batman!
>>
>>Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] 
>>on
>>win32
>>Type "help", "copyright", "credits" or "license" for more information.
>>>>> import timeit
>>>>> timeit.Timer('len(seq)', 'seq = range(100)').timeit()
>>0.20332271187463391
>>>>> timeit.Timer('seq.__len__()', 'seq = range(100)').timeit()
>>0.48545737364457864
>
> Not sure what you're trying to demonstrate.  

That len as a builtin can be faster than len as an attribute, and
doesn't need any further explanation than that.

> Here's another pointless transcript, though:
>
>     [EMAIL PROTECTED]:~$ python -m timeit -s '
>     seq = range(100)
>     ' 'len(seq)'
>     1000000 loops, best of 3: 0.211 usec per loop
>     [EMAIL PROTECTED]:~$ python -m timeit -s '
>     seq = range(100)
>     ' 'seq.__len__()'
>     1000000 loops, best of 3: 0.317 usec per loop
>     [EMAIL PROTECTED]:~$ python -m timeit -s '
>     class X(object):
>       def __len__(self): return 100
>     seq = X()
>     ' 'seq.__len__()'
>     1000000 loops, best of 3: 0.427 usec per loop
>     [EMAIL PROTECTED]:~$ python -m timeit -s '
>     class X(object):
>       def __len__(self): return 100
>     seq = X()
>     ' 'len(seq)'
>     1000000 loops, best of 3: 0.701 usec per loop
>     [EMAIL PROTECTED]:~$
>
> I guess we've learned that sometimes something is faster than
> something else, and other times the contrary.

It demonstratess that len is faster than __len__ for lists (and
probably for all builtin types) but not for user defined type X
(and probably not for any user defined type).

Or it may demonstrate that I'm all wet. If so, I've brought my
shampoo.

But if I'm wrong about the performance benefits then I guess I'm
still in the dark about why len is a builtin. The only compelling
thing in the linked explation was the signatures of the guys who
wrote the artible. (Guido does admit he would, "hate to lose it
as a builtin," but doesn't explain why that should be a bad
thing).

-- 
Neil Cerutti
It isn't pollution that is hurting the environment; it's the impurities in our
air and water that are doing it. --Dan Quayle
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to