Em um código-fonte python que encontrei, vi um pequeno b antes de uma string como em:
b"abcdef"
Eu sei sobre o u
prefixo que significa uma string Unicode e o r
prefixo para um literal de string bruto.
O que b
significa e em que tipo de código-fonte é útil, pois parece ser exatamente como uma string simples sem qualquer prefixo?
python
syntax
python-3.x
byte
Kriss
fonte
fonte
Respostas:
Este é o
bytes
literal Python3 . Este prefixo está ausente no Python 2.5 e anteriores (é equivalente a uma string simples de 2.x, enquanto uma string simples de 3.x é equivalente a um literal comu
prefixo em 2.x). Em Python 2.6+ é equivalente a uma cadeia simples, para compatibilidade com 3.x .fonte
O
b
prefixo significa umbytes
literal de string .Se você vê-lo usado no código-fonte do Python 3, a expressão cria um
bytes
objeto , não um objeto Unicodestr
regular . Se você vê-lo ecoado em seu shell Python ou como parte de uma lista, dict ou outro conteúdo de contêiner, então você vê umbytes
objeto representado usando esta notação.bytes
os objetos contêm basicamente uma sequência de inteiros no intervalo de 0 a 255, mas quando representados, o Python exibe esses bytes como pontos de código ASCII para facilitar a leitura de seu conteúdo. Quaisquer bytes fora da impressão gama de caracteres ASCII são mostrados como sequências de escape (por exemplo\n
,\x82
, etc.). Inversamente, você pode usar caracteres ASCII e sequências de escape para definir valores de byte; para valores ASCII, seu valor numérico é usado (por exemplo,b'A'
==b'\x41'
)Como um
bytes
objeto consiste em uma sequência de inteiros, você pode construir umbytes
objeto a partir de qualquer outra sequência de inteiros com valores no intervalo 0-255, como uma lista:e a indexação retorna os inteiros (mas o fatiamento produz um novo
bytes
valor; para o exemplo acima,value[0]
fornece72
, masvalue[:1]
éb'H'
como 72 é o ponto de código ASCII para a letra maiúscula H ).bytes
modelar dados binários , incluindo texto codificado . Se o seubytes
valor contiver texto, você precisa primeiro decodificá-lo, usando o codec correto. Se os dados estiverem codificados como UTF-8, por exemplo, você pode obter umstr
valor Unicode com:Por outro lado, para ir do texto em um
str
objeto parabytes
você precisa codificar . Você precisa decidir sobre uma codificação a ser usada; o padrão é usar UTF-8, mas o que você precisa depende muito do seu caso de uso:Você também pode usar o construtor
bytes(strvalue, encoding)
para fazer o mesmo.Os métodos de decodificação e codificação usam um argumento extra para especificar como os erros devem ser tratados .
O Python 2, versões 2.6 e 2.7 também oferece suporte à criação de literais de string usando
b'..'
a sintaxe de literal de string para facilitar o código que funciona em Python 2 e 3.bytes
os objetos são imutáveis, assim como asstr
strings. Use umbytearray()
objeto se precisar ter um valor de bytes mutável.fonte