O bprefixo significa um bytesliteral de string .
Se você vê-lo usado no código-fonte do Python 3, a expressão cria um bytesobjeto , 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ê um bytesobjeto representado usando esta notação.
bytesos 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 bytesobjeto consiste em uma sequência de inteiros, você pode construir um bytesobjeto a partir de qualquer outra sequência de inteiros com valores no intervalo 0-255, como uma lista:
bytes([72, 101, 108, 108, 111])
e a indexação retorna os inteiros (mas o fatiamento produz um novo bytesvalor; para o exemplo acima, value[0]fornece 72, mas value[:1]é b'H'como 72 é o ponto de código ASCII para a letra maiúscula H ).
bytesmodelar dados binários , incluindo texto codificado . Se o seu bytesvalor contiver texto, você precisa primeiro decodificá-lo, usando o codec correto. Se os dados estiverem codificados como UTF-8, por exemplo, você pode obter um strvalor Unicode com:
strvalue = bytesvalue.decode('utf-8')
Por outro lado, para ir do texto em um strobjeto para bytesvocê 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:
bytesvalue = strvalue.encode('utf-8')
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.
bytesos objetos são imutáveis, assim como as strstrings. Use um bytearray()objeto se precisar ter um valor de bytes mutável.