usar '#-*-coding: utf-8-*-' também é um comentário em Python?



python set encoding to utf 8 (2)

Veja as declarações de codificação no Manual de Referência do Python:

Se um comentário na primeira ou segunda linha do script Python corresponder à expressão regular de coding[=:]\s*([-\w.]+) , Esse comentário será processado como uma declaração de codificação; o primeiro grupo dessa expressão nomeia a codificação do arquivo de código-fonte.

(Ênfase minha)

Então, sim, é um comentário especial. É especial porque o analisador tentará agir e não ignorá-lo, como faz para comentários que não estão na primeira ou na segunda linha. Pegue, por exemplo, uma declaração de codificação não registrada em um arquivo de amostra decl.py :

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

Se você tentar executar isso, o Python tentará processá-lo, falhará e reclamará:

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

Como usamos # para inserir comentários no Python, como o Python assume:

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

diferentemente?


Answer #1

Sim, também é um comentário. E o conteúdo desse comentário tem um significado especial se localizado na parte superior do arquivo, nas duas primeiras linhas.

Na documentação das declarações de codificação :

Se um comentário na primeira ou segunda linha do script Python corresponder à expressão regular de coding[=:]\s*([-\w.]+) , Esse comentário será processado como uma declaração de codificação; o primeiro grupo dessa expressão nomeia a codificação do arquivo de código-fonte. A declaração de codificação deve aparecer em uma linha própria. Se for a segunda linha, a primeira linha também deverá ser uma linha somente para comentários.

Observe que não importa qual codec deve ser usado para ler o arquivo, no que diz respeito aos comentários. O Python normalmente ignoraria tudo depois do token # e, em todos os codecs de código-fonte aceitos, os caracteres # , de declaração de codificação e de separador de linha são codificados exatamente da mesma forma que todos os superconjuntos do ASCII. Portanto, tudo o que o analisador precisa fazer é ler uma linha, procurar o texto especial no comentário, ler outro, se necessário, procurar o comentário e configurar o analisador para ler os dados de acordo com o codec fornecido.

Dado que o comentário deve ser o primeiro ou o segundo no arquivo (e se for a segunda linha, a primeira linha também deve ser um comentário), isso é totalmente seguro, pois o codec configurado pode fazer a diferença apenas para linhas de não-comentário de qualquer maneira.





comments