Python Glossary English

Python 3.3+collectionsпонятие

collections.abc.Sequence

collections.abc — протоколы

Протокол неизменяемой последовательности: индексация, срезы, len, in (list, tuple, str).

Синтаксис

isinstance(obj, collections.abc.Sequence)

Главная ловушка: str тоже Sequence, поэтому проверка не отличит список строк от одной строки — функция спокойно переберёт её по символам, строку приходится отсеивать отдельной проверкой. Слово «неизменяемая» здесь условно: list тоже Sequence, ведь MutableSequence наследуется от него, и отдельной проверки «менять нельзя» в стандартной библиотеке нет. Наследнику хватает __getitem__ и __len__ — __contains__, __iter__, __reversed__, index и count дают миксины.

Примеры

import collections.abc as abc
print(isinstance([1], abc.Sequence))   # → True
print(isinstance((1,), abc.Sequence))   # → True
print(isinstance('hello', abc.Sequence), isinstance(range(3), abc.Sequence))   # → True True
print(isinstance({1, 2}, abc.Sequence), isinstance({'a': 1}, abc.Sequence))   # → False False
print(isinstance(iter([1, 2]), abc.Sequence))   # → False
print(issubclass(list, abc.MutableSequence), issubclass(tuple, abc.MutableSequence))   # → True False

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности