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

Reply via email to