Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Неизменяемость и примитивные типы Основы языка Python

Рассмотрим функцию abs(), которая делает число неотрицательным:

balance = -200
amount = abs(balance)

print(amount)  # => 200

На экран выведется 200. Но что будет выведено на экран, если вызвать print(balance)? Выведется старое значение: -200. Функция abs() вернула новые данные, но не изменила переданные в неё данные. Она не могла это сделать физически, потому что примитивные типы в Python — неизменяемы.

(Напомним, что примитивные типы — это простые типы, встроенные в сам язык программирования: например, число или строка).

В будущих уроках и заданиях мы будем использовать как собственные, так и готовые функции, но никакие функции не смогут изменять данные примитивных типов. Число -200 — это значение переменной balance, и само число нельзя изменить. Но переменная называется переменной, потому что её значение можно заменить на другое значение. То есть мы можем написать:

balance = -200
balance = abs(balance)

print(balance)

Сначала в переменную записывается одно значение, а потом в ту же переменную вместо предыдущего значения записывается новое: то, что вернет вызов abs(balance).

Строку balance = abs(balance) можно прочитать так: «записать в переменную balance то, что вернет вызов функции abs(), если передать в неё текущее значение переменной balance». Мы не изменили число, мы изменили переменную — записали в неё новое число вместо старого. Изменение уже существующей переменной может показаться безобидным действием. Но в реальных программах переписывание переменной становится источником проблем. Код с изменяемыми переменными сложно понимать и анализировать: никогда нельзя быть уверенным, какое значение будет у переменной в какой-то момент времени.

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
7 июля 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»