Найти в Дзене

Операторы присваивания и вызова функции

Оглавление

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

Как создаются переменные

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

Когда в программном коде обращаемся к переменной "а", берётся значение, записанное в ячейку памяти, ассоциированную с этой переменной. Таким образом, в этом примере переменная "а" - это всего лишь более понятное обозначение для ячейки "143"
Когда в программном коде обращаемся к переменной "а", берётся значение, записанное в ячейку памяти, ассоциированную с этой переменной. Таким образом, в этом примере переменная "а" - это всего лишь более понятное обозначение для ячейки "143"

Чтобы компьютер выделил ячейку памяти, в которую можно записать значения, необходимо создать переменную с помощью оператора присваивания (присвоения).

В коде в общем виде конструкция создания переменной или обновления значения существующей переменной выглядит так:

<имя_переменной> = <выражение>

Важно отметить, что выражение, записанное справа от оператора присваивания, сначала вычисляется. В переменную (и, соответственно, в память) записывается лишь конечный результат вычисления значения выражения.

При создании переменной "name" создаётся ссылка на ячейки памяти компьютера, хранящие значение "Anya", переведённое в двоичный код
При создании переменной "name" создаётся ссылка на ячейки памяти компьютера, хранящие значение "Anya", переведённое в двоичный код

Таким образом, знак "=" - это оператор присваивания, который используется с конкретной целью либо создания новой переменной, либо обновления значения в существующей. Оператор присваивания берёт конечный результат выражения, записанного справа, и помещает в ячейки памяти, с которыми связана переменная, записанная слева.

Обновление значения переменной

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

Присваивание значений переменным
Присваивание значений переменным

Так как оператор присваивания выполняется после замены переменных на значения и вычисления конечного значения выражения, программист может обновлять значения переменных, ориентируясь на то, что хранится в них.

Так можно обновить значение переменной, ориентируясь на хранимое в ней значение. На этом свойстве построены многие алгоритмы
Так можно обновить значение переменной, ориентируясь на хранимое в ней значение. На этом свойстве построены многие алгоритмы

Выражение a = a * 3 в Python можно записать в короткой форме a *= 3. Такие короткие формы имеются для всех основных арифметических операторов:

-6

Разница операторов присваивания и эквиваленции

Теперь, когда Вы знаете об операторе присваивания, Вы не должны делать такую ошибку:

Популярная ошибка у новичков
Популярная ошибка у новичков

Вы же в условии хотите сравнить "равна ли переменная 'а' переменной 'b'". Так почему Вы используете оператор присваивания?

Вся разница:

  • "=" - создание и обновление значения переменной
  • "==" - сравнение, равны ли элементы (логическая эквиваленция)

Оператор вызова функции

Как известно, функция - это фрагмент программного кода, имеющий собственное имя. В Python функции представлены в виде объектов, которые, как и любые другие объекты, могут быть записаны в переменные с помощью оператора присваивания.

В примере мы присвоили переменной "a" ссылку на ячейки памяти, в которых хранится функция "min"
В примере мы присвоили переменной "a" ссылку на ячейки памяти, в которых хранится функция "min"

Названия функций - это и есть переменные, в которых хранятся подпрограммы. Следовательно, с названиями функций можно выполнять все те же действия, которые можно выполнить с любой другой переменной.

В то же время, для функций есть уникальный оператор вызова функций, который обозначается как "( )". Именно скобки запускают функцию на выполнение, передавая ей в качестве аргументов записанные внутри значения. Без скобок мы работаем с функцией как с простой переменной.

Если мы вызываем функцию, мы пишем оператор вызова сразу же после её названия.

-9

Подробнее о том, как работать с функцией, пользуясь тем, что она является объектом, я написал в заметку о функциональной парадигме.

Дополнение

Алгоритм - это набор последовательный инструкций (команд), которые выполняет интерпретатор. В Python каждая строка - это отдельная инструкция. А какие инструкции бывают? Мне кажется, что все инструкции можно разделить на 2 вида:

  • Использование оператора присваивания - для сохранения значений в памяти компьютера.
  • Вызов функции - для того, чтобы подпрограммы что-то сделали.

Ориентируясь на это, Вы можете избегать создания бесполезных строк. Например:

Ошибка новичка
Ошибка новичка

Программа выполняется, но что делает строчка "a + 4"? В этой инструкции нет ни функции, ни оператора присваивания - следовательно результат выражения нигде не используется и не сохраняется в переменную. Влияет ли эта строчка на результат работы программы? Нет, не влияет. Эту строчку надо либо доработать, добавив оператор присвоения или вызвав функции, либо удалить её.