Как работают "магические линии" в python при определении кодировки в файле python?

В начале файла python (первая строка) иногда я читаю

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

и иногда я читаю

# encoding: utf-8

Обе строки, похоже, делают одно и то же: указав utf8 как кодировку для всего текста, помещенного в файл.

У меня есть вопросы:

  • Почему это даже работает? Я думал, что интерпретатор игнорирует все после #, потому что он вызывает комментарий.
  • В чем разница между двумя строками выше? Интерпретатор просто игнорирует -*-?

Ответ 1

Две формы эквивалентны. Версия -*- - это особый комментарий, который понимает Emacs. Подробнее см. PEP 263.

Если комментарий, подобный в любой из этих форм, является одной из первых двух строк файла, интерпретатор будет использовать указанную кодировку для чтения файла.

Ответ 2

Это работает, потому что реализация ищет его, в этом нет ничего волшебного. Нет никакой разницы, все возможные варианты определяются PEP 263 (единственное отличие в том, что первый из них совместим с Emacs).