Подтвердить что ты не робот

Is '# - * - code: utf-8 - * -' также комментарий в Python?

Как мы используем # для вставки комментариев в Python, как это делает Python:

# -*- coding: utf-8 -*-

по-другому?

4b9b3361

Ответ 1

Да, это также комментарий. И содержание этого комментария имеет особое значение, если оно расположено в верхней части файла, в первых двух строках.

В Документация объявлений о кодировании:

Если комментарий в первой или второй строке Python script соответствует регулярному выражению coding[=:]\s*([-\w.]+), этот комментарий обрабатывается как объявление кодировки; первая группа этого выражения называет кодировку файла исходного кода. Объявление кодировки должно появляться в отдельной строке. Если это вторая строка, первая строка также должна содержать строку комментария.

Обратите внимание, что не имеет значения, какой кодек следует использовать для чтения файла, насколько это касается комментариев. Python обычно игнорирует все после токена #, а во всех принятых кодеках исходного кода #, объявления кодирования и символы разделителя строк кодируются точно так же, как и все надмножества ASCII. Таким образом, весь парсер должен сделать, это прочитать одну строку, отсканировать специальный текст в комментарии, прочитать другой, если необходимо, просмотреть комментарий, а затем настроить анализатор на чтение данных в соответствии с данным кодеком.

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

Ответ 2

См. объявления кодирования в Справочном руководстве Python:

Если комментарий в первой или второй строке Python script соответствует регулярному выражению coding[=:]\s*([-\w.]+), этот комментарий обрабатывается как объявление кодировки; первая группа этого выражения называет кодировку файла исходного кода.

(Подчеркните мой)

Так что да, это комментарий, специальный. Особенность заключается в том, что синтаксический анализатор будет пытаться действовать и не игнорировать его, как это делается для комментариев не в первой или второй строке. Возьмем, например, незарегистрированное объявление кодировки в файле образца decl.py:

# # -*- coding: unknown-encoding -*-
print("foo")

Если вы попытаетесь запустить это, Python попытается обработать его, сбой и жалобы:

python decl.py 
  File "decl.py", line 1
SyntaxError: encoding problem: unknown-encoding