Существует ли официальный или общеизвестный стандарт минимального интерфейса для «списка»?

Я продолжаю видеть такие функции и документацию как это и это (чтобы назвать несколько), которые работают или ссылаются на объекты, подобные списку .

Я прекрасно понимаю, что такое фактический список ( dir(list) ), и может вывести, какие ( часто меняющиеся ) методы из списка необходимы в большинстве ссылок на «подобный списку объект», однако количество раз Я вижу, что это ссылается на меня со следующим вопросом:

Существует ли официальный или общеизвестный стандарт минимального интерфейса для «списка»? Это так же просто, как актуализация __getitem__ , или он согласен с тем, что необходимы дополнительные вещи, такие как __len__ и __setitem__ ?

Это может показаться семантикой, но я не могу не думать, что, если не существует стандартного минимального требования к интерфейсу, различные идеи «сходства списков» могут вызвать некоторые проблемы / неправильную обработку. Может быть, это всего лишь небольшая минута для печатания утиных питов?

One Solution collect form web for “Существует ли официальный или общеизвестный стандарт минимального интерфейса для «списка»?”

См. Модуль collections.abc . Из приведенных там абстрактных базовых классов list в Python реализует Iterable , Container , Sized , Sequence и MutableSequence . Теперь, из этих, Iterable , Sequence и MutableSequence можно было случайно назвать list-like .

Тем не менее, я бы понял, что термин « список» означает, что он является MutableSequence – имеет, по крайней мере, методы __getitem__ , __setitem__ , __delitem__ и __len__ , ожидая, что он также будет иметь методы mixin, упомянутые в документации, такие как append .

Если нет необходимости в __setitem__ и __delitem__ его следует называть последовательностью – предположение состоит в том, что если что-то принимает последовательность, оно не обязательно должно быть изменчивым, таким образом, там работают str , bytes , tuple т. Д.


Ваши две ссылки подчеркивают неопределенность термина:

API-интерфейс plotly требует, list-like объекты, list-like , были сериализованы в массив JSON внутренним PlotlyJSONEncoder который делегирует большую часть кодировки Python JSONEncoder . Однако последний кодирует только tuple и list (и подклассы) в массив JSON; таким образом, список, как здесь, означает list , tuple или подклассы. Пользовательский объект последовательности, который не является подклассом, приведет к TypeError: [...] is not JSON serializable .

В рецепте unzip, с которым вы связались, требуется объект, который ведет себя как Sequence , (изменчивость не требуется), таким образом, tuple или str или любой пользовательский объект, реализующий Sequence будет там делать.


TL; DR list-like – неопределенный термин. Вместо этого предпочтительнее использовать термины итеративная, последовательность и изменяемая последовательность, теперь, когда они определены в collections.abc .

  • «МОСТ-О» в python
  • Сравнение двух списков координат в python и использование значений координат для назначения значений
  • эффективность конкатенации списка питов
  • Есть ли более элегантный / питонический способ выразить эту конструкцию?
  • Переместить все нули в начало списка в Python
  • python - найти позицию индекса в списке на основе частичной строки
  • Convert For Loop to List Consrehension: тестирование, если элементы из списка 2 являются частичным совпадением для элементов в списке 1
  • Python проверяет первый и последний индекс списка
  • Найти все последовательные подпоследовательности длины n в последовательности
  • Как преобразовать текстовый файл в список в Python
  • Расширение списка списков в Python?
  • Python - лучший язык программирования в мире.