Я думал, что переменная была просто заменой того кода, который я не хотел вводить снова.
Это описание ссылочная прозрачность в терминах непрофессионала.
Работает, только если вы имеете дело с чистыми функциями , то есть функциями, которые не имеют побочных эффектов. Например,
def double(x):
return 2 * x
a = double(5)
b = a + a
эквивалентно
b = double(5) + double(5)
Но в Python функции, как правило, не являются чистыми. Назначение работает, оценивая правую часть один раз и привязывая ее к имени на левой стороне. Использование имени относится только к значению вычисленного выражения, но не повторяет побочных эффектов , которые оно могло бы иметь.
Так что если вместо этого,
def double(x):
print('doubling', x)
return 2 * x
, тогда
a = double(5)
b = a + a
больше не эквивалентно
b = double(5) + double(5)
b
- все равно 20 в обоих случаях, но первый случай печатает doubling 5
один раз, второй случай печатает его дважды.
open('bacon.txt', 'w')
имеет побочный эффект открытия файла и его усечения, и оценивается в значение , которое дескриптор файла.
В вашем примере
open('bacon.txt', 'w').write('Bacon is not a vegetable.')
open('bacon.txt', 'w').close()
эквивалентен:
f = open('bacon.txt', 'w')
f.write('Bacon is not a vegetable.')
g = open('bacon.txt', 'w')
g.close()
Это означает, что файл открывается и усекается один раз, тогда что-то написано к нему. Затем он снова открывается и усекается, теряя то, что вы написали раньше.