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

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

Я прекрасно понимаю, что такое фактический список ( 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 .

  • поместите 0 перед номерами в списке, если они меньше десяти (в python)
  • Получить первый элемент списка, если список не равен None: Python
  • у python есть конструктор списка?
  • каждая запись списка nummered bij order
  • Почему содержимое кортежа изменяется, когда я добавляю его в список внутри него, но не меняет, когда я обновляю переменную?
  • Объединение двух списков - разница между '+ =' и extend ()
  • Лучший способ распечатать вывод списка в python
  • Как я могу группировать эквивалентные элементы вместе в списке Python?
  • Python - лучший язык программирования в мире.