Лекция 12 Инструкции присваивания в Python
Присваивание в Python и его каноническая форма
Пример №1. Каноническая форма присваивания.
Особенности присваивания в Python:
Комбинированные инструкции присваивания в Python
Пример №2. Комбинированная форма присваивания.
Пример №3. Преимущества комбинированной формы присваивания.
Основные инструкции присваивания, комбинированные с арифметическими операторами:
Позиционное присваивание в Python
Пример №4. Позиционное присваивание (часть 1).
Пример №5. Позиционное присваивание (часть 2).
Групповое присваивание одного значения в Python
Пример №6. Присваивание одного значения группе переменных (часть 1).
Пример №7. Присваивание одного значения группе переменных (часть 2).
Выражения присваивания в Python
Пример №8. Использование выражений присваивания (часть 1).
Пример №9. Использование выражений присваивания (часть 2).
650.50K
Category: programmingprogramming

Инструкции присваивания в Python (Лекция 12)

1. Лекция 12 Инструкции присваивания в Python

Присваивание в Python и его каноническая форма
Комбинированные инструкции присваивания
Позиционное присваивание
Групповое присваивание одного значения
Выражения присваивания в Python

2. Присваивание в Python и его каноническая форма

• В Python, как и во многих других языках
программирования, каноническая форма
операции присваивания имеет вид a = b,
где слева от оператора присваивания
записывается целевое имя переменной или
компонент объекта, а в качестве правого
операнда выступает произвольное
выражение, которое в результате
вычислений дает объект (см. пример №1).

3. Пример №1. Каноническая форма присваивания.

Пример №1. Каноническая
форма присваивания.

4. Особенности присваивания в Python:

Особенности присваивания
в Python:
• Инструкции присваивания всегда сохраняют ссылки на объекты,
например, в переменных или в элементах структур данных, и никогда
не создают копии присваиваемых объектов. Как следствие,
переменные в Python больше напоминают указатели, чем области
хранения данных.
• Объявлять переменные заранее нельзя, т.к. интерпретатор создает
переменные в момент присваивания им значений (то есть ссылок на
объекты). После инициализации, когда имя переменной будет
встречаться в выражениях, оно будет автоматически замещаться
объектом, на который ссылается данная переменная. Если же
интерпретатор встретит в программе неинициализированную
переменную, он возбудит исключение вместо того, чтобы вернуть
какое-либо значение по умолчанию (такое поведение призвано
облегчить поиск ошибок и опечаток в коде).
• Некоторые инструкции пусть и неявно, но тоже выполняют операцию
присваивания. Примерами могут служить импорт модуля,
определение функции или класса, указание переменной в
цикле for или же передача аргументов функции. В любом случае
результатом явных или неявных инструкций присваивания будет
связывание имен с ссылками на объекты.

5. Комбинированные инструкции присваивания в Python

• В дополнение к базовой инструкции присваивания
в Python имеется и целый ряд комбинированных
инструкций присваивания, которые объединяют
операцию присваивания с другой операцией.
• В общем виде инструкцию присваивания с
комбинированным оператором x operator= y можно
считать сокращенной записью инструкции x = x
operator y.
• Например, x += y является сокращенной записью
инструкции присваивания x = x + y, в которой к
значению переменной x прибавляется значение
переменной y, а результат присваивается
переменной x (см. пример №2).

6. Пример №2. Комбинированная форма присваивания.

Пример №2. Комбинированная
форма присваивания.

7.

• Таким образом, комбинированная инструкция
присваивания объединяет в себе выражение и
присваивание, являясь по сути краткой формой
записи кода.
• И хотя, например, инструкции num += 25 и num =
num + 25 дадут один и тот же результат, первая из
них выглядит явно компактнее.
• Кроме того, если объект справа относится к
категории изменяемых объектов и поддерживает
указанную операцию, комбинированная
инструкция присваивания может выполняться даже
быстрее за счет непосредственного изменения
объекта вместо создания и изменения его копии
(см. пример №3).

8. Пример №3. Преимущества комбинированной формы присваивания.

Пример
№3. Преимущества
комбинированной
формы присваивания.
Метод time() одноименного
модуля time стандартной
библиотеки Python возвращает
время, выраженное в секундах с
начала эпохи.

9. Основные инструкции присваивания, комбинированные с арифметическими операторами:

• a += b – тоже самое, что и a = a + b;
• a -= b – тоже самое, что и a = a - b;
• a *= b – тоже самое, что и a = a * b;
• a **= b – тоже самое, что и a = a**b;
• a /= b – тоже самое, что и a = a / b;
• a //= b – тоже самое, что и a = a // b;
• a %= b – тоже самое, что и a = a % b.

10. Позиционное присваивание в Python

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

11. Пример №4. Позиционное присваивание (часть 1).

Пример №4. Позиционное
присваивание (часть 1).

12.

• Как видим, данная форма присваивания
позволяет смешивать последовательности
разных типов. Здесь главное, чтобы
количество присваиваемых значений
совпадало с количеством переменных,
которым эти значения будут присваиваться.
• Но и эта проблема может быть решена за
счет имеющейся возможности
использования в присваивании
расширенного синтаксиса распаковывания
последовательностей (см. пример №5).

13. Пример №5. Позиционное присваивание (часть 2).

Пример №5. Позиционное
присваивание (часть 2).

14.

• Благодаря наличию имени со звездочкой все
лишние значения автоматически помещаются в
соответсвующий список именно так, как и
ожидается.
• Однако нужно не забывать, что можно
использовать только одну переменную со
звездочкой, а сама переменная должна
принадлежать последовательности даже в том
случае, если она будет одна (поставив запятую в
инструкции *c, = [1, 2] мы автоматически получили
кортеж и смогли избежать ошибки).
• Следует добавить, что расширенная операция
распаковывания последовательностей может
использоваться не только в случаях явного
присваивания значений, но также и в заголовках
циклов, вызовах функций и других операциях
неявного присваивания значений.

15. Групповое присваивание одного значения в Python

• В случае группового присваивания объект,
расположенный справа, присваивается
всем переменным группы (см. пример №6).
В результате несколько отдельных
инструкций присваивания могут быть
заменены одной эквивалентной и более
компактной инструкцией.

16. Пример №6. Присваивание одного значения группе переменных (часть 1).

Пример №6. Присваивание одного
значения группе переменных
(часть 1).

17.

• Следует иметь в виду, что при групповом
присваивании в памяти создается всего лишь один
объект, разделяемый всеми переменными группы.
• Поэтому такая форма присваивания будет полезна
для неизменяемых объектов, например, чисел или
строк. А вот при использовании изменяемых
объектов типа списков или словарей нужно быть
осторожными, т.к. изменение объекта через одну
из переменных группы будет оказывать влияние и
на другие переменные (см. пример №7).
• Это связано с тем, что переменные в Python хранят
не сами объекты, а ссылки на них. А раз так, то даже
после изменения объекта через одну из ссылок все
остальные по-прежнему будут указывать на тот же,
пусть и модифицированный, объект.

18. Пример №7. Присваивание одного значения группе переменных (часть 2).

Пример №7. Присваивание одного
значения группе переменных
(часть 2).
Таким образом, во
избежание проблем с
изменяемыми объектами,
их инициализацию лучше
производить в отдельных
инструкциях, как было
показано в первой части
примера №6.

19. Выражения присваивания в Python

• Все рассмотренные нами формы присваивания
относятся к инструкциям. Но их запрещено
использовать в выражениях, что иногда может быть
весьма полезным. Поэтому начиная с версии Python
3.8 было решено ввести новую конструкцию NAME
:= expr с возможностью использования в
выражениях (см. пример №8).
• Конструкция получила название выражение
присваивания или же именованное выражение, а
оператор := стал неофициально
называться моржовым оператором.

20. Пример №8. Использование выражений присваивания (часть 1).

Пример №8. Использование
выражений присваивания (часть 1).
Использовать выражение присваивания в коде верхнего уровня без
скобок запрещается. Например, инструкция x = y := 5 не пройдет,
нужно использовать скобки: x = (y := 5). И вообще, использование
скобок с моржовым оператором следует сразу же взять на
вооружение, т.к. это поможет избежать многих досадных ошибок.

21. Пример №9. Использование выражений присваивания (часть 2).

Пример №9. Использование
выражений присваивания (часть 2).
Подробнее о выражениях присваивания
можете почитать на официальном сайте в
документации к PEP 572 – Assignment
Expressions.
English     Русский Rules