2011-08-11 5 views
5

Esta es una sección de Dive Into Python 3 respecto a cadenas:¿Los objetos de bytes de Python también se conocen como cadenas?

En Python 3, todas las cadenas son secuencias de caracteres Unicode. No existe una cadena de Python codificada en utf-8, o una cadena de Python codificada como CP-1252. "¿Es esta cadena utf-8?" Es una pregunta inválida. utf-8 es una forma de codificar caracteres como una secuencia de bytes. Si desea tomar una cadena y convertirla en una secuencia de bytes en una determinada codificación de caracteres, Python 3 puede ayudarlo con eso. Si desea tomar una secuencia de bytes y convertirla en una cadena, Python 3 también puede ayudarlo. Bytes no son personajes; los bytes son bytes Los personajes son una abstracción. Una cadena es una secuencia de esas abstracciones.

El día de hoy he utilizado el módulo de hashlib y leer el texto de ayuda para md5 que dice:

devolver un nuevo objeto hash MD5; opcionalmente inicializado con una cadena.

Bueno, no acepta una string - Acepta un objeto bytes.

Quizás estoy leyendo demasiado en esto, pero ¿no tendría más sentido si el texto de ayuda indicara que se debe usar un bytes en su lugar? ¿O hay personas que usan el mismo nombre para cadenas y bytes?

+0

¿Qué versión de los documentos de Python estaba mirando? 2.7 no hace la distinción 3k necesaria (obviamente jeje), pero los 3k documentos que tengo sí lo hacen. (Por cierto, un fan de LOK? :)) – Skurmedel

+0

No recuerdo la versión exacta ahora, podría ser apilada incluso ... 3 algo. LOK rock;) – roqvist

Respuesta

6

En Python 2 y 3, str se usó tanto para cadenas de caracteres como para bytes. De hecho, hasta Python 2.6, ni siquiera había un tipo bytes (y en 2.6 y 2.7, bytes is str).

Las incoherencias mencionadas en la documentación de hashlib son un artefacto de esta historia.

+0

Veo, esto tiene sentido. Gracias – roqvist

5

Probablemente la ayuda sobra de Python2.

Este es uno de los cambios más, provenientes de 2 a 3

 
    Python2   Python3 

    str    bytes 
    unicode   str 

Python2.6 + comienza a prepararse para el cambio al hacer bytes sinónimo de str

debe informar a los desarrolladores (A menos que ya se haya solucionado, solo tengo 3.1.2 aquí). Creo que la redacción probablemente debería mejorarse

+0

Gracias, voy a ver en reportarlo – roqvist

Cuestiones relacionadas