Python: типы данных, условия, требования и примеры

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

Какие типы данных бывают

Базовые типы данных в Python являются встроенными коллекциями. К ним относятся числа, строки, списки. Но есть объекты, созданные самостоятельно, с использованием конструкций и библиотек языка. Обычно они нужны для решения сложных программных задач, а не в повседневной работе.

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

Встроенные типы – это эффективные структуры данных. За счет того, что они реализованы на языке C, объекты обеспечивают высокую скорость и производительность кода. Самостоятельно созданные объекты могут выполнять нестандартные задачи. Например, стековые операции. Но они гораздо медленнее стандартных списков.

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

  • Числа: 1234, 3.1415, 3+4j, Decimal, Fraction.
  • Строки: «spam», «b’a\x01c».
  • Списки: [1, [2, «three»], 4].
  • Словари: {«food»: «spam»}.
  • Кортежи: (1, «spam», 4, «U»).
  • Множества set(«abc»), {«a», «b»}.
  • Логические переменные.

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

Что такое динамическая типизация

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

  • >>>my_string = «Hello, Python!»

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

Все объекты языка относятся к двум классам: изменяемые и неизменяемые типы данных. В Python ко второй группе относятся int, float, bool, str, tuple. Эти объекты нельзя изменить, но некоторые из них можно преобразовать благодаря динамической типизации:

  • >>>x = «123»
  • >>>int(x)
  • 123
  • >>>float(x)
  • 123.0

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

Счетчики ссылок

Вся информация о типе хранится не в имени, а в объекте, на который ссылается переменная. Как только имя получает ссылку на новый объект, интерпретатор удаляет старый, освобождая память.

  • >>>x = 12 # присваивает переменной x числовое значение.
  • >>>x = «spam» # x становится строкой.
  • >>>print(x).
  • spam #12 полностью стирается и остается только строковый объект «spam».

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

По сравнению с Java или C++, синтаксис Python в разы проще. Благодаря динамической типизации, код занимает гораздо меньше места, с ним легко и приятно работать. Но, несмотря на видимую простоту и гибкость, Python – это язык со строгими правилами для каждого типа. Методы и операции применимые к одному виду объектов, недопустимы по отношению к другому:

  • >>>f = «apple».
  • >>>s = «cherry».
  • >>>f * s # попытка умножить строки выведет сообщение об ошибке.

Числа

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

  • сложение: var1+var2;
  • вычитание: var1-var2;
  • умножение: var1*var2;
  • деление: var1/var2;
  • остаток от деления: var1%var2;
  • целая часть от деления: var1//var2.

Этот вид делится на целочисленные и вещественные объекты. К первой группе относятся отрицательные и положительные целые числа int и логические объекты bool.

Данные типа int по умолчанию записываются в десятичной системе исчисления в виде цифровых литералов. При желании их можно вводить как двоичные, восьмеричные или шестнадцатеричные числа с префиксом 0b, 0o и 0x.

Встроенные bool типы принимают два значения: True и False. Это предопределенные числовые переменные. True равно 1, а False – 0. Если в интерпретаторе написать True + 5, получится 6. Используя конструкции языка любой объект из стандартной библиотеки можно преобразовать в тип bool.

Вещественные числа float и complex

В Python для типа данных float используются числовые литералы с десятичной точкой или необязательной экспонентой: 1.23, 1., 3.14e-10, 4.0e+210. Для работы с float применяют те же стандартные математические операторы, что и для целых чисел int.

При необходимости можно выполнять преобразование типов данных. В Python для этого используются функции int() и round():

  • >>> x = 1.8.
  • >>> y = 1.8.
  • >>> int(x).
  • 1 # функция int() отбрасывает дробную часть.
  • >>> round(y).
  • 2 #функция round() округляет до целого числа.

Тип complex – это комплексные числа, состоящие из двух значений float. Первое является действительной частью и доступно в виде атрибута .real. Вторая часть вызывается с помощью .imag и представляет собой воображаемую составляющую объекта.

Литералы комплексных чисел записываются следующим образом:

  • >>> my_number = -89.5+2.125J
  • >>> my_number.real, my_number.imag
  • (-89.5, 2.125)

Комплексные числа являются неизменяемыми типами данных в Python. Операции преобразования для объектов complex невозможны, любая попытка это сделать немедленно вызовет сообщение об ошибке.

Строки

Строка – это объект, предназначенный для хранения последовательности символов Юникода. В нее записывается текстовая и числовая информация. Литералы строк всегда заключаются в кавычки.

У строк есть длина, которую можно вычислить функцией len():

  • >>>x = «Здравствуй, Питон!».
  • >>>len(x).
  • 18.

У каждого элемента есть свой индекс, или позиция, по которой его можно извлечь:

  • >>>x[7].
  • «в».
  • >>>x[2].
  • «р».

Так как строки – это последовательности, они поддерживают операции конкатенации с помощью знака «+» и повторения с использованием «*»:

  • >>>x * 3.
  • «Здравствуй, Питон!Здравствуй, Питон!Здравствуй, Питон!».
  • >>>x + «123».
  • «Здравствуй, Питон!123».

Строки, как и числа, являются неизменяемыми типами. Ни одна из перечисленных операций не изменила значение переменной x. Каждый раз создавался новый строковый объект.

Списки

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

  • >>>L = [123, «spam», «var», 1.23] #Список из четырех объектов разных типов.
  • >>>len(L) #Число элементов в списке.
  • 4.

Списки относятся к изменяемым типам данных в Python. Используя функции можно менять количество элементов:

  • >>>L.append(0) #В конец списка добавляется новый объект.
  • >>>L.
  • [123, «spam», «var», 1.23, 0].
  • >>> L.pop(2) #Удаляется элемент из середины списка.
  • «var».

Словари

Словари являются отображениями данных. Это принципиально новый тип объектов, отличающийся от списков и строк. Доступ к элементам возможен только по ключам. Литерал словаря заключается в фигурные скобки и состоит из пар «ключ: значение»:

  • >>>D = {«день»: «пятница», «месяц»: «декабрь», «год»: «2017»}.
  • >>>D.
  • {«день»: «пятница», «месяц»: «декабрь», «год»: «2017»}.

Чтобы получить значение, нужно указать название словаря с ключом в квадратных скобках:

  • >>>D[«день»].
  • «пятница».

Чтобы добавить ключ, нужно указать ссылку на значение:

  • >>>D[«время»] = «утро» #добавляет пару «ключ: значение».
  • >>>D.
  • {«день»: «пятница», «месяц»: «декабрь», «год»: «2017», «время»: «утро»}.

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

Кортежи

Кортежи – это те же списки, только в круглых скобках. Они могут хранить произвольное число данных любого типа, но поддерживают меньший набор операций. Их главное отличие – неизменяемость. Кортежи обеспечивают целостность и сохранность объектов, именно поэтому их иногда используют вместо типа list в крупных программах.

В Python 3 тип данных tuple обладает двумя методами, которые есть у списков: .index() для извлечения индекса элемента и .count(), чтобы подсчитать количество одинаковых объектов:

  • >>>my_tuple = (1, 2, 3, 4).
  • >>>my_tuple.index(2) #на второй позиции стоит цифра 1.
  • 1.
  • >>>my_tuple.count(1) #покажет сколько единиц в последовательности.
  • 1.

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

Комментарии