В Python len - это функция, чтобы получить длину коллекции, вызвав метод __len__:
def len(x):
return x.__len__()
Поэтому я ожидал бы, что прямой вызов __len__() будет по крайней мере таким быстрым, как len().
import timeit
setup = '''
'''
print (timeit.Timer('a="12345"; x=a.__len__()', setup=setup).repeat(10))
print (timeit.Timer('a="12345"; x=len(a)', setup=setup).repeat(10))
Но результаты тестирования с приведенным выше кодом показывают, что len() будет быстрее. Зачем?