Тестові операції членства

Оновлено: 24.04.2023

Оператори in і not in перевіряють членство. x in s обчислюється як True, якщо x є членом s, і False в іншому випадку. x not in s повертає заперечення x in s. Усі вбудовані послідовності та типи наборів підтримують це, а також словник, для якого in перевіряє, чи має словник заданий ключ. Для типів контейнерів, таких як список, кортеж, набір, frozenset, dict або collections.deque, вираз x in y еквівалентний any(x is e or x == e for e in y).

Для типів рядків і байтів x в y є True тоді і тільки тоді, коли x є підрядком y. Еквівалентним тестом є y.find(x) != -1. Порожні рядки завжди вважаються підрядками будь-яких інших рядків, тому "" у "abc поверне True.

Для визначених користувачем класів, які визначають метод __contains__(), x in y повертає True, якщо y.__contains__(x) повертає істинне значення, і False інакше.

Для визначених користувачем класів, які не визначають __contains__(), але визначають __iter__(), x в y є True, якщо деяке значення z, для якого вираз x є z або x == z є істинним, створюється під час повторення y. Якщо під час ітерації виникає виняток, це ніби in викликав цей виняток.

Нарешті, випробувано старий протокол ітерації: якщо клас визначає __getitem__(), x in y є True тоді і тільки тоді, коли існує невід’ємне ціле число i таким чином, що x є y[i] або x == y[i], і жоден нижній цілий індекс не викликає виключення IndexError. (Якщо виникає будь-який інший виняток, це ніби in викликав цей виняток).

Оператор not in визначено таким, що має зворотне значення істинності in.