Виды объектов в питоне

Python-шпаргалка. Часть 1 — Язык и Типы объектов

image

Данная статья представляет собой очень краткую, но емкую выжимку всего, что должен знать начинающий разработчик или QA-инженер о языке Python. Надеюсь, что усердие, приложенное при написании данной статьи, поможет многим подготовиться к собеседованиям на соответствующие вакансии и расширить свой IT-кругозор.

Статью стоит воспринимать не как учебник, а как удобную шпаргалку или «опорный сигнал» (так моя учительница истории называла подобное «творчество» в школе). Здесь не будет подробных определений, объяснений в целую главу, а лишь четкие термины, списки, краткие выжимки кода. Статья основана на замечательной книге Марка Лутца «Изучаем Python (5-е издание)», так что за её корректность и достоверность можете не переживать. Итак, начнем.

Вкратце о Python

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

  • Качество ПО
  • Высокая скорость разработки
  • Переносимость программ
  • Библиотеки поддержки
  • Интеграция компонентов (можно вызывать функции из библиотек C/C++)
  • Динамическая типизация (при этом она строгая)
  • Автоматическое управление памятью
  • Модульное программирование
  • Встроенные типы объектов
  • Библиотеки утилит
  • Сценарий компилируется (перевод программы) в байт-код (платформонезависимое представление исходного текста программы, .pyc файл)
  • Байт-код передается виртуальной машине PVM.
  • Отсутствует этап сборки
  • Байт код не является двоичным машинным кодом (не может выполняться так же быстро)
  • CPython (реализация на ANSI C)
  • Jython (реализация на Java классах)
  • IronPython (реализация для использования с .Net)
Читайте также:  Php create pdf files

Типы объектов в Python

Данные в Python представляется в форме объектов — либо встроенных, либо создаваемых с помощью конструкций языка Python или других (например С).

Формы отображения объектов:

  • repr (в виде программного кода, например 6.28300000000004)
  • str (более читаемый, например 6.283)

Некоторые операции над последовательностями:

  • len(s) — длина
  • s[0] — обращение к элементу
  • s[-1] — обращение к элементу с конца последовательности
  • s[1:3] — срез начиная со смещения 1 и до 2 (не 3)
  • s[:] — скопировать все содержимое (не путать с a=s)
  • s*8 — повторение
  • s+’xyz’ — конкатенация
  • \n — конец строки
  • \t — табуляция
  • ord(‘\n’) — байт с числовым значением
  • ‘A\0B\0C’ — \0 двоичный ноль

Списки (lists) – это упорядоченные по местоположению коллекции объектов произвольных типов, размер которых не ограничен.

Списки являются последовательностями => поддерживают все операции над последовательностями. Единственное отличие состоит в том, что результатом таких операций являются списки, а не строки.

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

Кортеж (tuple) — список, который невозможно изменить. Кортежи являются последовательностями, как списки, но они являются неизменяемыми, как строки. Возможна вложенность. Возможно одновременное хранение объектов разных типов.

Объекты-файлы — это основной интерфейс между программным кодом на языке Python и внешними файлами на компьютере. Файлы являются одним из базовых типов, но они представляют собой нечто необычное, поскольку для файлов отсутствует возможность создания объектов в виде литералов. Вместо этого, чтобы создать объект файла, необходимо вызвать встроенную функцию open, передав ей имя внешнего файла и строку режима доступа к файлу.

f = open('data.txt', 'w') # Создается новый файл для вывода 

Самый лучший на сегодняшний день способ чтения файлов состоит в том, чтобы не читать его содержимое целиком – файлы предоставляют итераторы, которые обеспечивают автоматическое построчное чтение содержимого файла в циклах for и в других контекстах.

Множества — это неупорядоченные коллекции уникальных и неизменяемых объектов. Множества создаются встроенной функцией set.

X = set('spam') # В 2.6 и 3.0 можно создавать из последовательностей Y = # В 3.0 можно определять литералы множеств X, Y (, ) X & Y # Пересечение X | Y # Объединение X – Y # Разность

Источник

Список типов данных в Python

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

Проиллюстрировать фундаментальность объектов в разрезе Питона можно, приведя пример общего вида программы на этом языке. Итак:

  1. Программа состоит из модулей;
  2. Модуль, в свою очередь, представляет собой набор инструкций;
  3. Инструкции содержат выражения;
  4. Выражения служат для создания и обработки объектов;

Ну и вполне закономерно, что объекты можно классифицировать по их типам.

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

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

Нетипизированные языки в основной своей массе сосредоточены на низком уровне, где большинство программ напрямую взаимодействует с железом. Так как компьютер «мыслит» нулями и единицами, различия между строкой и, допустим, классом для него будут заключаться лишь в наборах этих самых 0 и 1. В связи с этим, внутри бестиповых языков, близких к машинному коду, возможны любые операции над какими угодно данными. Результат на совести разработчика.

Python же — язык типизированный. А, раз в нём определено понятие «типа», то должен существовать и процесс распознавания и верификации этих самых «типов». В противном случае вероятны ситуации, когда логика кода окажется нарушенной, а программа выполнится некорректно.

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

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

a = 1 print(type(a)) a = ‘one’ print(type(a)) a = print(type(a))

В языке со статической типизацией такой фокус не пройдёт:

// код на C++ int main() < int b = 2; cout > error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive] b = «two»;

💭 Адепты и приверженцы разных языков часто спорят о том, что лучше: динамическая типизация или статическая, но, само собой, преимущества и недостатки есть и там, и там.

👍 К плюсам динамической типизации можно отнести:

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

# список, элементами которого являются строка, целое число и кортеж variety_list = [‘String’, 42, (5,25)]

2 . Абстрагирование в алгоритмах. Создавая на Питоне, предположим, функцию сортировки, можно не писать отдельную её реализацию для строк и чисел, поскольку она и так корректно отработает на любом компарируемом множестве.

3 . Простота изучения. Не секрет, что изучать Питон с нуля гораздо легче, чем, например, Java. И такая ситуация будет наблюдаться не только для этой пары. Языки с динамической типизацией в большинстве своём лучше подходят в качестве учебного инструмента для новичков в программировании.

🙁 К минусам же динамической проверки типов можно отнести такие моменты, как:

1 . Ошибки. Ошибки типизации и логические ошибки на их основе. Они достаточно редки, однако зачастую весьма сложно отлавливаемые. Вполне реальна ситуация, когда разработчик писал функцию, подразумевая, что она будет принимать числовое значение, но в результате воздействия тёмной магии или банальной невнимательности, ей на вход поступает строка и …функция отрабатывает без ошибок выполнения, однако её результат, — ошибка, сам по себе. Статическая же типизация исключает такие ситуации априори.

2 . Оптимизация. Статически типизированные языки обычно работают быстрее своих динамических братьев, поскольку являются более «тонким» инструментом, оптимизация которого, в каждом конкретном случае, может быть настроена более тщательно и рационально.

Так или иначе, сказать, что «одно лучше другого» нельзя. Иначе «другого» бы не было. Динамически типизированные языки экономят уйму времени при кодинге, но могут обернуться неожиданными проблемами на этапе тестирования или, куда хуже, продакшена. Однако вряд ли кто-то будет спорить с тем, что динамический Python куда более дружелюбный для новичков, нежели статический C++.

Разница между атомарными и структурными типами данных

По одной из классификаций все типы данных в Python делятся на атомарные и ссылочные.

Разница между этими двумя группами уходит глубоко в корни языка. Вкратце:

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

# пример присваивания атомарного объекта atom = 3 btom = atom atom = 2 print(atom) > 2 print(btom) > 3

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

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

# пример присваивания ссылочного объекта link = [‘Ipona’, ‘Master Sword’] alin = link link[0] = ‘Zelda’ print(link) > [‘Zelda’, ‘Master Sword’] print(alin) > [‘Zelda’, ‘Master Sword’]

Поскольку списки — это ссылочные объекты, то вполне закономерно, что после присваивания переменной link переменной alin передалась именно ссылка на объект list-а и, при печати, на экран были выведены две одинаковые надписи.

Собственно, в этом и вся разница.

Числовые типы

«Все сущее есть Число» — сказал однажды мудрый грек по имени Пифагор. Числа — важнейший и фундаментальнейший из всех типов данных для всех языков программирования. В Python для их представления служит числовой тип данных.

int (целое число)

Концепция целых чисел проста и естественна. Это числа без дробной части, которые, говоря математическим языком, являются расширением натурального ряда, дополненного нулём и отрицательными числами.

# примеры целых чисел a = -3000 b = 0 c = 9000

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

float (число с плавающей точкой)

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

print(0.3 + 0.3 + 0.3) > 0.8999999999999999 print(0.3 * 3 == 0.9) > False

В плане записи, float ничем не отличаются от int :

# примеры вещественных чисел zero = 0.0 pi = 3.14 e = 2.71

В плане использования — тоже, разве что в любых мало-мальски серьёзных вычислениях без float никуда.

complex (комплексное число)

Привет высшей математике! Как вещественный ряд расширяет множество рациональных чисел, так и ряд комплексных чисел расширяет множество вещественных. Показательной особенностью комплексного ряда является возможность извлечения корня из отрицательных чисел.

В Python комплексные числа задаются с помощью функции complex() :

# пример комплексного числа z = complex(1, 2) print(z) > (1+2j) # вещественная часть print(z.real) > 1.0 # мнимая часть print(z.imag) > 2.0 # сопряженное комплексное число print(z.conjugate()) > (1-2j)

Помните, что операция сравнения для комплексных чисел не определена:

z1 = complex(4, 5) z2 = complex(100, 200) print(z1 > z2) > Traceback (most recent call last): print(z1> z2) TypeError: ‘>’ not supported between instances of ‘complex’ and ‘complex’

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

Источник

Оцените статью