Apartados


-1. Novedades de ``Inmersión en Python 3''

``¿No es de aquí de donde venimos?''
--Pink Floyd, The Wall

-1.1 Alias ``Bajo el nivel del mar''

Posiblemente hayas leído el libro original Dive into Python y puede que hasta lo hayas comprado. (Si es el caso: ¡gracias!) Ya conoces bastante el lenguaje Python. Estás preparado para dar el salto a Python 3. ...Si lo dicho es cierto, sigue leyendo. (Si no es así, tal vez sea mejor que comiences desde el principio en el capítulo [*]).

Python 3 viene con un script denominado 2to3. Aprende a usarlo y a quererlo. El apéndice A es una referencia sobre las cosas que la herramienta 2to3 puede arreglar automáticamente en la conversión del código de la versión 2 a la 3 de python. Puesto que muchas cosas son cambios de sintaxis, una buena forma de comenzar es aprender estas diferencias. Por ejemplo: print ahora es una función...

El caso de estudio del capítulo 15 documenta mi esfuerzo (¡al fin cumplido con éxito!) de convertir una librería real de Python 2 a Python 3. Puede servirte o no. Es un ejemplo complejo de entender puesto que en primer lugar tienes que comprender algo el funcionamiento de la librería, de forma que puedas entender lo que deja de funcionar y como lo arreglé. Mucho de lo que se rompió al pasar a la versión 3 de Python fue por causa de las cadenas. Por cierto, hablando de cadenas...

Cadenas. ¡Uff!. Por dónde podría empezar. Python 2 tenía ``cadenas'' y ``cadenas unicode''. Python 3 tiene ``bytes'' y ``cadenas''. Lo que significa que todas las cadenas ahora son unicode, y si quieres trabajar con un puñado de bytes tienes que usar el tipo bytes.

Python 3 nunca convertirá implícitamente entre cadenas y bytes, por lo que si no estas seguro de lo que contiene una variable en un momento dado, el código seguro que fallará en algún momento. Lee el capítulo 4 sobre cadenas para conocer los detalles.

La división entre ``bytes'' y ``cadenas'' surgirá en diversas partes del libro:

  1. En el capítulo 11 dedicado a los ficheros, aprenderás la diferencia entre leer ficheros en modo binario o en modo texto. La lectura (y escritura) de ficheros en modo texto requiere que se utilice el parámetro encoding. Existen métodos que cuentan los caracteres de un fichero y métodos que cuentan bytes. Si el código asume que un carácter es igual a un byte, no funcionará cuando el fichero contenga caracteres multibyte-1.1.

  2. En el capítulo 14 dedicado a los servicios web http, se muestra el módulo httplib2 que lee cabeceras y datos de HTTP. Las cabeceras se obtienen como cadenas, pero el contenido del cuerpo se obtiene como bytes.

  3. En el capítulo 13 aprenderás el motivo por el que el módulo pickle de Python 3 define un formato de datos nuevo que es incompatible con Python 2 (Pista: Se debe a los bytes y cadenas). También afecta al módulo JSON, que no es capaz de manejar el tipo bytes. Te enseñaré como salvar este escollo.

  4. En el capítulo 15 sobre la conversión de la librería chardet a Python 3 se verá que la mayor parte de los problemas de conversión provienen de los bytes y cadenas.

Incluso aunque no tengas interés en Unicode, ¡que tendrás!, querrás leer sobre el formateo de cadenas en Python 3 en el capítulo 4, que es completamente diferente a Python 2.

Los iteradores están en todas partes en Python 3, y ahora los entiendo mucho mejor que hace cinco años cuando escribí ``Inmersión en Python''. Debes comprenderlos tú también, puesto que muchas funciones que anteriormente retornaban listas ahora, en Python 3, devuelven iteradores. Como mínimo, deberías leer la segunda parte del capítulo 7 dedicado a los iteradores y la segunda parte del capítulo 8 sobre el uso avanzado de los iteradores.

Por petición popular, he añadido el apéndice B sobre nombres de método especiales que guarda cierta similitud con el apartado similar de la documentación oficial de Python 3 pero con cierta ironía.

Cuando estaba escribiendo ``Inmersión en Python'' todas las librerías de XML disponibles eran bastante malas. Entonces Fedrik Lundh escribió ElementTree, que es todo lo contrario a lo existente anteriormente. Los dioses de Python, actuando inteligentemente, incorporaron ElementTree a la librería estándar. Ahora esta librería es el fundamento del capítulo 12 sobre XML. Los viejos métodos para recorrer XML están aún disponibles, pero deberías evitarlos, ¡apestan!

Algo que es también nuevo --no en el lenguaje, pero sí en la comunidad-- es la creación de repositorios de código como el índice de paquetes de python (PyPI). Python dispone de utilidades para empaquetar el código en formatos estándares y distribuirlos en PyPI. Lee el capítulo 16 sobre cómo empaquetar librerías en Python.

José Miguel González Aguilera 2016-08-18