Aparentemente, la siguiente es la sintaxis válida:
my_string = b'The string'
Me gustaría saber:
- ¿Qué significa este
bpersonaje delante de la cadena? - ¿Cuáles son los efectos de usarlo?
- ¿Cuáles son las situaciones apropiadas para usarlo?
Encontré una pregunta relacionada aquí en SO, pero esa pregunta es sobre PHP y dice que bse usa para indicar que la cadena es binaria, a diferencia de Unicode, que era necesaria para que el código fuera compatible con la versión de PHP <6 , al migrar a PHP 6. No creo que esto se aplique a Python.
Encontré esta documentación en el sitio de Python sobre el uso de un ucarácter en la misma sintaxis para especificar una cadena como Unicode. Desafortunadamente, no menciona el carácter b en ninguna parte de ese documento.
Además, solo por curiosidad, ¿hay más símbolos que el by uque hacen otras cosas?

unicode_literalsdesde__future__, esto "revertirá" el comportamiento de esta cadena en particular (en Python 2.x)Python 3.x hace una clara distinción entre los tipos:
str='...'literales = una secuencia de caracteres Unicode (UTF-16 o UTF-32, dependiendo de cómo se compiló Python)bytes=b'...'literales = una secuencia de octetos (enteros entre 0 y 255)Si está familiarizado con Java o C #, piense en
strasStringybytesasbyte[]. Si está familiarizado con SQL, piense enstrasNVARCHARybytesasBINARYorBLOB. Si está familiarizado con el registro de Windows, piensestrcomoREG_SZybytescomoREG_BINARY. Si estás familiarizado con C (++), entonces olvida todo lo que has aprendidochary las cadenas, porque UN CARÁCTER NO ES UN BYTE . Esa idea es obsoleta desde hace mucho tiempo.Usas
strcuando quieres representar texto.Se usa
bytescuando desea representar datos binarios de bajo nivel como estructuras.Puede codificar a
stra unbytesobjeto.Y puedes decodificar a
bytesen astr.Pero no puedes mezclar libremente los dos tipos.
La
b'...'notación es algo confusa ya que permite que los bytes 0x01-0x7F se especifiquen con caracteres ASCII en lugar de números hexadecimales.Pero debo enfatizar, un personaje no es un byte .
En Python 2.x
Las versiones anteriores a 3.0 de Python carecían de este tipo de distinción entre texto y datos binarios. En cambio, había:
unicode=u'...'literales = secuencia de caracteres Unicode = 3.xstrstr='...'literales = secuencias de bytes / caracteres confundidosstruct.packsalida.Para facilitar la transición de 2.x a 3.x, la
b'...'sintaxis literal se hizo retroceder a Python 2.6, para permitir distinguir cadenas binarias (que deberían estarbytesen 3.x) de cadenas de texto (que deberían estarstren 3 .X). Elbprefijo no hace nada en 2.x, pero le dice al2to3script que no lo convierta a una cadena Unicode en 3.x.Entonces sí, los
b'...'literales en Python tienen el mismo propósito que en PHP.El
rprefijo crea una cadena sin formato (p. Ej.,r'\t'Es una barra invertida + entlugar de una pestaña), y las comillas triples'''...'''o"""..."""permiten literales de cadena de varias líneas.fuente
'A' == b'A' --> Falsecheque realmente lo deja claro. El resto es excelente, pero hasta ese momento no había entendido correctamente que una cadena de bytes no'שלום עולם' == 'hello world'La b denota una cadena de bytes.
Los bytes son los datos reales. Las cadenas son una abstracción.
Si tuviera un objeto de cadena de caracteres múltiples y tomó un solo carácter, sería una cadena y podría tener más de 1 byte de tamaño dependiendo de la codificación.
Si toma 1 byte con una cadena de bytes, obtendría un solo valor de 8 bits de 0-255 y podría no representar un carácter completo si esos caracteres debido a la codificación eran> 1 byte.
TBH Usaría cadenas a menos que tuviera alguna razón específica de bajo nivel para usar bytes.
fuente
Desde el lado del servidor, si enviamos alguna respuesta, se enviará en forma de tipo de byte, por lo que aparecerá en el cliente como
b'Response from server'Para deshacerse de
b'....'simplemente use el siguiente código:Archivo del servidor:
Archivo de cliente:
entonces imprimirá
Response from serverfuente
Aquí hay un ejemplo donde la ausencia de
barrojaría unaTypeErrorexcepción en Python 3.xAgregar un
bprefijo solucionaría el problema.fuente
Lo convierte en un
bytesliteral (ostren 2.x), y es válido para 2.6+.El
rprefijo hace que las barras invertidas sean "no interpretadas" (no se ignoran, y la diferencia sí importa).fuente
str2.x de cualquier manera, por lo que se podría decir que se ignora. La distinción es importante cuando importaunicode_literalsdesde el__future__módulo.Además de lo que otros han dicho, tenga en cuenta que un solo carácter en Unicode puede constar de múltiples bytes .
La forma en que funciona Unicode es que tomó el antiguo formato ASCII (código de 7 bits que se parece a 0xxx xxxx) y agregó secuencias de múltiples bytes donde todos los bytes comienzan con 1 (1xxx xxxx) para representar caracteres más allá de ASCII para que Unicode esté al revés -compatible con ASCII.
fuente
Puedes usar JSON para convertirlo a diccionario
{"valor clave"}
MATRAZ:
Este es un ejemplo de matraz. Ejecute esto en la línea de terminal:
En matraz / routes.py
{'valor clave'}
fuente