Как работают "магические линии" в python при определении кодировки в файле python?
В начале файла python (первая строка) иногда я читаю
# -*- coding: utf-8 -*-
и иногда я читаю
# encoding: utf-8
Обе строки, похоже, делают одно и то же: указав utf8 как кодировку для всего текста, помещенного в файл.
У меня есть вопросы:
- Почему это даже работает? Я думал, что интерпретатор игнорирует все после
#
, потому что он вызывает комментарий.
- В чем разница между двумя строками выше? Интерпретатор просто игнорирует
-*-
?
Ответы
Ответ 1
Две формы эквивалентны. Версия -*-
- это особый комментарий, который понимает Emacs. Подробнее см. PEP 263.
Если комментарий, подобный в любой из этих форм, является одной из первых двух строк файла, интерпретатор будет использовать указанную кодировку для чтения файла.
Ответ 2
Это работает, потому что реализация ищет его, в этом нет ничего волшебного. Нет никакой разницы, все возможные варианты определяются PEP 263 (единственное отличие в том, что первый из них совместим с Emacs).