Найти тему
Clever Python

Типы данных Python. Подводные камни float и decimal.

Разберем какие бывают типы данных, как с ними работать, какие бывают особенности и где это может пригодиться.

В питоне, как и в других языках, есть множество типов данных. В зависимости от того к какому типу принадлежит объект, будет зависеть как мы к нему обращаем и как производим манипуляции.

Здесь мы поговорим о базовых типах данных, с которыми придётся познакомиться любому новичку. Начнем по порядку.

блок-схема с применяемыми типами данных
блок-схема с применяемыми типами данных

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

1. Целочисленные, тип int() пример: -2, 0, 1

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

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

2. Числа, с плавающей точкой, тип float() пример: -2.1, 0.2223, 887.4

Важно понимать, что из-за особенностей представления чисел в машинном виде (двоичная система счисления), все операции с типом float() ведут к накоплению погрешностей.

Пример ошибки при применении типа float()
Пример ошибки при применении типа float()

Это особенно критично при научных и банковских вычислениях, поэтому применение типа float() не подходит для ответственных вычислений

3. Числа, с плавающей точкой с настраиваемой точностью Decimal()

Проблемы вычислений с типом float в питоне решаются применением специального типа decimal, для этого необходимо импортировать специальный модуль.

Особенности работы с Decimal
Особенности работы с Decimal

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

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

4. Комплексные числа, тип complex() пример: 1+1j

Пример использования complex
Пример использования complex

Строковый тип данных

  • Строки, тип str() пример: 'hello, World!', '18'

Строки - это объекты, состоящие из последовательности элементов. Каждый элемент строки имеет свой индекс, начиная отсчет с нуля. То есть первый элемент на самом деле - нулевой.

Со строками можно работать так же как и с массивами:

строка[индекс элемента].

Более подробно на работе со строками мы остановимся в другой статье, здесь рассмотрим только базовый инструментарий.

Работа с типом str
Работа с типом str

Обратите внимание, в питоне существует такое понятие как срез [3:8] - это набор элементов с 3-его по 8 (восьмой элемент уже не входит в срез)

Упорядоченный тип данных

  • Списки, тип list() пример: [1, 2, 'ss', -1, 0, '2']

Список - это упорядоченный и изменяемый набор объектов.

Пример работы с list
Пример работы с list
  • Кортежи, тип tuple() пример: (4, 'Aa', 3, 2.1)

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

пример работы с tuple
пример работы с tuple

Важная особенность - кортеж является неизменяемым, но вы можете изменять элементы кортежа если они являются изменяемыми

изменение элемента внутри кортежа
изменение элемента внутри кортежа
  • Множество, тип set() пример: {-4, 2, '2s', 3}

Множество состоит из различных элементов в неопределенном порядке.

  • Неизменяемое множество frozenset()

По свойствам аналогично множеству set() за исключением невозможности изменения элементов

  • Словари, тип dict() пример: {'dictionary': {7007 :'agent', 'key': 'value'}, 11: '1', 22: '2', 33: '3'}

Словарь - это неупорядоченный набор пар [ключ : значение]

пример использования dict
пример использования dict

В качестве ключей можно применять как строки, так и числа

Пример использования числа в качестве ключа dict
Пример использования числа в качестве ключа dict

Логический, или булевый тип данных

  • Булевы или логические True и False, тип bool

Булев тип данных принимает значения истинны (True) и лжи (False). Или же 1 и 0. Булева логика используется для реализации выполнения условий.

Все эти типы объектов разные, в том числе одни изменяемые, а другие - нет. Изменяемый объект может менять свое состояние или содержимое, а неизменяемый – не может.

Как узнать тип данных.

Для определения типов данных существует специальная функция type().

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

пример использования type()
пример использования type()

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

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

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

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

Ну и на последок, преобразование строки.

преобразование числа в строку
преобразование числа в строку