Добрый день! А сегодня мы поговорим с вами о некоторых встроенных функциях языка 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 сравним время исполнения наших подопытных функций.
Практически незаметная разница, не правда ли ? А если поменяем is str на is int?
Теперь разница во скорости 2,3 раза! type() быстрее на ~ 42 %.
Выводы
Сегодня мы с вами познакомились с встроенными функциями isinstance() и type(). Также сравнили скорость их выполнения в конкретной задаче.
А на этом всё. Спасибо за внимание! Если вам понравилась статья, то ставьте лайки, делитесь с друзьями. Остались вопросы или замечания? Буду рад видеть ваши комментарии.
Вам может быть интересно:
Проверка обектов на идентичность в Python
Распаковка и запаковка аргументов в Python при помощи "Астериска"
__new__ против __init__ в Python
Коротко о том, что такое "магические" методы в Python?
История о том, как я искал свою первую работу программистом