Урок 2. Данные: типы, значения, переменные и имена

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

Урок 2. Данные: типы, значения, переменные и имена

Мы начнем с типов данных, используемых в Python, и значений, которые они могут содержать. Затем рассмотрим, как представить данные в виде значений-литералов и переменных.

В Python данные являются объектами

Память вашего компьютера визуально можно представить в виде длинного ряда полок. Каждый слот на этих полках имеет ширину 1 байт (8 бит). Слоты пронумерованы от 0 (первая позиция) до самого конца. Современные компьютеры имеют миллиарды байт памяти (гигабайт), поэтому полки могли бы заполнить огромный воображаемый склад.

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

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

Разные типы используют разное количество битов. Когда вы читаете о «64-битной машине», это означает, что целое число использует 64 бита (8 байт).

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

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


Рис. 2.1. Похожий на коробку объект — целое число со значением 7

В Python объектом является фрагмент данных, в котором содержится как минимум следующее:

тип, определяющий, что объект может делать (по­дробнее см. в следующем разделе);

• уникальный идентификатор, позволяющий отличить его от других объектов;

• значение, соответствующее типу;

• счетчик ссылок для отслеживания того, как часто объект используется.

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

Типы

В табл. 2.1 представлены базовые типы данных в Python. Во втором столбце («Тип») содержится имя этого типа в Python. Третий столбец («Изменяемый?») указывает, можно ли изменить значение переменной после ее создания (подробнее об этом поговорим в следующем разделе). В столбце «Примеры» показываются один или несколько примеров-литералов, соответствующих этому типу.

Таблица 2.1. Базовые типы данных в Python

Имя

Тип

Изменяемый?

Примеры

Булево значение

bool

Нет

True, False

Целое число

int

Нет

47, 25000, 25_000

Число с плавающей точкой

float

Нет

3.14, 2.7e5

Текстовая строка

str

Нет

'alas', "alack", '''a verse attack'''

Список

list

Да

['Winken', 'Blinken', 'Nod']

Кортеж

tuple

Нет

(2, 4, 8)

Множество

set

Да

set([3, 5, 7])

Фиксированное множество

frozenset

Нет

frozenset(['Elsa', 'Otto'])

Словарь

dict

Да

{'game': 'bingo', 'dog': 'dingo', 'drummer': 'Ringo'}

Изменчивость

Тип также определяет, можно ли значение, которое хранится в ящике, изменить — тогда это будет изменяемое значение, или оно константно — неизменяемое значение. Неизменяемый объект как будто находится в закрытом ящике с прозрачными стенками (см. рис. 2.1): увидеть значение вы можете, но не в силах его изменить. По той же аналогии изменяемый объект похож на коробку с крышкой: вы можете не только увидеть хранящееся там значение, но и изменить его, не изменив его тип.

Python является строго типизированным языком, а это означает, что тип объекта не изменяется, даже если его значение изменяемо.

Значения-литералы

Существует два вида определения данных в Python:

• как литералы;

• как переменные.

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbsAAAC+CAYAAACs06EZAAAEQ3RFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMmVtYmVkLmRpYWdyYW1zLm5ldCUyMiUyMG1vZGlmaWVkJTNEJTIyMjAyMi0wOS0yOFQxNCUzQTI3JTNBNTMuOTExWiUyMiUyMGFnZW50JTNEJTIyNS4wJTIwKE1hY2ludG9zaCklMjIlMjB2ZXJzaW9uJTNEJTIyMjAuMy43JTIyJTIwZXRhZyUzRCUyMnMyNWpvcjdQOWtlZmI3YkZ1VkVRJTIyJTIwdHlwZSUzRCUyMmVtYmVkJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIycGJoeGFuakdfdWxnRGJEa3k3R24lMjIlMjBuYW1lJTNEJTIyJUQwJUExJUQxJTgyJUQxJTgwJUQwJUIwJUQwJUJEJUQwJUI4JUQxJTg2JUQwJUIwJTIwMSUyMiUzRTNWYkxjcHN3RlAwYWxzbUFlTmhlQmh5M202Nnk2RnFERk5CVUlDcmtHUGZyZTRVdXI0Qm5NaDFQTzgxR1hKMzdrSFRPUmVDRldkVjkwYlFwdnluR3BVZDgxbm5oMFNQa0VDVXdXdURxZ0dRWE9hRFFnamtvbUlBWDhZc2o2Q042Rm95M2kwQ2psRFNpV1lLNXFtdWVtd1ZHdFZhWFpkaXJrc3RWRzFyd0ZmQ1NVN2xHdnd0bVNvZnV5VzdDdjNKUmxNUEtRWEp3bm9vT3dYaVN0cVJNWFdaUSUyQk95Rm1WYktPS3ZxTWk0dGR3TXZMdTkwd3p0dVRQUGFmQ1NCdUlRM0tzOTRObzhrRWxMVFZ3VVZZSVBtaXFkT2ZwN1Y0SGhvZTAyZUlDQTZOQ0JyT3ZuQkt1eXpBMmVmNkk4MVlSJTJCdXJJdEFDc1lWaU9HZHhWdWoxUSUyQmVLYWswNExXcXVWMVdTUGtPS2swbFlSYmdwckJQU0RUTXNiRDF2M0Z0QkFqNEpFVlJBMVlKeHF3enBRamtRQmpYNDZac1BPOXVraHFNVWtHTGMxVnhvNjhRZ2duaDBLZERlJTJCUDBNdlZLNENOV3p2b2tRb3hpZXhaajVVbEJNRkRFYlVIRHRhQkgzMHZUZnR4N1FNYmVJWEZ2JTJCNzN0WTh3bjFTUGFMZlVnJTJGbDhVSk5v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

Переменные

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

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

Имена переменных в Python отвечают определенным правилам.

• Они могут содержать только следующие символы:

• буквы в нижнем регистре (от a до z);

• буквы в верхнем регистре (от A до Z);

• цифры (от 0 до 9);

• нижнее подчеркивание (_).

• Они чувствительны к регистру: thing, Thing и THING — это разные имена.

• Они должны начинаться с буквы или нижнего подчеркивания, но не с цифры.

• Python особо обрабатывает имена, которые начинаются с нижнего подчеркивания. (Подробнее в объектно-ориентированом программировании)

• Они не могут совпадать с зарезервированными словами Python (их также называют ключевыми).

Перед вами список зарезервированных слов:

False      await      else       import     pass

None       break      except     in         raise

True       class      finally    is         return

and        continue   for        lambda     try

as         def        from       nonlocal   while

assert     del        global     not        with

async      elif       if         or         yield

Внутри программы Python увидеть список зарезервированных слов можно с помощью команд:

>>> help("keywords")

или:

>>> import keyword 
>>> keyword.kwlist
корректные

имена некорректны

a

1

a1

1a

a_b_c__95

1_

_abc

name!

_1aanother-name

Присваивание

В Python символ = применяется для присваивания значения переменной.

В школе нас учили, что символ = означает «равно». Почему же во многих языках программирования, включая Python, этот символ используется для обозначения присваивания? Одна из причин — на стандартной клавиатуре отсутствуют логические альтернативы вроде стрелки влево, а символ = не слишком сбивает с толку. Кроме того, в компьютерных программах присваивание используется чаще, чем проверка на равенство.

Программы непохожи на алгебру. В школе мы имели дело с подобными уравнениями:

>>>y = x + 12

Решить уравнение можно, подставив значение для x. Если вы зададите для x значение 5, то, поскольку 5+12 равно 17, значение y будет равно 17. Подставьте значение 6, и y будет равен 18. И так далее.

Строки компьютерной программы могут выглядеть как уравнения, но означают они при этом нечто иное. В Python и других компьютерных языках x и y являются переменными. Python знает, что цифра или простая последовательность цифр вроде 12 или 5 является числовым литералом. Рассмотрим небольшую программу на Python, которая схожа с этим уравнением, — она выводит на экран значение y:

>>> x = 5
>>> y = x + 12
>>> y
17

Здесь мы видим большое различие между математикой и программами: в математике знак = означает равенство обеих сторон, а в программировании он означает присваивание: переменной слева мы присваиваем значение с правой стороны.

Переменные — это имена, а не локации

Пришло время сделать важное утверждение о переменных в Python: переменные — всего лишь имена, и в этом заключается отличие Python от других языков программирования. Об этом важно помнить, особенно при работе с такими изменяемыми объектами, как списки. Операция присваивания не копирует значение, а только лишь прикрепляет имя к объекту, содержащему нужные данные. Имя — это ссылка на объект, а не сам объект. Можно представить, что имя — это этикетка, приклеенная на коробку с объектом, которая размещается где-то в памяти компьютера (рис. 2.3).

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

• Вы можете неверно написать имя переменной и получить исключение, поскольку она ни на что не ссылается, Python не выполняет такую проверку автоматически в отличие от статических языков.

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

Попробуйте сделать следующее с помощью интерактивного интерпретатора (рис. 2.4).

1. Как и раньше, присвойте значение 7 имени a. Это создаст объект-«ящик», содержащий целочисленное значение 7.

2. Выведите на экран а.

3. Присвойте имя а переменной b, заставив b прикрепиться к объекту-«ящику», содержащему значение 7.

4. Выведите b.

a = 7 
>>> print(a) 
7 
>>> b = a 
>>> print(b) 
7

Рис. 2.3. Имена указывают на объекты (переменная указывает на целочисленный объект со значением 7)

Рис. 2.4. Копирование имени (теперь переменная b указывает на тот же целочисленный объект)

Попробуйте сделать следующее с помощью интерактивного интерпретатора (рис. 2.4).

1. Как и раньше, присвойте значение 7 имени a. Это создаст объект-«ящик», содержащий целочисленное значение 7.

2. Выведите на экран а.

3. Присвойте имя а переменной b, заставив b прикрепиться к объекту-«ящику», содержащему значение 7.

4. Выведите b.

a = 7 
>>> print(a) 
7 
>>> b = a 
>>> print(b) 
7

В Python, если нужно узнать тип какого-либо объекта (переменной или значения), можно использовать конструкцию type(объект). type() — одна из встроенных в Python функций. Чтобы проверить, указывает ли переменная на объект определенного типа, используйте конструкцию isinstance(type):

>>> type(7)
<class 'int'>
>>> type(7) == int
True
>>> isinstance(7, int)
True

Когда я упоминаю функцию, то после ее имени размещаю круглые скобки (()) и таким образом подчеркиваю, что это именно функция, а не имя переменной или что-либо еще.

Попробуем проделать это с разными значениями (58, 99.9, 'abc') и переменными (a, b):

a = 7 
>>> b = a 
>>> type(a) 
<class 'int'> 
>>> type(b) 
<class 'int'> 
>>> type(58) 
<class 'int'> 
>>> type(99.9) 
<class 'float'> 
>>> type('abc') 
<class 'str'>

Класс — это определение объекта. В Python значения терминов «класс» и «тип» примерно одинаковы.

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

Снова рассмотрим пример, показанный ранее:

y = 5 
>>> x = 12 - y 
>>> x 
7

В этом фрагменте кода Python сделал следующее:

• создал целочисленный объект со значением 5;

• создал переменную у, которая указывает на этот объект;

• нарастил счетчик ссылок для объекта, содержащего значение 5;

• создал еще один целочисленный объект со значением 12;

• вычел значение объекта, на который указывает переменная у (5), из значения 12, содержащегося в анонимном объекте;

• присвоил результат (7) новому (пока еще безымянному) целочисленному объекту;

• заставил переменную х указывать на этот новый объект;

• нарастил счетчик ссылок для объекта, на который указывает переменная х;

• нашел значение объекта, на который ссылается переменная х (7), и вывел его на экран.

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

В нашем случае объекты со значениями 5, 12 и 7, а также переменные x и y больше не нужны. Сборщик мусора Python может или отправить их в небесный рай для объектов7, или сохранить, исходя из соображений производительности, так как небольшие целые числа используются довольно часто.

Присваивание нескольким именам

Вы можете присвоить значение сразу нескольким переменным одновременно:

two = deux = zwei = 2 
>>> two 
 2 
>>> deux 
 2 
>>> zwei
 2

Переназначение имени

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

Копирование

Как вы видели на рис. 2.4, присваивание существующей переменной а новой переменной b заставит b указывать на тот же объект, что и a. Если вы выберете этикетку a или b и обратитесь к объекту, на который они указывают, вы получите одинаковый результат.

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

x = 5 
>>> x 
5 
>>> y = x 
>>> y
5 
>>> x = 29 
>>> x 
29 
>>> y 
5

Когда мы присваиваем переменную x переменной y, переменная y начинает указывать на целочисленный объект со значением 5, на который также указывает и переменная x. Далее мы изменяем переменную x так, чтобы она указывала на целочисленный объект со значением 29. Объект со значением 5, на который все еще указывает переменная y, не изменился.

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

Список представляет собой изменяемый массив значений (на будущем занятии этот тип данных описывается более подробно). В нашем примере a и b указывают на список, содержащий три целочисленных объекта:

a = [2, 4, 6] 
>>> b = a 
>>> a 
[2, 4, 6] 
>>> b 
[2, 4, 6]

Эти элементы списка (a[0], a[1] и a[2]) сами по себе являются именами, указывающими на целочисленные объекты со значениями 2, 4 и 6. Список хранит элементы в заданном порядке.

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

a[0] = 99 
>>> a 
[99, 4, 6] 
>>> b 
[99, 4, 6]

Когда первый элемент списка изменяется, он больше не указывает на объект со значением 2. Теперь он указывает на объект со значением 99. Список все еще имеет тип list, но его значения (элементы списка и их порядок) можно изменить.

Выбираем хорошее имя переменной

Удивительно, но выбор соответствующих имен для переменных очень важен. Во многих примерах кода, которые мы успели рассмотреть, мы использовали простейшие имена вроде a и x. В реальных программах вам будет нужно отслеживать гораздо больше переменных одновременно и придется балансировать между крат­костью и понятностью. Например, имя num_loons можно напечатать быстрее, чем number_of_loons или gaviidae_inventory, однако они более понятны, чем имя n.

Упражнения

2.1. Присвойте целочисленное значение 99 переменной prince и выведите ее на экран.

2.2. Какого типа значение 5?

2.3. Какого типа значение 2.0?

2.4. Какого типа выражение 5+2.0?