Страницы

Поиск по вопросам

пятница, 19 октября 2018 г.

Python len() и .__len__() в чем разница?

В чем разница между len() и .__len__()? И могут ли они возвращать разные значения?


Ответ

__len__ это магический метод, который реализует len операцию. Как и любой другой специальный метод, он вызывается специальным образом (должен быть определён в самом классе), то есть len(o) не всегда эквивалентно o.__len__(). Подробнее в ответе о магических методах
Дополнительно, значения len() ограничены sys.maxsize
>>> import sys >>> class Big: ... def __len__(self): ... return sys.maxsize + 1 ... >>> len(Big()) Traceback (most recent call last) ... OverflowError: cannot fit 'int' into an index-sized integer >>> Big().__len__() 9223372036854775808
На практике, иногда полезно иметь последовательность с большой длиной:
Get the highest possible gmtime for any architecture Weighted random sample in python

Комментариев нет:

Отправить комментарий