Si miras los documentos bytes
, te indica bytearray
:
bytearray ([fuente [, codificación [, errores]]])
Devuelve una nueva matriz 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 secuencias mutables, descritos en Tipos de secuencia mutable, así como la mayoría de los métodos que tiene el tipo de bytes, vea Bytes y Métodos de matriz de bytes.
El parámetro fuente opcional se puede usar para inicializar la matriz de diferentes maneras:
Si es una cadena, también debe proporcionar los parámetros de codificación (y opcionalmente, errores); bytearray () luego convierte la cadena a bytes usando str.encode ().
Si es un entero, la matriz tendrá ese tamaño y se inicializará con bytes nulos.
Si es un objeto conforme con la interfaz del búfer, se usará un búfer de solo lectura del objeto para inicializar la matriz de bytes.
Si es un iterable, debe ser un iterable de enteros en el rango 0 <= x <256, que se utilizan como el contenido inicial de la matriz.
Sin un argumento, se crea una matriz de tamaño 0.
Por bytes
lo tanto, puede hacer mucho más que solo codificar una cadena. Es Pythonic que le permitiría llamar al constructor con cualquier tipo de parámetro fuente que tenga sentido.
Para codificar una cadena, creo que some_string.encode(encoding)
es más Pythonic que usar el constructor, porque es el más autodocumentado: "tomar esta cadena y codificarla con esta codificación" es más claro que bytes(some_string, encoding)
: no hay un verbo explícito cuando se usa el constructor.
Editar: Revisé la fuente de Python. Si pasa una cadena unicode a bytes
CPython, llama a PyUnicode_AsEncodedString , que es la implementación de encode
; así que solo te estás saltando un nivel de indirección si te llamas a encode
ti mismo.
Además, vea el comentario de Serdalis: unicode_string.encode(encoding)
también es más pitónico porque es inverso byte_string.decode(encoding)
y la simetría es agradable.