Что такое литералы в Python

  • Опубликовано:
  • Теги: python

Вопрос

Через форму сайта пришел вопрос от читателя:
... Python начал изучать недавно и наткнулся на термин "литерал" который мне не понятен, хоть убейте не пойму что и как к нему относится, прошу объясните.
На мою просьбу описать контекст читатель написал:
...в книге под термином литерал подразумевается выражение, создающее объект, который иногда также называется константой. Следует иметь в виду, что термин "константа" не означает объекты и переменные, которые никогда не изменяются.

То есть это вообще как, литерал подразумевает выражение, создающее объект, но в тоже время литерал может быть константой, но которая не означает объекты...

Получается к примеру: 4+5 = 9 -это выражение создающее объект а именно 9 ? Но литералом может быть и строка, тогда как создается здесь литерал, конкатенацией?? Дальше хуже, к спискам я вообще не понимаю тогда как.

Это определение выше одно из первых с которым я столкнулся, потом читал дальше и еще один пример: В таблице 5.1 показано, как выглядят числа различных типов в языке Python в тексте программы(то есть в виде литералов) и там идут целые числа, вещественные и т.д. но если это все должно быть результатом выражения, то почему в таблице это просто 9999999999, 1234, или же 1.23.

Ответ

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

Если простыми словами, то литерал в Python – это простейший способ создания объектов. Например:
1 # числовой литерал
"I'am a string" # строковый литерал
[1, 2, 4, 6] # литерал списка
{'a': 1, 'b': 2, 'c': 3} # литерал словаря
Но, поскольку такая запись не имеет смысла, так как с созданным объектом нужно что-то сделать или чему-то присвоить, то обычно все примеры в литературе пишутся в виде:
a = 1
На этом месте у новичка уже глаза разбегаются – где здесь что. Так вот, слева – переменная, справа – литерал.

Далее, по письму:
... под термином литерал подразумевается выражение, создающее объект...
Не верно. В Python выражение и литерал – две большие разницы, как говорят в Одессе. Литерал – это форма записи (см. примеры выше).
Получается к примеру: 4+5 = 9 -это выражение создающее объект а именно 9…
То же самое, 4 + 5 – это выражение, не литерал.

Таким образом, чтобы как-то называть общим названием такие простейшие записи, как 4.5, 'my string', [1, 'abc', 45], применяют слово литерал.

В большинстве случаев смысл этого термина не играет большой роли для понимания сути, часто его можно просто игнорировать. Возможно, он ближе к области лингвистики. Например, нужно понимать разницу, когда кто-то скажет: "А давайте-ка создадим этот словарь не с помощью литерала, а с помощью builtin". Разница будет выглядеть так:
mydict = dict(a=1, b=2, c=3)
mydict = {'a': 1, 'c': 3, 'b': 2}
В первом случае мы создаем словарь с помощью встроенной функции dict(), а во втором – с помощью литерала словаря.

Как сказал кто-то из великих (автор цитаты - Н. И. Лобачевский, спасибо, подсказали в комментариях), что сама
... Математика – не наука, а язык для выражения научных идей.
Так что, да – к терминам надо относиться с уважением.

И спасибо посетителю за вопрос!