Во многих курсах по программированию операторам присваивания и вызова функции не уделяется должного внимания. Я же считаю, что освоение этих операторов позволяет лучше понимать элементы функционального программирования в Python и разницу между присваиванием и эквиваленцией.
Как создаются переменные
Все данные в компьютере хранятся в виде последовательности единиц и нулей, записанных в ячейках памяти. У каждой ячейки есть свой уникальный адрес, и ссылка на эту ячейку обозначается в программном коде в виде названия переменной.
Чтобы компьютер выделил ячейку памяти, в которую можно записать значения, необходимо создать переменную с помощью оператора присваивания (присвоения).
В коде в общем виде конструкция создания переменной или обновления значения существующей переменной выглядит так:
<имя_переменной> = <выражение>
Важно отметить, что выражение, записанное справа от оператора присваивания, сначала вычисляется. В переменную (и, соответственно, в память) записывается лишь конечный результат вычисления значения выражения.
Таким образом, знак "=" - это оператор присваивания, который используется с конкретной целью либо создания новой переменной, либо обновления значения в существующей. Оператор присваивания берёт конечный результат выражения, записанного справа, и помещает в ячейки памяти, с которыми связана переменная, записанная слева.
Обновление значения переменной
Когда переменная используется в выражениях, она при вычислениях конечного результата заменяется на значение, которое хранится в памяти.
Так как оператор присваивания выполняется после замены переменных на значения и вычисления конечного значения выражения, программист может обновлять значения переменных, ориентируясь на то, что хранится в них.
Выражение a = a * 3 в Python можно записать в короткой форме a *= 3. Такие короткие формы имеются для всех основных арифметических операторов:
Разница операторов присваивания и эквиваленции
Теперь, когда Вы знаете об операторе присваивания, Вы не должны делать такую ошибку:
Вы же в условии хотите сравнить "равна ли переменная 'а' переменной 'b'". Так почему Вы используете оператор присваивания?
Вся разница:
- "=" - создание и обновление значения переменной
- "==" - сравнение, равны ли элементы (логическая эквиваленция)
Оператор вызова функции
Как известно, функция - это фрагмент программного кода, имеющий собственное имя. В Python функции представлены в виде объектов, которые, как и любые другие объекты, могут быть записаны в переменные с помощью оператора присваивания.
Названия функций - это и есть переменные, в которых хранятся подпрограммы. Следовательно, с названиями функций можно выполнять все те же действия, которые можно выполнить с любой другой переменной.
В то же время, для функций есть уникальный оператор вызова функций, который обозначается как "( )". Именно скобки запускают функцию на выполнение, передавая ей в качестве аргументов записанные внутри значения. Без скобок мы работаем с функцией как с простой переменной.
Если мы вызываем функцию, мы пишем оператор вызова сразу же после её названия.
Подробнее о том, как работать с функцией, пользуясь тем, что она является объектом, я написал в заметку о функциональной парадигме.
Дополнение
Алгоритм - это набор последовательный инструкций (команд), которые выполняет интерпретатор. В Python каждая строка - это отдельная инструкция. А какие инструкции бывают? Мне кажется, что все инструкции можно разделить на 2 вида:
- Использование оператора присваивания - для сохранения значений в памяти компьютера.
- Вызов функции - для того, чтобы подпрограммы что-то сделали.
Ориентируясь на это, Вы можете избегать создания бесполезных строк. Например:
Программа выполняется, но что делает строчка "a + 4"? В этой инструкции нет ни функции, ни оператора присваивания - следовательно результат выражения нигде не используется и не сохраняется в переменную. Влияет ли эта строчка на результат работы программы? Нет, не влияет. Эту строчку надо либо доработать, добавив оператор присвоения или вызвав функции, либо удалить её.