Christian Heimes wrote:
Ian Kelly schrieb:
The purpose of obj.__len__() is to implement len(obj), which simply
calls it. So obj.__len__() may be faster, but only marginally. The
reason to prefer len(obj) is that if you inadvertently pass an object
that does not implement __len__, you get the more appropriate
TypeError rather than an AttributeError.
len(obj) is faster than obj.__len__() for several types like str. In
general len() is as least as fast __len__(). len() also does some extra
sanity checks.
python2.5 -m timeit "'abc'.__len__()"
1000000 loops, best of 3: 0.453 usec per loop
python2.5 -m timeit "len('abc')"
1000000 loops, best of 3: 0.292 usec per loop
Common code paths are already highly optimized. Don't try to be clever
unless you really understand what happens inside the interpreter. The
__internal__ methods are called magic methods for a reason. ;)
Christian
Thanks for the useful insight.
Then why to have __len__() internal method at all when the built-in
len() is faster?
I heard, in Python3, this internal method is being pruned/renamed to
something else? Can someone please shed light here?
Thanks. Nikhil
--
http://mail.python.org/mailman/listinfo/python-list