Se você olhar para os documentos bytes
, ele indica bytearray
:
bytearray ([origem [, codificação [, erros]]])
Retorne uma nova matriz de bytes. O tipo bytearray é uma sequência mutável de números inteiros no intervalo 0 <= x <256. Possui a maioria dos métodos usuais de sequências mutáveis, descritos em Tipos de sequências mutáveis, bem como a maioria dos métodos que o tipo de bytes possui, consulte Bytes e Métodos de matriz de bytes.
O parâmetro de origem opcional pode ser usado para inicializar a matriz de algumas maneiras diferentes:
Se for uma sequência, você também deve fornecer os parâmetros de codificação (e, opcionalmente, erros); bytearray () converte a string em bytes usando str.encode ().
Se for um número inteiro, a matriz terá esse tamanho e será inicializada com bytes nulos.
Se for um objeto em conformidade com a interface do buffer, um buffer somente leitura do objeto será usado para inicializar a matriz de bytes.
Se for iterável, deve ser iterável de números inteiros no intervalo 0 <= x <256, que são usados como o conteúdo inicial da matriz.
Sem um argumento, uma matriz de tamanho 0 é criada.
Portanto, bytes
pode fazer muito mais do que apenas codificar uma string. É Pythonic que permite chamar o construtor com qualquer tipo de parâmetro de origem que faça sentido.
Para codificar uma string, acho que some_string.encode(encoding)
é mais pitonico do que usar o construtor, porque é o mais documentado - "pegue essa string e codifique-a com essa codificação" é mais claro que bytes(some_string, encoding)
- não há verbo explícito quando você usa o construtor.
Edit: Eu verifiquei a fonte Python. Se você passar uma string unicode para bytes
usar o CPython, ela chamará PyUnicode_AsEncodedString , que é a implementação de encode
; então você está pulando um nível de indireção se você se chamar encode
.
Veja também o comentário de Serdalis - unicode_string.encode(encoding)
também é mais pitônico, porque é inverso byte_string.decode(encoding)
e simétrico.