Есть ли какой-либо случай, где len (someObj) не называет someObj's __ len __ функция?

PowerBI позволяет сделать это довольно легко, просто изменив форматирование на «показать значение в процентах от общего итога», как показано на рисунке ниже.

процент от общей суммы

7
задан David Locke 30 January 2009 в 15:58
поделиться

4 ответа

Если __len__ возвращает длину sys.maxsize, len() повысит исключение. Это не верно для вызова __len__ непосредственно. (На самом деле Вы могли возвратить любой объект из __len__ который не будет пойман, если это не пройдет len().)

9
ответ дан 6 December 2019 в 12:55
поделиться

Какое ускорение Вы видели? Я не могу предположить, что это было примечательно, было это?

Из http://mail.python.org/pipermail/python-list/2002-May/147079.html

в определенных ситуациях нет никакого различия, но использующий len () предпочтен по паре причин.

во-первых, не рекомендуется пойти, звоня __methods__ самостоятельно, они предназначены, чтобы использоваться другими частями Python.

len() будет работать над любым типом объекта последовательности (lists, tuples, и все). __len__ будет только работать над экземплярами класса с a __len__ метод.

len() возвратит более соответствующее исключение на объектах без длины.

8
ответ дан 6 December 2019 в 12:55
поделиться

Я думаю, что ответ - то, что это будет всегда работать - согласно документам Python:

__len__(self):

Названный для реализации встроенной функции len (). Должен возвратить длину объекта, целое число> = 0. Кроме того, объект, который не определяет a __nonzero__() метод и чей __len__() нуль возвратов метода считается ложью в булевом контексте.

1
ответ дан 6 December 2019 в 12:55
поделиться

По словам Mark Pilgrim, это похоже нет. len(someObj) совпадает с someObj.__len__();

Удачи!

-2
ответ дан 6 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: