¿Cuál es la mejor manera de convertir una cadena en bytes en Python 3?
Parece que hay dos formas diferentes de convertir una cadena en bytes, como se ve en las respuestas a https://stackoverflow.com/questions/5471158/typeerror-str-does-not-support-the-buffer-interface
¿Cuál de estos métodos sería mejor o más pitónico? ¿O es sólo una cuestión de preferencia personal?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
718
3
Si miras la documentación de
bytes
, te indicabytearray
:Devuelve un nuevo array de bytes. El tipo bytearray es una secuencia mutable de enteros en el rango 0 <= x < 256. Tiene la mayoría de los métodos habituales de las secuencias mutables, descritos en Tipos de Secuencias Mutables, así como la mayoría de los métodos que tiene el tipo bytes, ver Métodos de Bytes y Matrices de Bytes.
El parámetro opcional source puede ser usado para inicializar el array de varias maneras:
Si es un entero, el array tendrá ese tamaño y se inicializará con bytes nulos.__
Si se trata de un objeto que se ajusta a la interfaz del buffer, se utilizará un buffer de sólo lectura del objeto para inicializar el array de bytes.__
Si es un iterable, debe ser un iterable de enteros en el rango 0
Es más fácil de lo que se cree:
La forma absolutamente mejor no es ninguna de las dos, sino la tercera. El primer parámetro de
encode
por defecto'utf-8'
desde Python 3.0. Por lo tanto, la mejor manera esEsto también será más rápido, porque el argumento por defecto no resulta en la cadena
"utf-8"en el código C, sino *
NULL`, ¡que es mucho* más rápido de comprobar!Aquí hay algunos tiempos:
A pesar de la advertencia, los tiempos fueron muy estables después de repetidas ejecuciones - la desviación fue de sólo ~ 2 por ciento.
Usar
encode()
sin un argumento no es compatible con Python 2, ya que en Python 2 la codificación de caracteres por defecto es ASCII.