Типы данных python habr

Осваиваем Python. Унция 1. Типы данных.

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

Числа, строки и кортежи

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

Инструкция x = 2 создаёт числовой объект со значением 2 и присваивает ссылку на этот объект переменной x. Далее инструкция x = 3 создаёт новый числовой объект со значением 3 и присваивает ссылку на него переменной x. А объект со значением 2 удаляется из памяти автоматическим сборщиком мусора т.к. была потеряна последняя ссылка на этот объект.
Благодаря этому справедливо следующее:

>>> x = y = 3 # переменные x и y содержат одну и ту же ссылку на объект 3
>>> x = 2 # переменная x теперь содержит ссылку на другой объект 2
>>> x
2
>>> y # y по-прежнему ссылается на объект 3
3

В тему будет упомянуть про оператор is. Этот оператор возвращает значение True, когда слева и справа от него находятся переменные содержащие указатели на один и тот же объект. Возникает вопрос о странном поведении этого оператора:
>>> x = 2
>>> y = 2 # создано два разных объекта
>>> x is y # по идее должно быть возвращено значение False
True

Читайте также:  Php disable function php ini

Здесь дело в кэширующих внутренних механизмах самого интерпретатора. Для оптимизации скорости выполнения при объявлении числового или короткого строкового объекта — в кэше создаётся пара ссылка и значение. И в дальнейшем при объявлении такого же объекта — не создаётся новый объект, а используется уже созданный. Напрашивается вывод о несостоятельности использования оператора is для числовых и строковых типов данных.

  • целые числа неограниченной длины — интерпретатор сам определит необходимость использования объектов неограниченной длины и сделает необходимые преобразования. Более нет необходимости следить за переполнениями.
  • Числа с плавающей точкой
  • восьмеричные и шестнадцатеричные числа
  • комплексные числа

>>> print 2 ** 150 # 2 в степени 150
1427247692705959881058285969449495136382746624
>>> print int(5.89),round(5.89),round(5.89,1) # округление вниз, вверх, с точностью до 1 знака
5 6.0 5.9
>>> import math
>>> math.pi
3.1415926535897931
>>> print math.sin(math.pi/2)
1.0
>>> import random
>>> random.randint(1,100) # случайное целое число в диапазоне от 1 до 100
19

Строки:

Строки в апострофах и в кавычках — это одно и то же
Строки в тройных кавычках — в тройные кавычки можно заключить целый блок строк, например целиком HTML или XML документ.
Неформатированные строки — строки вида r«\n\t» — последовательности в такой строке не будут заменены на спец. Символы
Строки символов юникода — u’string’ # теряет актуальность в версии 3.0 подробнее об изменениях 3.0

Базовые операции над строками:

>>> print str(len(‘string’))*3 # len() — возвращает количество символов в строке
666 # * — перегруженый оператор, делающий повтор строки указанное число раз
>>> ‘r’ in ‘string’ # оператор in возвращает True если подстрока найдена в строке
True
>>> ‘string’.replace(‘r’,») # замена одной подстроки на другую
‘sting’
>>> ‘string’.find(‘ri’) # возвращает номер смещения искомой подстроки
2
>>> ‘a,b,c’.split(‘,’) # функция разделения на подстроки по указанному символу или подстроке
[‘a’, ‘b’, ‘c’]
Более полную информацию о строковых методах можно получить, введя в интерактивном режиме команду help(str).
Так же строки уже были описаны моим будущим соавтором этого цикла статей тут

Индексирование, выборка и срезы последовательностей данных.

Думаю, о том, что к элементам строки можно получать доступ по их индексам, как в массиве — особо долго рассказывать не нужно.

>>> ‘string'[1]
‘t’
>>> ‘string'[-2] # второй элемент с конца строки
‘n’

Срез — достаточно мощный инструмент выборки данных из последовательностей, который используется не только в строках но и в коллекциях, речь о которых пойдёт в этой статье чуть ниже.
Общий вид:
S[i:j:h], где S — строка, i — значение смещения, левая граница (включительно), j — значение смещения, правая граница (она не входит в срез), h — значение шага.
Примеры:

Говоря о строках, конечно, нельзя забыть о регулярных выражениях. В Python для их использования необходимо импортировать модуль re
Я надеюсь, что о них удастся поговорить отдельно.

Кортежи

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

Списки и словари

Списки и словари являются изменяемыми встроенными типами данных. А это значит, если возвращаться к тому с чего мы начали разговор, что, если создать список Y, затем сделать присваивание X=Y, а затем изменить X, то Y тоже изменится. За этим нужно внимательно следить! Для того, чтобы этого не происходило, необходимо создать новый объект эквивалентный исходному, например, так: X=Y[:]
Иллюстрация:

>>> M = L = range(2,12,3)
>>> print M,L
[2, 5, 8, 11] [2, 5, 8, 11]
>>> L[2] = 112
>>> print M,L
[2, 5, 112, 11] [2, 5, 112, 11]
>>> M = L[:]
>>> L[2] = 0
>>> print M,L
[2, 5, 112, 11] [2, 5, 0, 11]

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

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

Множества

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

Элементами множества могут стать любые неизменяемые объекты.
После того, как мы проделали определённые операции над множествами — их можно разместить обратно в список, например, так:

На этом всё на сегодня.
Пользуясь терминологией Радио-Т хочется задать вопрос 🙂 Куда подкрутить градус гиковости, по вашему мнению? Если вверх, то на мой взгляд, циклы и ветвления стоит раскрыть только с точки зрения особенностей присущих Python.
Спасибо за внимание! Мы продолжим 🙂

Источник

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

image

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

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

Вкратце о Python

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

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

Типы объектов в 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 # Разность

Источник

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