Python: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
print('Father!')
print('Father!')Такой способ вполне подойдет, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придется копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придется искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, ее можно сохранить в переменной и распечатывать ее содержимое:
greeting = 'Father!'
print(greeting)
print(greeting)Результат:
Father!
Father!
Переменная представляет собой имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting и записали в нее строку 'Father!'.
greeting = 'Father!'
Переменная Значение
┌──────────┐ ┌──────────┐
│ greeting │ ──→ │ 'Father!'│
└──────────┘ └──────────┘Строчка greeting = 'Father!' читается так: "возьми значение 'Father!' и присвой его переменной с именем greeting". Знак = здесь является оператором присваивания, а не обозначением равенства как в математике. Он кладет значение в переменную.
Когда мы пишем print(greeting), интерпретатор подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка 'Father!'.
print(greeting)
|
v
print('Father!')Имена переменных
Имена переменных придумывает сам программист. В Python можно использовать:
- Латинские буквы (a-z, A-Z),
- цифры (но не в начале),
- нижнее подчеркивание _.
Примеры допустимых имен: greeting, name1, hello_world. Python различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING являются тремя разными переменными.
Переменные и литералы
В коде важно различать, где мы используем переменную, а где записываем значение напрямую. Это особенно заметно на примере с print():
greeting = 'Mother!'
print(greeting) # => Mother!
print('greeting') # => greetingВ первом случае используется переменная greeting, и программа подставляет ее значение. Во втором случае 'greeting' заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Несмотря на то, что мы видим слово greeting в обоих случаях, с точки зрения интерпретатора это абсолютно разные вещи.
Литералы представляют собой данные, записанные явно (например, 'Hello', 42, 3.14). Идентификаторы являются именами переменных и функций (например, greeting, print), которые указывают на уже существующие значения или команды.
Порядок использования
Переменную нужно сначала создать (присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до ее создания, программа выдаст ошибку:
print(name) # Ошибка: переменная еще не определена
# NameError: name 'name' is not defined
name = 'Alice'Такая ошибка называется "обращение к необъявленной переменной". Ее достаточно легко исправить, потому что текст ошибки однозначно говорит о том, какая переменная используется до объявления.
А в правильном порядке все работает:
name = 'Alice'
print(name) # => AliceНесколько переменных в программе
В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:
greeting1 = 'Father!'
print(greeting1)
print(greeting1)
greeting2 = 'Mother!'
print(greeting2)
print(greeting2)Как понять, когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнемся с функциями и условными конструкциями.
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно важно это в больших программах, где переменных может быть десятки и сотни тысяч.
Задание
URL сайта используется в программе в нескольких местах. Чтобы не дублировать строку, сохраним ее в переменную.
Создайте переменную url со значением https://hexlet.io и выведите ее на экран дважды.
Полезное
Python: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
print('Father!')
print('Father!')Такой способ вполне подойдет, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придется копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придется искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, ее можно сохранить в переменной и распечатывать ее содержимое:
greeting = 'Father!'
print(greeting)
print(greeting)Результат:
Father!
Father!
Переменная представляет собой имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting и записали в нее строку 'Father!'.
greeting = 'Father!'
Переменная Значение
┌──────────┐ ┌──────────┐
│ greeting │ ──→ │ 'Father!'│
└──────────┘ └──────────┘Строчка greeting = 'Father!' читается так: "возьми значение 'Father!' и присвой его переменной с именем greeting". Знак = здесь является оператором присваивания, а не обозначением равенства как в математике. Он кладет значение в переменную.
Когда мы пишем print(greeting), интерпретатор подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка 'Father!'.
print(greeting)
|
v
print('Father!')Имена переменных
Имена переменных придумывает сам программист. В Python можно использовать:
- Латинские буквы (a-z, A-Z),
- цифры (но не в начале),
- нижнее подчеркивание _.
Примеры допустимых имен: greeting, name1, hello_world. Python различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING являются тремя разными переменными.
Переменные и литералы
В коде важно различать, где мы используем переменную, а где записываем значение напрямую. Это особенно заметно на примере с print():
greeting = 'Mother!'
print(greeting) # => Mother!
print('greeting') # => greetingВ первом случае используется переменная greeting, и программа подставляет ее значение. Во втором случае 'greeting' заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Несмотря на то, что мы видим слово greeting в обоих случаях, с точки зрения интерпретатора это абсолютно разные вещи.
Литералы представляют собой данные, записанные явно (например, 'Hello', 42, 3.14). Идентификаторы являются именами переменных и функций (например, greeting, print), которые указывают на уже существующие значения или команды.
Порядок использования
Переменную нужно сначала создать (присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до ее создания, программа выдаст ошибку:
print(name) # Ошибка: переменная еще не определена
# NameError: name 'name' is not defined
name = 'Alice'Такая ошибка называется "обращение к необъявленной переменной". Ее достаточно легко исправить, потому что текст ошибки однозначно говорит о том, какая переменная используется до объявления.
А в правильном порядке все работает:
name = 'Alice'
print(name) # => AliceНесколько переменных в программе
В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:
greeting1 = 'Father!'
print(greeting1)
print(greeting1)
greeting2 = 'Mother!'
print(greeting2)
print(greeting2)Как понять, когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнемся с функциями и условными конструкциями.
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно важно это в больших программах, где переменных может быть десятки и сотни тысяч.
Задание
URL сайта используется в программе в нескольких местах. Чтобы не дублировать строку, сохраним ее в переменную.
Создайте переменную url со значением https://hexlet.io и выведите ее на экран дважды.
Полезное
Ваше упражнение проверяется по этим тестам
import importlib
def test(capsys):
expected = "https://hexlet.io\nhttps://hexlet.io"
expect_output(capsys, expected)
def expect_output(capsys, expected):
importlib.import_module('solution')
out, _err = capsys.readouterr()
actual = out.strip('\n')
with capsys.disabled():
print('\n')
print(out)
assert actual == expectedРешение учителя откроется через:
20:00
