Python является строго типизированным языком, а это означает, что тип объекта не изменится, даже если можно поменять его значение (рис. 2.2).
Рис. 2.2. Строгая типизация не означает, что нужно нажимать клавиши со строгим выражением лица
Языки программирования также позволяют вам определять переменные. Переменные являются именами, которые ссылаются на значения в памяти компьютера. Вы можете определить их для использования в своей программе. В Python символ = применяется для присваивания значения переменной.
В школе нас всех учили, что символ = означает «равно». Почему же во многих языках программирования, включая Python, этот символ используется для обозначения присваивания? Одна из причин — на стандартной клавиатуре отсутствуют логические альтернативы вроде стрелки влево, а символ = не слишком сбивает с толку. Кроме того, в компьютерных программах присваивание используется чаще проверки на равенство.
В следующей программе целое число 7 присваивается переменной с именем a, затем на экран выводится значение, связанное в текущий момент с этой переменной:
>>> a = 7
>>> print(a)
7
Сейчас пришло время сделать очень важное заявление о переменных в Python: переменные — это просто имена. Присваивание не копирует значение, оно прикрепляет имя к объекту, который содержит данные. Имя — это ссылка на какой-то объект, а не сам объект. Имя можно рассматривать как стикер (рис. 2.3).
Рис. 2.3. Имена прикрепляются к объектам
Попробуйте сделать следующее с помощью интерактивного интерпретатора.
1. Как и раньше, присвойте значение 7 имени a. Это создаст объект-«ящик», содержащий целочисленное значение 7.
2. Выведите на экран значение а.
3. Присвойте а переменной b, заставив b прикрепиться к объекту-«ящику», содержащему значение 7.
4. Выведите значение b.
>>> a = 7
>>> print(a)
7
>>> b = a
>>> print(b)
7
В Python, если вы хотите узнать тип какого-то объекта (переменной или значения), вам следует использовать конструкцию type(объект). Попробуем сделать это для разных значений (58, 99.9, abc) и переменных (a, b):
>>> type(a)
<class 'int'>
>>> type(b)
<class 'int'>
>>> type(58)
<class 'int'>
>>> type(99.9)
<class 'float'>
>>> type('abc')
<class 'str'>
Класс — это определение объекта; классы детально рассматриваются в главе 6. В Python значения терминов «класс» и «тип» примерно одинаковы.
Имена переменных могут содержать только следующие символы:
• буквы в нижнем регистре (от «a» до «z»);
• буквы в верхнем регистре (от «A» до «Z»);
• цифры (от до 9);
• нижнее подчеркивание (_).
Имена не могут начинаться с цифры. Python также особо обрабатывает имена, которые начинаются с нижнего подчеркивания (об этом вы можете прочесть в главе 4). Корректными являются следующие имена:
• a;
• a1;
• a_b_c___95;
• _abc;
• _1a.
Следующие имена, однако, некорректны:
• 1;
• 1a;
• 1_.
Наконец, не следует использовать следующие слова для имен переменных, поскольку они являются зарезервированными словами Python:
false class finally is return none continue for lambda try true def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raiseЭти слова и некоторые знаки препинания используются в синтаксисе Python. Вы познакомитесь с ними всеми по мере чтения этой книги.
Числа
Python имеет встроенную поддержку целых чисел (наподобие 5 и 1 000 000 000) и чисел с плавающей точкой (вроде 3,1416, 14,99 и 1,87е4). Вы можете вычислять комбинации чисел с помощью простых математических операторов, приведенных в таблице.
ОператорОписаниеПримерРезультат + Сложение 5 + 8 13 – Вычитание 90–10 80 * Умножение 4 * 7 28 / Деление с плавающей точкой 7/2 3,5 // Целочисленное (Truncating) деление 7//2 3 % Modulus (вычисление остатка) 7%3 1 ** Возведение в степень 34 81На нескольких следующих страницах я покажу вам простые примеры того, как Python можно использовать в качестве очень сложного калькулятора.
Целые числа
Любая последовательность цифр в Python считается целым числом:
>>> 5
5
Можно использовать и простой ноль (0):
>>> 0
0
Но не ставьте его перед другими цифрами:
>>> 05
··File "<stdin>", line 1
····05
·····^
SyntaxError: invalid token
Только что вы увидели первое исключение в Python — программную ошибку. В нашем случае это предупреждение о том, что значение 05 — это invalid token (некорректный символ). Я объясню, что это значит, в подразделе «Системы счисления» далее. В этой книге вы увидите еще много примеров исключений, поскольку они являются основным механизмом обработки ошибок в Python.
Последовательность цифр указывает на целое число. Если вы поместите знак + перед цифрами, число останется прежним:
>>> 123
123
>>> +123
123
Чтобы указать на отрицательное число, вставьте перед цифрами знак —:
>>> -123
-123
С помощью Python вы можете выполнять обычные арифметические действия, как и с обычным калькулятором, используя операторы, показанные в предыдущей таблице. Сложение и вычитание будут работать, полностью соответствуя вашим ожиданиям:
>>> 5 + 9
14
>>> 100–7
93
>>> 4–10
-6
Вы можете работать с любым количеством чисел и операторов:
>>> 5 + 9 + 3
17
>>> 4 + 3–2 — 1 + 6
10
Замечание по стилю: не обязательно вставлять пробел между каждым числом и оператором:
>>> 5+9···+······3
17
Такой формат выглядит лучше, и его проще прочесть.
Умножение тоже довольно привычно:
>>> 6 * 7
42
>>> 7 * 6
42
>>> 6 * 7 * 2 * 3
252
Операция деления чуть более интересна, поскольку существует два ее вида:
• с помощью оператора / выполняется деление с плавающей точкой (десятичное деление);
• с помощью оператора // выполняется целочисленное деление (деление с остатком).
Даже если вы делите целое число на целое число, оператор / даст результат с плавающей точкой:
>>> 9 / 5
1.8
Целочисленное деление даст вам целочисленный ответ, отбрасывая остаток:
>>> 9 // 5
1
Деление на ноль с помощью любого оператора сгенерирует исключение:
>>> 5 / 0
Traceback (most recent call last):
··File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 7 // 0
Traceback (most recent call last):
··File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by z
Во всех предыдущих примерах используются непосредственно целочисленные значения. Вы можете смешивать целочисленные значения и переменные, которым было присвоено целочисленное значение:
>>> a = 95
>>> a
95
>>> a — 3
92
Ранее, когда мы выполнили операцию a — 3, мы не присвоили результат переменной a, поэтому ее значение не изменилось:
>>> a
95
Если вы хотите изменить значение переменной а, придется сделать следующее:
>>> a = a — 3
>>> a
92
Это обычно сбивает с толку начинающих программистов, потому что благодаря изучению математики в школе мы видим знак = и думаем, что он указывает на равенство. В Python выражение, стоящее справа от знака =, вычисляется первым и только затем присваивается переменной с левой стороны.
Проще думать об этом так.
1. Вычитаем 3 из а.
2. Присваиваем результат этого вычитания временной переменной.
3. Присваиваем значение временной переменной а:
>>> a = 95
>>> temp = a — 3
>>> a = temp
Поэтому, когда вы говорите:
>>> a = a — 3
Python рассчитывает результат операции вычитания с правой стороны от знака =, запоминает результат,