принадлежность переменной к списку в Python
передаваемые значения таковы, что ветка else не должна выполняться(например, var=354, varList=[123,321,354]). Вывод переданных значений перед проверкой условия это подтверждает, однако каким-то непостижимым образом выполняется ветка else. при этом если попробовать то же самое запустить в командной строке(без всяких фреймворков и библиотек) то все работает как надо(т.е. else не выполняется) вопрос в том, как такое вообще возможно и как этого избежать?
Отслеживать
задан 5 сен 2017 в 9:20
57 2 2 серебряных знака 8 8 бронзовых знаков
Этот код правильный (пример: checkSomething(1, [1, 2, 3]) , checkSomething(‘1’, ‘1,2,3’) ). Покажите тот, в котором проблема
Функция isinstance() в Python, принадлежность экземпляра к классу
Позволяет проверить принадлежность экземпляра к классу
Синтаксис:
isinstance(object, classinfo)
Параметры:
- object — объект, требующий проверки,
- classinfo — класс, кортеж с классами или рекурсивный кортеж кортежей или с версии Python 3.10 может быть объединением нескольких типов (например int | str ).
Возвращаемое значение:
Описание:
Функция isinstance() вернет True , если проверяемый объект object является экземпляром любого указанного в classinfo класса (классов) или его подкласса (прямого, косвенного или виртуального).
Если объект object не является экземпляром данного типа, то функция всегда возвращает False .
Функцией isinstance() можно проверить класс, кортеж с классами (с Python 3.10 может быть записью, объединяющей нескольких типов, например, int | str ), либо рекурсивный кортеж кортежей. Другие типы последовательностей аргументом classinfo не поддерживаются.
Если аргумент classinfo не является классом, либо кортежем с классами (с Python 3.10 может быть записью, объединяющей нескольких типов, например, int | str ), то возбуждается исключение TypeError .
Изменено в Python 3.10: аргумент classinfo может иметь тип Union и записываться как побитовое или — | .
>>> isinstance(1, int | str) # True >>> isinstance("", int | str) # True
Доступ к пользовательскому типу для объекта union можно получить из types.UnionType и использовать для проверок isinstance() . Невозможно создать экземпляр объекта из типа:
>>> import types >>> isinstance(int | str, types.UnionType) # True >>> types.UnionType() # Traceback (most recent call last): # File "", line 1, in # TypeError: cannot create 'types.UnionType' instances
Примеры проверок принадлежности экземпляра к классу.
Взгляните на следующий код:
>>> a = 3 >>> isinstance(a, object) # True >>> type(a) == object # False >>> issubclass(type(a), object) # True
Молодые программисты часто не понимают что здесь происходит. Давайте разбираться.
Функция type() с одним аргументом object возвращает тип объекта — точный класс, из которого был создан переданный аргумент object . Мы знаем, что все целые числа в Python являются типом int . Это означает, что проверка объекта type(3) == object в точности эквивалентна проверке объекта int == object , что однозначно неверно.
В Python, как это известно — все является объектом, следовательно дочерний класс (в данном случае int ) наследуется от родительского (в данном случае object ) и считается, что такое поведение имеет отношение is a . Отношение is a — это то, что проверяет функция isinstance() .
Существует аналогичная функция issubclass() для проверки того же отношения, только для класса вместо экземпляра этого класса. В большинстве случаев isinstance(x, y) == issubclass(type(x), y) .
Классы всегда имеют одну и ту же ссылку в одной сессии интерпретатора, поэтому можно использовать оператор is вместо оператора == для сравнения. Таким образом, type(3) is int будет истинным.
Изобразим сказанное выше на примере:
class Base: def __init__(self): self.foo='foo' class Sub(Base): def __init__(self): super().__init__() >>> obj = Base() >>> sub_obj = Sub() >>> isinstance(obj, Base) # True >>> isinstance(obj, Sub) # False >>> isinstance(sub_obj, Base) # True >>> isinstance(sub_obj, Sub) # True >>> type(sub_obj) == Base # False >>> type(sub_obj) # >>> type(sub_obj) == Sub # True >>> issubclass(type(sub_obj), Base) # True
Общие приемы проверок.
>>> x = 1 >>> isinstance(x, int) # True >>> x = [1, 2, 3] >>> isinstance(x, list) # True >>> x = (1, 2, 3) >>> isinstance(x, tuple) # True # Проверим, является ли строка 'Hello' одним из типов, описанных в параметре type >>> isinstance('Hello', (float, int, str, list, dict, tuple)) # True # Проверка, на принадлежность к экземпляром myObj class myObj: name = "John" y = myObj() >>> isinstance(y, myObj) # True
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Как записать принадлежит в питоне
Множество в языке Питон — это структура данных, эквивалентная множествам в математике. Множество может состоять из различных элементов, порядок элементов в множестве неопределен. В множество можно добавлять и удалять элементы, можно перебирать элементы множества, можно выполнять операции над множествами (объединение, пересечение, разность). Можно проверять принадлежность элемента множеству.
В отличие от массивов, где элементы хранятся в виде последовательного списка, в множествах порядок хранения элементов неопределен (более того, элементы множества хранятся не подряд, как в списке, а при помощи хитрых алгоритмов). Это позволяет выполнять операции типа “проверить принадлежность элемента множеству” быстрее, чем просто перебирая все элементы множества.
Элементами множества может быть любой неизменяемый тип данных: числа, строки, кортежи. Изменяемые типы данных не могут быть элементами множества, в частности, нельзя сделать элементом множества список (но можно сделать кортеж) или другое множество. Требование неизменяемости элементов множества накладывается особенностями представления множества в памяти компьютера.
Задание множеств
Множество задается перечислением всех его элементов в фигурных скобках. Исключением явлеется пустое множество, которое можно создать при помощи функции set() . Если функции set передать в качестве параметра список, строку или кортеж, то она вернёт множество, составленное из элементов списка, строки, кортежа. Например:
A = A = set('qwerty') print(A)
Каждый элемент может входить в множество только один раз, порядок задания элементов неважен. Например, программа:
A = B = print(A == B)
выведет True , так как A и B — равные множества.
Каждый элемент может входить в множество только один раз. set(‘Hello’) вернет множество из четырех элементов: .
Работа с элементами множеств
Узнать число элементов в множестве можно при помощи функции len .
Перебрать все элементы множества (в неопределенном порядке!) можно при помощи цикла for :
primes = for num in primes: print(num)
Проверить, принадлежит ли элемент множеству можно при помощи операции in , возвращающей значение типа bool . Аналогично есть противоположная операция not in . Для добавления элемента в множество есть метод add :
A = print(1 in A, 4 not in A) A.add(4)
Для удаления элемента x из множества есть два метода: discard и remove . Их поведение различается только в случае, когда удаляемый элемент отсутствует в множестве. В этом случае метод discard не делает ничего, а метод remove генерирует исключение KeyError .
Наконец, метод pop удаляет из множества один случайный элемент и возвращает его значение. Если же множество пусто, то генерируется исключение KeyError .
Из множества можно сделать список при помощи функции list .
Операции с множествами
С множествами в питоне можно выполнять обычные для математики операции над множествами.
ОПЕРАТОРЫ ПРИНАДЛЕЖНОСТИ В PYTHON
В Python существует два оператора принадлежности: in и not in.
Эти операторы проверяют, является ли значение частью какой либо последовательности: строки, списка, кортежа, словаря.
Оператор «in»
Возвращает True, если значение присутствует в последовательности, иначе возвращает False.
Пример со строкой:
a = "b" in "abc" print(a)
True
Пример со списком:
a = 7 in [3, 4, 5] print(a)
False
Оператор «not in»
Возвращает True, если значения нет в последовательности. Если значение присутствует в последовательности, то возвращает False. Пример:
a = 5 not in (2, 3, 4) print(a)