¿Qué significa el prefijo ab antes de una cadena de Python?

Resuelto kriss asked hace 14 años • 2 respuestas

En un código fuente de Python con el que me topé, vi una pequeña b antes de una cadena como en:

b"abcdef"

Conozco el uprefijo que significa una cadena Unicode y el rprefijo de una cadena literal sin formato.

¿Qué significa by en qué tipo de código fuente es útil, ya que parece ser exactamente como una cadena simple sin ningún prefijo?

kriss avatar Apr 07 '10 20:04 kriss
Aceptado

El bprefijo significa una bytescadena literal .

Si ve que se usa en el código fuente de Python 3, la expresión crea un bytesobjeto , no un objeto Unicodestr normal . Si ve que se repite en su shell de Python o como parte de una lista, dictado u otro contenido de contenedor, entonces verá un bytesobjeto representado usando esta notación.

bytesLos objetos básicamente contienen una secuencia de números enteros en el rango de 0 a 255, pero cuando se representan, Python muestra estos bytes como puntos de código ASCII para facilitar la lectura de su contenido. Cualquier byte fuera del rango imprimible de caracteres ASCII se muestra como secuencias de escape (p. ej \n. \x82, etc.). A la inversa, puede utilizar caracteres ASCII y secuencias de escape para definir valores de bytes; para valores ASCII se utiliza su valor numérico (por ejemplo, b'A'== b'\x41')

Debido a que un bytesobjeto consta de una secuencia de números enteros, puedes construir un bytesobjeto a partir de cualquier otra secuencia de números enteros con valores en el rango de 0 a 255, como una lista:

bytes([72, 101, 108, 108, 111])

y la indexación le devuelve los números enteros (pero la división produce un nuevo bytesvalor; para el ejemplo anterior, value[0]le da 72, pero value[:1]es b'H'como 72 es el punto del código ASCII para la letra mayúscula H ).

bytesmodelar datos binarios , incluido el texto codificado . Si su bytesvalor contiene texto, primero debe decodificarlo utilizando el códec correcto. Si los datos están codificados como UTF-8, por ejemplo, puedes obtener un strvalor Unicode con:

strvalue = bytesvalue.decode('utf-8')

Por el contrario, para pasar del texto de un strobjeto a bytesnecesita codificar . Debe decidir qué codificación utilizar; el valor predeterminado es usar UTF-8, pero lo que necesitará depende en gran medida de su caso de uso:

bytesvalue = strvalue.encode('utf-8')

También puedes usar el constructor bytes(strvalue, encoding)para hacer lo mismo.

Tanto el método de decodificación como el de codificación toman un argumento adicional para especificar cómo se deben manejar los errores .

Python 2, versiones 2.6 y 2.7, también admiten la creación de literales de cadena utilizando b'..'la sintaxis de literales de cadena, para facilitar el código que funciona tanto en Python 2 como en Python 3.

bytesLos objetos son inmutables, al igual que strlas cadenas. Utilice un bytearray()objeto si necesita tener un valor de bytes mutable.

Martijn Pieters avatar Jun 07 '2014 16:06 Martijn Pieters

Este es bytes el literal Python3 . Este prefijo está ausente en Python 2.5 y versiones anteriores (es equivalente a una cadena simple de 2.x, mientras que una cadena simple de 3.x es equivalente a un literal con uprefijo en 2.x). En Python 2.6+ es equivalente a una cadena simple, por compatibilidad con 3.x.

wRAR avatar Apr 07 '2010 13:04 wRAR