Найти тему
proger ЧАЙНИК

isinstance() против type()

Оглавление

Добрый день! А сегодня мы поговорим с вами о некоторых встроенных функциях языка Python, а именно: type() и isinstance(). Python, будучи динамически типизированным языком программирования, позволяет менять типы переменных динамически, на что интерпретатор, соответсвенно, не будет ругаться. К примеру:

name = "Hello" # тут str
name = 42 # тут уже int
name
= True # а тут bool

На практике довольно часто приходится проверять, какого типа объект находится в переменной. Сделать это можно несколькими способами и сегодня мы разберем их.

type()

Это функция, возвращающая тип передаваемого в нее объекта.

my_var = 3
type(my_var)
>>> <class 'int'>

isinstance()

А это уже немножко другая функция, принимающая проверяемый объект и экземпляр класса, с которым сравнивают объект либо является ли этот объект экземпляром класса, и возвращающая булевое значение True или False.

x = 1
isinstance(x, int)
>>> True

Сравнение

Вы возможно подумаете, а почему я их сравниваю, ведь они возвращают разные вещи? Одна функция возвращает тип, а другая True/False. Да, применение этих функций может варьироваться от случая к случаю. Но в моем случае всё потому что их обеих можно использовать для одной цели – проверить, является ли тип переменной идентичным той, с которым его сравнивают.

Например:

variable = "hello"
type(variable) is int
>>> False

И

variable = "hello"
isinstance(variable, int)
>>> False

Итак, мы добились своего – сравнили переменную и желаемый тип двумя различными способами. Так что же выбрать? Правильно! Ту функцию, которая выполнится по времени быстрее.

С помощью функции подсчета времени timeit сравним время исполнения наших подопытных функций.

-2

Практически незаметная разница, не правда ли ? А если поменяем is str на is int?

-3

Теперь разница во скорости 2,3 раза! type() быстрее на ~ 42 %.

Выводы

Сегодня мы с вами познакомились с встроенными функциями isinstance() и type(). Также сравнили скорость их выполнения в конкретной задаче.

А на этом всё. Спасибо за внимание! Если вам понравилась статья, то ставьте лайки, делитесь с друзьями. Остались вопросы или замечания? Буду рад видеть ваши комментарии.

Вам может быть интересно:

Singleton в Python. Что это?

Проверка обектов на идентичность в Python

Распаковка и запаковка аргументов в Python при помощи "Астериска"

__new__ против __init__ в Python

Коротко о том, что такое "магические" методы в Python?

История о том, как я искал свою первую работу программистом