Переменные и типы

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

>>> 10 / 5
2.0
>>> 1+1
2

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

Самый простой тип — это целые числа. Если мы хотим узнать сколько стоит какой-то товар, то мы можем сделать переменную с именем этого товара и присвоить ей значение равное стоимости этого товара:

>>> egg = 2
>>> egg
2

Мы создали переменную с именем egg и оператором = присвоили ей новое значение. Если обратиться к этой переменной, то мы получим ее значение. Более того, мы можем подставлять эту переменную в выражения:

>>> egg + egg
4

Давайте создадим еще пару переменных:

>>> toast = 5
>>> sausage = 7

Теперь мы можем записать формулу завтрака и сразу узнать сколько он стоит:

>>> egg * 2 + toast + sausage * 3
30

Теперь сохраним переменную, показывающую сколько стоит мой завтрак и завтрак моих детей, которые съедают только одну сосиску и не хотят кушать хлеб:

>>> my = egg * 2 + toast + sausage * 3
>>> my
30
>>> kids = egg * 2 + sausage
>>> kids
11

Что такое переменная и память

Для того чтобы лучше понять как работает переменная, представьте себе большой склад на котором находятся различные вещи, большие и маленькие. Сейчас на этом складе мы приклеили парочку ценников на продукты. Для удобства работы со складом у нас есть специальные карточки учета, которые говорят нам где конкретно находится объект.

Так вот, внутри компьютера память — это такой склад, а переменная — это карточка учета. Когда мы создаем переменную, то она сразу привязывается к объекту на складе. Если нам нужно воспользоваться переменной (например во время рассчета стоимости завтрака), то мы не передаем сам предмет каждый раз, а передаем только указатель. Мы можем присвоить переменной новое значение, и тогда она будет указывать на другой предмет на складе. Может быть даже так, что на один и тот же предмет указывает несколько переменных. Говоря языком программирования переменные — это указатели на область памяти. Если вдруг случится так, что все указатели на объект будут удалены, то для менеджера памяти это будет означать, что предмет на складе больше не нужен, и тогда специальный сборщик мусора его уберет навсегда.

Программа и процесс

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

Удаление переменной

Поскольку переменная занимает память, то иногда целесообразно удалять переменную из памяти. Для этого существует оператор del:

>>> x = 10
>>> x
10
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

Удаление переменных во многих случаях происходит автоматически. Об этом подробнее будет рассказано в других уроках.

Основные типы данных

Сначала вам может показаться, что типов данных слишком много. Но уверяю вас, вам быстро станет понятно, что они достаточно логичны и отражают окружающий мир. (YYYY: не хочешь ли ты дальше давать английский перевод, чтобы было понятно от какого слова сокращение?)

Специальные:

  • None — неопределенное значение;
  • bool — логическое значение (True, False).

Для работы с числами:

  • int — целое число;
  • float — число с плавающей точкой.

Для работы со строками:

  • str — строка;
  • unicode — устаревший строковый тип для старой версии Python, он больше не используется, но может попасться вам в статьях в интернете.

Для работы с множествами:

  • list — список;
  • tuple — кортеж;
  • dict — словарь;
  • set — множество;
  • frozenset — неизменяемое множество.

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

Мы подробно останавимся на каждом в следующих лекциях блока.

А пока простой пример создания переменной каждого типа:

# special
my_none = None
my_bool = True
# numbers
my_int = 1
my_float = 0.5
# strings
my_str = "Hello, World!"
my_unicode = u"Hello, World!"
my_str == my_unicode
# collections
my_list = ['деревянный', 'оловянный', 'алмазный']
my_list[0]
my_tuple = ('Слиток титановой стали', 'Руническая сфера')
my_tuple[1]
my_dict = {
    'Лазурит': 'Лазуритовая руда',
    'Уголь': 'Угольная руда'
}
my_dict['Уголь']
my_set = {'Воин', 'Друид', 'Жрец', 'Маг', 'Монах', 'Охотник'}
'Разбойник' in my_set
my_frozen = frozenset(['Свет', 'Защита', 'Воздаяние'])
my_frozen.add('Послушание')

Это была быстрая ознакомительная демонстрация. Потом каждый тип будет описан подробнее.

Определение типа переменной

Для того чтобы определить какого типа переменная можно использовать вызов функции type:

>>> a = 10
>>> type(a)
<class 'int'>
>>> a = 10.0
>>> type(a)
<class 'float'>
>>> a = 'Hello'
>>> type(a)
<class 'str'>

Мы каждый раз переназначали для переменной a новое значение и тем самым меняли ее тип. Определение типа переменной позволит нам в будущем лучше представлять что такое объекты в Python.

Ссылки