En un código fuente de Python con el que me topé, he visto una b pequeña antes de una cadena como en:
b"abcdef"
Sé sobre el u
prefijo que significa una cadena Unicode y el r
prefijo para un literal de cadena sin formato.
¿Qué significa b
y en qué tipo de código fuente es útil, ya que parece ser exactamente como una cadena sin prefijo?
python
syntax
python-3.x
byte
kriss
fuente
fuente
Respuestas:
Este es Python3
bytes
literal . 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 conu
prefijo en 2.x). En Python 2.6+ es equivalente a una cadena sin formato, para la compatibilidad con 3.x .fuente
El
b
prefijo significa unabytes
cadena literal .Si ve que se usa en el código fuente de Python 3, la expresión crea un
bytes
objeto , no un objeto Unicodestr
normal . Si ve que se repite en su shell de Python o como parte de una lista, dict u otro contenido del contenedor, entonces verá unbytes
objeto representado usando esta notación.bytes
Los objetos contienen básicamente una secuencia de números enteros en el rango 0-255, pero cuando se representan, Python muestra estos bytes como puntos de código ASCII para facilitar la lectura de su contenido. Cualquier bytes fuera de la imprimible gama de caracteres ASCII se muestran como secuencias de escape (por ejemplo\n
,\x82
, etc.). A la inversa, puede utilizar tanto caracteres ASCII como secuencias de escape para definir valores de bytes; para valores ASCII se usa su valor numérico (por ejemplo,b'A'
==b'\x41'
)Dado que un
bytes
objeto consta de una secuencia de números enteros, puede construir unbytes
objeto a partir de cualquier otra secuencia de números enteros con valores en el rango 0-255, como una lista:y la indexación le devuelve los enteros (pero la división produce un nuevo
bytes
valor; para el ejemplo anterior,value[0]
le da72
, perovalue[:1]
esb'H'
como 72 es el punto de código ASCII para la letra H mayúscula ).bytes
modelar datos binarios , incluido el texto codificado . Si subytes
valor contiene texto, primero debe decodificarlo con el códec correcto. Si los datos están codificados como UTF-8, por ejemplo, puede obtener unstr
valor Unicode con:Por el contrario, para pasar del texto de un
str
objeto abytes
tener que 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: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, las versiones 2.6 y 2.7 también admiten la creación de literales de cadena utilizando
b'..'
la sintaxis de literal de cadena, para facilitar el código que funciona tanto en Python 2 como en 3.bytes
los objetos son inmutables, al igual que lasstr
cadenas. Utilice unbytearray()
objeto si necesita tener un valor de bytes mutable.fuente