Что такое множественное присваивание
ПРИСВАИВАНИЕ И СОЗДАНИЕ ОБЪЕКТОВ В PYTHON
Оператор присваивания
Для присваивания значений переменным в Python служит оператор «=«.
Выражение, стоящее справа от оператора присваивания, вычисляется, и полученное значение присваивается переменной, стоящей слева от оператора присваивания. При этом предыдущее значение, хранящееся в переменной, стирается и заменяется на новое. Если такой переменной не существует, то она создается и в нее записывается значение.
Создание переменных и объектов в Python происходит с помощью оператора присваивания.
Оператор «=» не следует понимать как равенство. Например, выражение a = 5 следует читать как «присвоить переменной a значение 5».
Cложить значения 5 и 3, результат присвоить переменной x (записать в переменную x).
Прибавить 4 к значению, хранящемуся в переменной a, полученный результат присвоить переменной b (записать в переменную b).
Прибавить 1 к значению, хранящемуся в переменной b, полученный результат присвоить переменной b (записать в переменную b). В результате выполнения этой строчки кода, значение переменной b увеличится на 1.
В правой части значение переменной может использоваться много раз:
Множественное присваивание
Множественное присваивание (позиционное присваивание) в Python реализуется следующим образом: В результате выполнения этой строки кода в переменной a окажется число 5, в переменной b — 3, в переменной c — 1. Количество значений и количество переменных справа и слева от оператора присваивания должно совпадать. При множественном присваивании порядок присваивания формируется слева направо.
С помощью множественного присваивания можно поменять значения переменных между собой.
Множественное присваивание со списками
В переменной a окажется число 5, в переменной b — 3, в переменной c — 1.
Количество переменных должно быть равно количеству элементов списка.
Аналогичным образом это работает и для кортежей.
Множественное присваивание со строками
В a окажется «m», в b — «a», в c — «k», в d — «e».
Количество переменных должно быть равно количеству символов в строке.
Каскадное присваивание
Инициализация переменных
Любая переменная, использующаяся в выражении, должна существовать.
Действительно, переменной «c» в нашей программе не существует и при вычислении выражения a + b + c интерпретатор Python столкнулся с этой проблемой. Попробуем исправить эту ситуацию. Теперь всё нормально и после запуска программы мы получим результат вычислений.
Особенно важно обращать внимание на существование переменной в конструкциях, используемых, например, для счетчиков.
Чтобы код нормально работал, следует создать переменную k, присвоив ей, например, 0. Это называется инициализировать переменную.
Составное присваивание
В составном операторе присваивания используются арифметические операторы.
Пример сложения с присваиванием: Получим Составной оператор += прибавляет к переменной значение выражения справа от оператора присваивания и записывает получившийся результат в эту переменную.
a += 5 эквивалентно a = a + 5.
Составные операторы присваивания используются для сокращения записи.
Таблица с составными операторами присваивания и их эквивалентами
Переменные, оператор присваивания, типы данных
Это занятие начнем с рассмотрения структуры программы на Python и зададимся вопросом: что из себя представляет простейшая программа? В действительности – это пустой текстовый файл. Да, мы можем запустить такую программу, она исполнится, но ничего не произойдет. Немного усложним ее и напишем, например, просто
это тоже допустимо и программа тоже сработает. Далее, если добавим круглые скобки:
то эта функция будет вызвана и в консоли напечатается пустая строка, то есть, символ перевода на новую строку. Запишем в круглых скобках кавычки:
программа сработает аналогичным образом – выведется пустая строка. Ну а если написать строку:
то в консоль выведется это сообщение. Все эти примеры показывают гибкость и дружелюбие интерпретатора языка Python по отношению к программисту. Но есть и определенные ограничения, например, начальные конструкции всегда должны начинаться с самого начала строки, то есть, ставить пробел перед print нельзя. Например, вот так:
работать не будет. Также обязательной является пустая строка в конце текстового файла с программой. Если мы в редакторе ее не напишем, то при сохранении, она будет добавлена автоматически. Допускается множество пустых строк, но одна должна быть обязательно.
Далее, в каждой более-менее состоятельной программе имеются комментарии – это текст, который видит программист, но игнорируемый интерпретатором языка. Чтобы поставить комментарий, используется символ шарп (#), за которым следует текст комментария:
Переменные и их типы
Теперь, когда мы узнали как записывать простейшие программы, пришло время выяснить как Python хранит и представляет различные данные. То есть, поговорить о переменных и их типах.
Строго говоря, в Питоне нет переменных, в привычном смысле: когда переменная является именованным хранилищем данных. Здесь все устроено несколько иначе. Например, если записать вот такую строчку:
то x здесь имя ссылки, которая ссылается на «Hello World!». А сам «Hello World!» представляется в Python как объект, содержащий эту строку. Визуально это можно представить так:
То есть, оператор присваивания не копирует данные в переменную, он лишь возвращает ссылку на объект с данными и эта ссылка сохраняется в переменной x.
И, конечно же, имена ссылок следует делать осмысленными. Например, если мы храним сообщение, пусть она называется
если это какой-либо счетчик, то можно использовать имя
и так далее. Это упрощает понимание программы и облегчает процесс программирования.
Давайте теперь выведем значение нашей ссылки x, используя встроенную функцию
У объекта, на который ссылается x, есть тип данных. Его можно узнать вызвав функцию
и мы увидим в консоли сообщение:
которое говорит, что объект (класс) имеет тип str, то есть, содержит строку. Получается, что в любом объекте, помимо данных, хранится еще и тип данных:
Механизм переменных в виде ссылок на объекты имеет ряд преимуществ. Например, мы можем далее в программе присвоить ссылку x на любой другой объект, скажем, числовой:
В этом случае будет автоматически создан новый объект с числом 5 и типом int:
Если мы запустим программу, то увидим, что id у x меняется, что говорит об изменении ссылки на новый объект и тип данных теперь int.
А что происходит с объектом, на который теперь нет ссылок? Он автоматически уничтожается сборщиком мусора. В Python реализован алгоритм автоматического удаления данных, на которых нет внешних ссылок. Поэтому программист может совершенно не заботиться об освобождении памяти, занятой ранее каким-либо объектом. И это очень удобно. В частности, вот при таком присваивании:
сначала будет вычислено это выражение 2+3=5, на основе двух временных объектов (не именованных – на них нет ссылок), затем, сформируется новый объект со значением 5, а объекты 2 и 3 уничтожатся сборщиком мусора, т.к. на них нет внешних ссылок. В результате, x будет ссылаться на этот созданный объект со значением 5 и целочисленным типом int.
Каскадное присваивание
В Питоне существует, так называемое, каскадное присваивание, которое можно записать так:
В этом случае все три ссылки будут ссылаться на один и тот же объект. И это принципиальное отличие, например, от языка С++, когда в эти переменные просто записался бы 0. Здесь никакого копирования не происходит, а всего лишь именованные ссылки x, y, z ссылаются на один и тот же объект со значением 0.
Множественное присваивание
Если нам необходимо каждой ссылке присвоить свой объект, то для этого следует воспользоваться множественным присваиванием:
В этом случае каждая ссылка будет ссылаться на свой объект. Это можно интерпретировать так: кортежу ссылок (переменных) присваивается кортеж соответствующих объектов.
В частности, такое присваивание можно использовать при обмене данными между ссылками. Например, так:
Смотрите, как это просто и удобно. Работает это так. Сначала в правой части формируется кортеж из объектов, на которые ссылаются y и x, а затем, этот кортеж присваивается ссылкам x, y, стоящим слева. В результате происходит их пересвязывание.
В языке С++ это пришлось бы реализовывать через третью переменную:
temp = x;
x = y;
y = temp;
А в Python это всего лишь одна короткая строчка!
Я думаю, теперь вы понимаете, что из себя представляют переменные и как работает оператор присваивания в Python. Остается один открытый вопрос: какие типы данных существуют в этом языке программирования? Встроенные типы данных следующие: