Объекты Python и базовые структуры данных

Познакомимся с базовыми объектами языка Python и структурами данных. Если вы знаете хотя бы один высокоуровневый язык программирования, то скорее всего ничего нового вы тут не найдете. С другой стороны, я расскажу в этой статье о вещах, которые по-моему, сделаны удобнее в Python, нежели в Java.

Что за зверь Python?

Так как это моя первая статья о Python, пайтон или питон, называйте как нравится, я начну повествование с описания некоторых особенностей языка:

  • Высокоуровневый язык, который позволяет писать программы в разных стилях: ООП, императивном, функциональном, аспекто-ориентированном и других. Одним словом – мультипарадигменный.
  • Динамическая типизация. Переменная связывается с типом во время присвоения, а не в момент объявления. Если вы знакомы с PHP или JS, вы можете представить как это работает. В одном месте переменная используется как String, а в другом в нее можно положить Number и продолжить работу.
  • Автоматическое управление памятью. В отличии от C/C++ вам не нужно самостоятельно управлять памятью, писать дескрипторы и прочие связанные вещи. Как и в Java, на помощь вам придет Garbage Collector.
  • Поддерживает интроспекцию – получение типа объекта во время выполнения. В Python для этого нужно вызвать функцию type(object), в Java это оператор instanceof.
  • Поддержка многопоточности.
  • Возможность разбить код на модули и пакеты.
  • Генераторы
  • Компилируемый язык. Компилируется в python-байткод и выполняется на виртуальной машине python (PVM).

Numbers

В Python, есть 3 числовых типа: целочисленный тип (int), числа с плавающей точкой (float), а так же комплексные числа (complex). Поддерживает все базовые операции с числовыми типами. Над числами разных типов можно производить вычисления. Результатом будет являться более “широкий” тип: int+float=float; float + complex = complex;

Обратите внимание, что число 10^24 является int!

String

Python имеет очень сильную поддержку и простоту в работе со строками. Как и в Java, объекты Sting являются неизменяемыми (Immutable). Строку можно записывать как в одинарные кавычки, так и в двойные, и тройные, и любое другое количество кавычек, даже 7:

Интересной особенностью Python в работе как со строками так и со списками, является индексирование. Оно двунаправленное: от 0 до длины строки – 1, и в обратную сторону от -1 до -длины строки:

Классной фичей языка является метод “нарезки” (slicing) – получение подстроки, перебор всех элементов списка с определенным шагом с определенной позиции. Прозрачный и простой синтаксис. Рассмотрим на примере и сразу все будет ясно:

Работает следующим образом: строка[индекс начала:индекс конца:шаг]. Обратите внимание, что поля могут быть пустыми. Если указать отрицательный шаг, то проход будет осуществляться в обратную сторону! Данный функционал работает так же для списков и других итерируемых структур.

Для строк работает операция умножение (*) – увеличивает количество символов на множитель.

Lists

Списки в Python представляют собой последовательность элементов не обязательно одного типа. Структура изменяемая (Mutable) (в отличии от String), поддерживает хранение дублируемых данных. Для иницилизации списка нужно объявить его в квадратных скобках []:

Индексирование и “нарезка” работает аналогично строкам. В отличии от строк, мы можем изменить элемент списка.

Списки поддерживают конкатенацию, умножение:

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

Списки могут быть любой вложенности. Навигация к объектам напоминает многомерный массив:

Dictionaries

Словари – структура данных такая как Map в Java. Элементы хранятся как пары “ключ – значение“. Словарь записывается в фигурные скобки {} . Доступ к элементу осуществляется по ключу. Опять же в силу динамической типизации в одном словаре могут хранится разнотипные значения.

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

Tuples

Tuples или по-русски кортежи – это структура данных, по сути являющаяся неизменяемым списком. Объявляется в круглых скобках (). Доступ к элементу осуществляется по индексу, хранить можно элементы разных типов, поддерживает нарезку (slicing):

Sets

Sets или множества – неупорядоченная структура данных, похожая на список, хранящая только уникальные элементы. Чтобы инициализировать множество можно воспользоваться функцией set(), либо объявить множество в фигурных скобках. Список можно преобразовать в множество. Т.к. Set – не упорядоченная структура, обращение к элементу по индексу невозможно:

Boolean

Много о Boolean не сказать. Есть два варианта: True или False. Является результатом сравнения элементов и подобных операций.

Выводы

Мы познакомились с основными типами данных языка программирования Python, рассмотрели основные операции над ними, некоторые возможности и функции. Так же коснулись некоторых особенностей самого языка Python. В отличии от других языков с строгой типизацией, Python является очень гибким, но за эту гибкость приходится платить в других местах. Если вы знаете основы программирования, или еще лучше, какой-нибудь высокоуровневый язык программирования, освоить азы работы с Python для вас не составит особого труда! Запомните: в фигурных скобках {} – множества и словари, в круглых () – кортежи, в квадратных [] – списки!

4 comments On Объекты Python и базовые структуры данных

  • >> Поддерживает интроспекцию — получение типа объекта во время выполнения. В Python для этого нужно вызвать функцию type(object), в Java это оператор instanceof.
    мб в java это .getClass() ?

    • Николай Грибанов

      Тут нужно разделять интроспекцию и рефлексию. Интроспекция просто позволяет узнать к какому классу относится объект во время выполнения, для этого используется оператор instanceof. Рефлексия, например, через getClass(), позволяет не только узнать к какому классу относится объект, но и дает возможность манипулировать объектом.

      • Тут смысл не в рефлексии. Насколько я понял из статьи, то type(object) как раз возвращает ТИП ОБЪЕКТА, т.е. его класс. В java же instance of это оператор , который говорит, является ли ОБЪЕКТ подпитом класса, который передаем вторым параметром. Т.е. сравнивать type(object) и object instanceof не совсем корректно, и поэтому аналогом type является .getClass(). Аналогом instanceof в python будет оператор is

        • Николай Грибанов

          Да, вы все правильно поняли! И вы правы. Но все таки сравнивать type(object) и .getClass() так же некорректно, потому что через .getClass() вы можете проводить манипуляции над объектом: вызывать конструктор, методы, получить доступ к полям и т.п. возможности рефлексии. Используя type(object) вы не получите возможность изменять объект, а только лишь узнаете информацию о нем – его тип. В статье упор делается на то, что inctanceof и type(object) оба являются инструментами интроспекции – позволяют лишь узнать что это за объект, не давая возможности к его изменению. Хотя технически еще раз напишу вы абсолютно правы: type(object) вернет тип, а результатом вызова inctanceof будет булево значение

Оставить комментарий:

Ваш email не будет опубликован.

Site Footer