codecs bytes python python-3.x string-interpolation f-string

bytes - codecs python 3



¿Hay un literal de cadena de bytes con formato en Python 3.6+? (3)

Desde Python 3.6.2, este formato de porcentaje para bytes funciona:

print(b"Some stuff %a. Some other stuff" % my_byte_or_unicode_string)

Estoy buscando un literal de cadena de bytes con formato. Específicamente, algo equivalente a

name = "Hello" bytes(f"Some format string {name}")

Posiblemente algo como fb"Some format string {name}" .

¿Existe tal cosa?


Este fue uno de los cambios más grandes realizados desde Python 2 a Python3. Manejan unicode y cadenas de manera diferente.

Así es como convertirías a bytes.

string = "some string format" string.encode() print(string)

Así es como se decodificaría una cadena.

string.decode()

Aprecié mejor la diferencia entre el cambio de Python 2 y el cambio de 3 a Unicode a través de esta conferencia de coursera por Charles Severence. Puede ver el video completo de 17 minutos o avanzar rápidamente a algún lugar alrededor de las 10:30 si desea conocer las diferencias entre Python 2 y 3 y cómo manejan los caracteres y, específicamente, los Unicode.

Entiendo que su pregunta real es cómo podría formatear una cadena que tiene tanto cadenas como bytes.

inBytes = b"testing" inString = ''Hello'' type(inString) #This will yield <class ''str''> type(inBytes) #this will yield <class ''bytes''>

Aquí se puede ver que tengo una cadena de una variable y una variable de bytes.

Así es como combinarías un byte y una cadena en una cadena.

formattedString=(inString + '' '' + inBytes.encode())


No. La idea es descartada explícitamente en el PEP :

Por la misma razón por la que no bytes.format() , no puede combinar ''f'' con ''b'' literales de cadena ''b'' . El problema principal es que el __format__() un objeto puede devolver datos Unicode que no son compatibles con una cadena de bytes.

Las cadenas de caracteres binarias primero requerirían una solución para bytes.format() . Esta idea ha sido propuesta en el pasado, más recientemente en PEP 461 . Las discusiones de tal característica usualmente sugieren ya sea

  • agregando un método como __bformat__() para que un objeto pueda controlar cómo se convierte a bytes, o

  • tener bytes.format() no debe ser tan general ni extensible como str.format() .

Ambos se mantendrán como opciones en el futuro, si se desea dicha funcionalidad.