Вывести тип данных пайтон

Проверка типов данных и «утиная» типизация в Python

В этой статье мы вам расскажем о проверке типов, о различных типах данных в разных языках, а также о неявной типизации и подсказках.

В Python проверка типов выполняется в интерпретаторе. Так как Python — язык с динамической типизацией, он не заставляет пользователя принудительно указывать тип объектов. Это потенциально может привести к ошибкам, причем их будет трудно найти. Чтобы избежать этого, Python можно использовать вместе с другими инструментами и реализовывать проверки типов вместе с собственным алгоритмом неявной типизации.

Существует два метода типизации, за каждым из которых стоят определенные языки программирования:

  • со статической типизацией
  • с динамической типизацией.

Языки со статической типизацией

Проверка типа переменной выполняется во время компиляции. Кроме того, система типов языка заставляет явно объявлять «тип данных» переменной перед ее использованием.

Вот ряд языков программирования со статической типизацией: Scala, Java, C++ и так далее. Например, объявление переменной строкового типа в языке Scala выглядит следующим образом:

Читайте также:  Как отстирать полинявшее черное пятно

В этом примере мы видим, что переменная myCar объявлена явным образом как тип данных String со значением Mercedes .

Языки с динамической типизацией

В этих языках проверка типа переменной выполняется во время выполнения. Кроме того, система типизации языка не требует явного объявления типа данных переменной перед ее использованием. К языкам программирования с динамической типизацией относятся Python, JavaScript, Ruby и так далее.

Например, переменная строкового типа в языке Python определяется следующим образом:

Здесь мы видим, что переменную myCar не нужно явно объявлять.

Функции type() и ‘isinstance() в Python

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

Приведенный выше код выдает в качестве результата ‘int’. Тип данных переменной my_var является целочисленным, и функция type() определяет его именно таким образом.

При помощи функции isinstance(‘ obj ‘,’ class ‘) в языке Python можно определить, является ли данный объект ( ‘obj’ ) экземпляром класса ( ‘class’ ). Возвращается булево значение ( True или False ).

Приведенный выше код выдает в качестве результата True . Поскольку тип данных переменной my_var строковый, то данная переменная является экземпляром класса str и функция isinstance() это удостоверяет.

Неявная («утиная») типизация в Python

В Python действует популярный принцип: «Если это выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, и есть утка». Попросту говоря, тип объекта или класса не имеет значения, но объект должен содержать аналогичные методы и свойства, тогда объект может использоваться для определенной цели.
Давайте разберем это на конкретном примере.

У нас есть два класса: Duck и Human . Класс Duck содержит методы quack и fly . Аналогично класс Human — это класс со своим собственным набором методов quack и fly . Duck и Human это разные классы и, соответственно, объекты этих классов также отличаются друг от друга. Однако класс Human содержит те же методы, quack и fly , что есть и в классе Duck . Ещё у нас есть метод fly_quack() . Он больше подошел бы утке (класс Duck ), чем человеку (класс Human ), так как с помощью данного метода можно одновременно крякать и летать.

Давайте теперь создадим в переменной du экземпляр класса Duck и передадим его в функцию fly_quack(du) . Точно также в переменной h создадим экземпляр класса Human и передадим его в ту же функцию.

Результат выполнения данного кода будет следующим:

Поскольку Duck и Human это разные классы, Python повторно вызывает функцию fly_quack() для экземпляра класса Human . И хотя класс Human имеет похожие методы quack и fly , типы объектов были разными и поэтому все работает правильно и вызываются верные методы.

Подсказки типов и модуль mypy

У динамически типизированных языков, таких как Python, есть свои мощные преимущества, но есть и некоторые недостатки. Одним из недостатков является возникновение ошибок выполнения (runtime error) когда Python не производит принудительного преобразования типов. В результате могут возникать баги, которые с увеличением длины кода становится все трудней найти.

Подсказки типов реализованы в Python начиная с версии 3.5. А более старые версии могут не поддерживать данный функционал.

Давайте посмотрим простой пример без подсказок типов и модуля mypy.

Данная функция предназначена для вычитания целочисленных значений. Она принимает на вход два целых числа и возвращает их разность.

Здесь функция должна принимать два целых числа x и y , но, поскольку никаких ограничений не наложено, она может принимать переменные любого типа данных. Также надо заметить, что данная функция вернет значение ‘Subtraction’ при любых входных данных, а нам бы хотелось видеть целочисленное значение.

Давайте рассмотрим выполнение данного кода с подсказками и модулем mypy . С его помощью можно реализовать проверку статических типов и легко уменьшить количество ошибок в программе.

mypy — это модуль Python, который помогает в проверке статических типов. Он использует собственную динамическую проверку Python или неявную («утиную») типизацию с подсказкой самого типа.

Для начала вам нужно установить сам модуль mypy:

Далее вам нужно создать файл с именем mypy_example.py на своем локальном компьютере и сохранить туда следующий код:

Это простая программа, которая принимает два целых числа в качестве входных данных в параметре, а после ‘->’ показывает тип возвращаемых данных, который также является целочисленным (‘int’). Но хотя функция должна возвращать целочисленное значение (int), возвращается строка ‘Subtracted two integers’.

Запустите указанный выше код в терминале следующим образом:

После этого будет показана ошибка, указывающая на несоответствие типов (должен быть ‘int», а выдается ‘str’).

Давайте теперь изменим тип возвращаемого значения. Заменим строковое значение на разницу двух целых чисел. Таким образом, будет возвращаться целочисленное значение.

Мы видим, что программа выполняется успешно, никаких проблем не обнаружено.

Поздравляем!

Дочитав эту статью до конца, вы познакомились с проверкой типов и узнали о разных системах типизации в разных языках программирования. Также вы познакомились с методами type() и isinstance() языка Python и с неявной («утиной») типизации. Еще вы узнали о подсказках типов и модуле mypy .

Источник

Введение в Python

Поиск

Новое на сайте

Типы данных в Python

Переменные в Python:

Переменная в языке программирования это название для зарезервированного места в памяти компьютера, предназначенное для хранения значений. Это означает, что когда вы создаете переменную, вы на самом деле резервируете определенное место в памяти компьютера.

Основываясь на типе данных переменной, интерпретатор выделяет необходимое количество памяти и решает, что может находится в зарезервированной области памяти.

Для понимания, можете думать о переменной как о коробке, в которую можно положить любую вещь, но только определенного размера. Размер в данном примере будет типом переменной. Это не совсем верное определение, но оно дает общее представление о картине в целом.

Присвоение значения переменной:

В Python вам не нужно объявлять тип переменной вручную (как, например в С++). Объявление происходит автоматически (это называется динамическая типизация), когда вы присваиваете значение переменной. Знак равенства ( = ) используется для присвоения значения переменной.

Операнд по левую сторону от знака равно ( = ) это имя переменной, операнд по правую сторону — значение присвоенное этой переменной.

При выполнении, данный код выведет:

Множественное присвоение значений:

В Python возможно присваивать одно значение нескольким переменным сразу. Например:

В данном создается объект со значением 1, и все 3 переменные указывают на область в памяти, в которой он находится.

Встроенные типы данных в Python:

Информация, сохраненная в памяти может быть разных типов данных. Например, возраст человека может быть числовым значением, а его адрес — буквенно-числовым. В Python существует множество стандартных типов данных, которые используются для хранения определенных значений и обладают своими специфическими методами.

К стандартным типам данных в Python относят:

Числовой тип данных в Python:

Числовой тип данных в Python предназначен для хранения числовых значений. Это неизменяемый тип данных, что означает, что изменение значения числового типа данных приведет к созданию нового объекта в памяти (и удалению старого)

Числовые объекты создаются, когда вы присваиваете им значение. Например:

Также вы можете удалять числовой объект при помощи ключевого слова del. Синтаксис команды del следующий:

В Python есть четыре вида числового типа данных:

  • int (целое число)
  • long (длинное целое число [может быть представлено в восьмеричной или шестнадцатеричной системе исчисления])
  • float (число с плавающей точкой: -0.2, 0.0, 3.14159265 и т.д.)
  • complex (комплексное число)

Примеры видов числового типа данных:

int long float complex
1 51924361L 0.0 3.14j
102 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
0 0xDEFABCECBDAECBFBAEl 32.3+e18 .876j
0b10 535633629843L -90. -.6545+0J
-0x260 -052318172735L -32.54e100 3e+26J
0x69 -4721885298529L 70.2-E12 4.53e-7j

Строки в Python:

Под строками в Python подразумевается набор символов между кавычками. В Python можно использовать пары одинарных либо двойных кавычек. Из строк можно взять подстроку используя оператор нарезки ( [ ] и [ : ] ) с индексами от нуля для первого символа строки и до последнего. Так же можно использовать обратную индексацию от -1 для последнего символа до начала.

Оператор плюс ( + ) для строк соединяет две строки в одну, звездочка ( * ) оператор повторения. Например:

В результате вы увидите следующее

Списки в Python:

Списки, пожалуй, самый универсальный составной тип данных в Python. Список состоит из элементов, разделенных запятыми, находящихся между квадратными скобками ( [ ] ). В определенной мере, списки подобны массивам в C. Единственной разницей является то, что элементы одного списка могут иметь разные типы данных.

Получить доступ к элементам, сохраненным в списке можно, точно так же, как и в строках, при помощи оператора нарезки ( [ ] и [:] ) и индексов, начиная с нуля и до конца. Знак плюс ( + ) объединяет два списка, а звездочка ( * ) — оператор повторения для списка. Например:

В результате вы увидите :

Кортежи в Python:

Кортеж это еще один составной тип данных, похожий на список. Кортеж состоит из ряда значений, разделенных запятыми, заключенными в круглые скобки ( ( ) ). Основным различием между списками и кортежами является то, что элементы кортежей не могут быть изменены. То есть, кортежи можно рассматривать как списки доступные только для чтения.

Если у вас нет необходимости изменять элементы списка, то для экономии места в памяти лучше использовать тип данных кортеж.

В результате вы получите:

При этом, следующие действия доступны для списков и недоступны для кортежей:

Словари в Python:

Словари в Python это неотсортированная колекция элементов, доступ к которым осуществляется по ключу. То есть, каждому ключу словаря соответствует определенное значение. Ключом может быть любой неизменяемый тип данных (число, строка, кортеж), значением — любой тип данных.

Пары ключ, значение словаря заключаются в фигурные скобки ( < >). Есть несколько способов создания словарей:

Данный код выведет следующее:

Обратите внимание, что ключи и значения выводятся не в том порядке, в котором мы их задавали.

Сеты в Python:

Сет в Python это еще один изменяемый, коллекционный тип данных, отличительной чертой которого является то, что он хранит только уникальные значания.

Создать сеты можно следующими способами:

Для добавление элемента в сет используется метод add, для удаления — pop или remove. Добавление в сет уже существующего элемента не повлияет на сет. Сеты обладают множеством методов для работы с уникальными элементами, например difference — возвращает элементы сета отсутствующие в другом сете, intersection — наоборот, возвращает елементы сета присутствующие в другом сете.

Преобразование типов данных:

Иногда может возникнуть необходимость преобразовать один тип данных в другой. Для этого существуют специальные встроенные функции Python. Вот некоторые из них:

Преобразовывает х в целое число. Например, int(12.4) -> 12

Преобразовывает х в long. Например, long(20) -> 20L

Преобразовывает х в число с плавающей точкой. Например float(10) -> 10.0

Создает комплексное число. Например complex(20) -> (20+0j)

Преобразовывает х в строку. Например str(10) -> ’10’

Преобразовывает s в кортеж. Например tuple(«hello») -> ( «h»,»e»,»l»,»l»,»o» )

Преобразовывает s в список. Например list(«Python») -> [ «P»,»y»,»t»,»h»,»o»,»n» ]

Создает словарь из d. Например dict( [ (1,2), (3,4) ] ) ->

Источник

Типы данных в Python подробно

Типы данных в Python используются для определения типа переменной. В этой статье мы перечислим все типы и обсудим функциональность каждого из них.

Какие существуют типы данных в Python?

В Python есть разные типы данных. Вот некоторые встроенные в Python:

  • Числовые типы данных: int, float, complex;
  • Типы данных String: str;
  • Последовательности: list, tuple, range (список, кортеж, диапазон);
  • Двоичные: bytes, bytearray, memoryview;
  • Сопоставления: dict;
  • Логический: bool;
  • set, frozenset.

1. Числовой тип данных

Числовой тип данных Python используется для хранения числовых значений, например;

  1. int – содержит целые числа со знаком неограниченной длины.
  2. long – содержит длинные целые числа (существует в Python 2.x, не рекомендуется в Python 3.x).
  3. float – содержит числа с плавающей точкой с точностью до 15 десятичных знаков.
  4. комплексный – содержит комплексные числа.

В Python нам не нужно определять тип данных при объявлении переменной, такой как C или C ++. Мы можем просто присвоить значения переменной. Но если мы хотим увидеть, какой тип числового значения он содержит прямо сейчас, мы можем использовать type(), например:

Если вы запустите приведенный выше код, вы увидите результат, как на изображении ниже.

2. Тип данных String

Строка представляет собой последовательность символов. Python поддерживает символы Unicode. Обычно строки представлены одинарными или двойными кавычками.

Приведенный выше код производит вывод, как на картинке ниже:

3. Списка

Список – это универсальный тип данных, эксклюзивный для Python. В некотором смысле это то же самое, что и массив в C / C ++. Но самое интересное в списке в Python – он может одновременно содержать разные типы данных. Формально список представляет собой упорядоченную последовательность некоторых данных, записанных с использованием квадратных скобок ([]) и запятых (,).

Приведенный выше код будет производить такой вывод:

4. Кортеж

Кортеж – это еще один тип данных, который представляет собой последовательность данных, подобную списку. Это означает, что данные в кортеже защищены от записи. Данные в кортеже записываются с использованием скобок и запятых.

Результат этого приведенного выше примера кода кортежа типа данных будет таким, как на изображении ниже.

5. Словарь

Словарь Python – это неупорядоченная последовательность данных в виде пары ключ-значение. Он похож на тип хеш-таблицы. Словари заключаются в фигурные скобки в виде key:value. Очень полезно получать данные оптимизированным способом среди большого количества данных.

Если вы запустите этот пример кода, результат будет таким, как на изображении ниже.

Источник

Оцените статью
Функция Описание