Kitabı oku: «El gran libro de Python»

Yazı tipi:

El Gran libro de Python

Marco Buttu


Título original de la obra:

Programmare con Phyton – Guida completa

Marco Buttu

© 2014 Edizioni LSWR

Título de la versión en español de la obra:

El Gran libro de Phyton

Traducción: Sònia Llena

Diseño de la cubierta: ENEDENÚ ESTUDI DISSENY GRÀFIC

Primera edición, 2016

© 2016 MARCOMBO, S.A.

www.marcombo.com

Esta edición de El Gran libro de Phyton ha sido publicada en colaboración con Edizioni LSWR.

This edition of Programmare con Phyton – Guida completa by Marco Buttu is published by arrange-ment with Edizioni LSWR.

«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley.»

Sumario

INTRODUCCIÓN

1. LOS FUNDAMENTOS DEL LENGUAJE

Introducción a Python

Introducción al lenguaje

Los elementos del código Python

Arquitectura de un programa Python

La Python Virtual Machine

Etiquetas y objetos

Tipos de errores

Objetos iterables, iteradores y contexto de iteración

Ejercicio final

2. EL CORAZÓN DEL LENGUAJE

Números

Operaciones y funciones integradas utilizables con objetos iterables

Los conjuntos matemáticos

Diccionarios

Las secuencias

Ejercicio final

3. FUNCIONES, GENERADORES Y ARCHIVOS

Definición y llamada de una función

Funciones anónimas

Introspección de funciones

Generadores

Archivos

Ejercicio final

4. MÓDULOS, PAQUETES, ENTORNOS VIRTUALES Y APLICACIONES

Módulos

Espacio de nombres, ámbito y resolución de nombres

Instalación de paquetes

Entornos virtuales

Ejercicio final

5. CLASES Y PROGRAMACIÓN ORIENTADA A OBJETOS

Clases e instancias

Un primer vistazo a la sobrecarga

La composición

La herencia

La decoradores

Los métodos y las propiedades

Introducción a los patrones de diseño

Las excepciones

La instrucción with y los gestores de contexto

Ejercicio final

6. ATRIBUTOS MÁGICOS, METACLASES Y DESARROLLO GUIADO POR PRUEBAS

El modelo a objetos de Python

Los atributos mágicos

Metaclases

Desarrollo guiado por pruebas

Ejemplo práctico de uso del desarrollo guiado por pruebas

Las enumeraciones

Ejercicio final

APÉNDICE A - DESCRIPCIÓN DE LOS COMANDOS UNIX-LIKE UTILIZADOS EN EL LIBRO

cat

chmod

cut

diff

echo

find

grep

head

ln

ls

mkdir

more

mv

pwd

rm

sed

source

tail

tar

time

touch

tree

wc

wget

which

zip

Los metacaracteres

Variables de entorno

APÉNDICE B - PRINCIPALES PUNTOS DE ROTURA ENTRE PYTHON 2 Y PYTHON 3

Incompatibilidades entre las dos versiones

Migración automática de Python 2 a Python 3

APÉNDICE C - EL BUFFERING DE LOS ARCHIVOS

Introducción

Python es un lenguaje de programación multiplataforma, consistente y maduro, en el cual confían con éxito las empresas y organizaciones más prestigiosas a nivel mundial, como Google, YouTube, Intel, Yahoo! y la NASA. Son múltiples los campos en los que se utiliza: aplicaciones web, juegos y multimedia, interficies gráficas, networking, aplicaciones científicas, inteligencia artificial, programación de sistemas, entre muchos otros.

El objetivo de este libro es enseñar a programar con Python en el modo correcto (The Pythonic Way). El tema central es, por tanto, el lenguaje, en todos sus aspectos, que se aborda detalladamente tanto desde el punto de vista teórico como práctico.

El libro está actualizado a la versión 3.4 de Python, lanzada en el año 2014.

A quién va dirigido

El libro va dirigido tanto a aquellos que quieren empezar a programar con Python como a los que ya conocen el lenguaje y desean profundizar en los argumentos más avanzados, como los decoradores, las metaclases y los descriptores.

La lectura será probablemente más entretenida para aquellos que tienen experiencia en programación, pero el libro es accesible a todos, puesto que nada se da por sabido. De hecho, se parte del estudio de las bases del lenguaje hasta llegar, siguiendo un recorrido gradual elaborado en torno a una amplia serie de ejemplos y ejercicios, a los argumentos más avanzados.

Este libro no es solo una guía de Python, sino también un manual de programación, puesto que se tratan numerosos temas de carácter general, como la aritmética del ordenador y las problemáticas relacionadas con ella, el estándar Unicode y el desarrollo guiado por pruebas.

Contenido del libro

El libro está formado por seis capítulos y tres apéndices. El primero es un resumen de todo el libro, puesto que presenta, de forma gradual, múltiples temas, como los objetos integrados, los módulos, los archivos, las funciones, las clases y las librerías estándar. Al final de este capítulo, el lector ya debería ser productivo y ser capaz de desarrollar programas Python importantes y con sentido.

Del segundo al quinto capítulo se profundiza y se integran todos los argumentos estudiados en el primero: el segundo capítulo se centra en el core data-type; el tercero, en las funciones, los generadores y los archivos; el cuarto, en los módulos, la instalación y la distribución de las aplicaciones, y el quinto, en la programación orientada a objetos.

El sexto capítulo está dedicado a los argumentos más avanzados: modelo a objetos de Python, metaclases, atributos mágicos, descriptores y desarrollo guiado por pruebas. Estos temas se tratarán de forma gradual y, al mismo tiempo, de manera detallada. En este libro no existe ningún capítulo dedicado exclusivamente a las librerías estándar, puesto que este tema es tan amplio que sería necesario otro libro para tratarlo de manera completa. Hemos preferido seguir un enfoque práctico, tratando distintos módulos de interés en cada momento, cuando se presenta la ocasión. Esto permite tanto realizar prácticas con los módulos más utilizados como familiarizarse con la documentación online.

Al final de cada capítulo se incluye un ejercicio final, con el objetivo no solo de analizar programas completos, sino también y sobre todo de hacer frente a otras temáticas importantes y explorar la librería estándar. De hecho, en estos ejercicios se podrá ver cómo realizar el análisis de argumentos desde la línea de comandos, crear programas portables que puedan funcionar igual en todos los sistemas operativos, trabajar con fechas, utilizar los comodines y las expresiones regulares y realizar el desarrollo guiado por pruebas, entre otras aplicaciones.

Cada ejercicio empieza mostrando el código -que tras una primera lectura seguramente parecerá del todo incomprensible- y continúa con la explicación del significado de cada línea, de manera que, al finalizar, todos los puntos estén claros para el lector. La parte final del libro está formada por tres apéndices. El apéndice A describe los comandos Unix-like utilizados en el libro; el apéndice B, los principales puntos de rotura entre Python 2 y Python 3, y el apéndice C, el proceso de buffering de los archivos.

Material y contactos

El código fuente de los ejercicios finales y las soluciones están disponibles en internet, en la dirección:

http://code.google.com/p/the-pythonic-way/

Para cualquier aclaración, o simplemente, para intercambiar opiniones, pueden ponerse en contacto con el autor mediante un e-mail a su dirección de correo electrónico:

marco.buttu@gmail.com

indicando en el asunto el texto Python - Guida completa.

Agradecimientos

El autor dedica este libro a Micky, su irremplazable otra mitad, y le agradece la paciencia y la comprensión. Sin su ayuda no habría sido posible escribir este libro.

Muchas gracias también a todas aquellas personas que han pasado su tiempo inter-cambiando opiniones con el autor acerca de Python, particularmente a Steven D’Aprano, por su participación en el grupo de discusión comp.lang.python y en la mailing list python-ideas.

El autor quiere dar las gracias también a Andrea Saba, Franco Buffa y Marco Bartolini por todos los consejos útiles.

1

Los fundamentos del lenguaje

En este capítulo construiremos sólidos fundamentos práctico-teóricos que nos permitirán ser rápidamente productivos. Presentaremos paso a paso distintos temas: objetos integrados, módulos, archivos, funciones, clases y librerías estándar. El objetivo es ambicioso: proporcionar las bases a quien quiere aprender a programar correctamente con Python y, al mismo tiempo, ofrecer ideas interesantes a los programadores de Python más experimentados.

Introducción a Python

Python nace en diciembre de 1989 de manos del informático holandés Guido van Rossum.

Tras haber estado trabajando durante cuatro años (de 1982 a 1986) en el desarrollo del lenguaje de programación ABC, en el Centrum voor Wiskunde & Informatica (CWI) de Amsterdam, en 1986 Guido empieza a colaborar en el desarrollo de Amoeba, un sistema operativo distribuido nacido también en Amsterdam (1981), en la Vrije Universiteit. A finales de los ochenta, el equipo se da cuenta de que Amoeba necesita un lenguaje de scripting, por lo que Guido, mientras pasa las vacaciones de Navidad de 1989 en su casa, tanto por hobby como por contribuir en el desarrollo de Amoeba, decide poner en marcha un proyecto personal.

Intenta utilizar todo cuanto ha aprendido durante el tiempo de trabajo con ABC y, aunque aquella experiencia fue más bien frustrante, algunas de las carácterísticas de ABC le gustan y decide utilizarlas como fundamentos para su nuevo lenguaje:

• la sangría para indicar los bloques de instrucciones anidadas;

• alguna instrucción de variables;

• cadenas de caracteres y listas de longitud arbitraria.

Sobre estas bases empieza a escribir en C un intérprete para su futuro lenguaje de programación, que bautiza con el nombre de Python en honor a su serie de televisión favorita: Monty Python’s Flying Circus.

En 1990, Guido finaliza la primera implementación del intérprete, que implanta en la CWI para uso interno. En febrero de 1991, hace público el código en alt.sources, indicando como versión la 0.9.0. En 1994 se crea comp.lang.python, el primer grupo de discusión sobre Python, y el año siguiente nace el sitio web oficial: www.python.org.

Desarrollo de Python

Python es desarrollado, mantenido e implantado por un grupo de personas coordinado por Guido van Rossum, quien tiene la última palabra en las decisiones relacionadas tanto con el lenguaje como con las librerías estándar. Por este motivo, en 1995, se otorgó a Guido el título de Benevolent Dictator For Life (BDFL). El 6 de marzo de 2001 se funda la Python Software Foundation (PSF), una organización sin ánimo de lucro que tiene los derechos de autor sobre Python y promueve su difusión. La PSF está presidida por Guido van Rossum y cuenta entre sus miembros con el núcleo de los desarrolladores de Python, entre muchas otras personalidades denominadas en virtud de su notable contribución en el lenguaje.

Las major version (las versiones principales, aquellas que se distinguen por el primer número de la versión, denominado major number) se van lanzando con distintos años de separación unas de otras. Así, la 1.0 sale en 1994, la 2.0, en el año 2000 y la 3.0, en 2008. En cambio, las minor version (las versiones menores, aquellas que tienen el mismo major number y se diferencian por el primer número después del punto) aparecen cada uno o dos años.

Las funcionalidades que se añaden a las minor version son retrocompatibles, lo que significa que todo el código escrito para una versiones menores funcionará del mismo modo también en las sucesivas. Por tanto, el código escrito para la versión 3.x funcionará de manera idéntica en todas las versiones 3.y, siendo y mayor que x.

Sin embargo, en las versiones principales no se garantiza la retrocompatibilidad. Si el código de una versión principal x no se puede ejecutar con una y, x < y, o bien sí se puede pero el resultado es distinto, se dice que es incompatible con la versión y.

NOTA

Este libro ha sido actualizado a Python 3.4. El código ha sido ejecutado tanto en Python 3.3 como en Python 3.4 (evidentemente, las funcionalidades presentadas en la 3.4 solo han sido probadas en dicha versión). Para conocer las principales incompatibilidades entre Python 2 y Python 3 consulte el Apéndice B, titulado Principales puntos de rotura entre Python 2 y Python 3.

Para indicar las versiones en las cuales se resuelven ciertos errores presentes en la versión menor, se utiliza un tercer número, denominado micro number, o patch number. Por ejemplo, en la versión x.y.1 de Python el número 1 indica el micro número. Por tanto, la 3.4.1 es la primera bug-fix release (o versión con errores corregidos) de Python 3.4. Por último, es posible ver un código detrás del número de versión, por ejemplo, 3.4.1a3, 3.4.1b2, 3.4.1c4. Este código se utiliza para indicar las sub-release. Los códigos a1, a2, … aN indican las alpha release, que pueden añadir nuevas funcionalidades (por ejemplo, la 3.4.1a2 podría presentar funcionalidades que no se incluyen en la 3.4.1a1). Los códigos b1, b2, … bN indican las beta release, que pueden resolver los bug pero no pueden añadir nuevas funcionalidades. Los códigos c1, c2, … cN indican las versiones candidate, en las cuales el desarrollo del núcleo comprueba escrupulosamente la corrección de errores. La herramienta utilizada para proponer los cambios en el lenguaje es la Python Enhancement Proposal, que se indica con el acrónimo PEP. Las PEP son documentos públicos revisados por los desarrolladores y la comunidad, con la finalidad de ser aprobados o descartados por Guido. Las PEP tratan distintos aspectos del lenguaje y se identifican por un código único (por ejemplo, PEP-0008). El archivo de todas las PEP se encuentra en la página http://www.python.org/dev/peps/. Para acceder a la página de una determinada PEP, es preciso añadir el texto /pep-code/ a la dirección del archivo; por ejemplo, la página de la PEP-0008 es accesible desde la URL http:// www.python.org/dev/peps/pep-0008/. Tengamos todo esto presente, puesto que nos referiremos a las PEP durante todo el libro.

NOTA

La nomenclatura y la gestión del lanzamiento de las versiones de Python se trata en la PEP-0101, titulada Doing Python Releases 101, mientras que las micro-release y las sub-release se tratan en la PEP-0102.

El estado del arte

Python es un lenguaje consistente y maduro, utilizado en diversos ámbitos: web, desarrollo de interficies gráficas, programación de sistemas, networking, bases de datos, cálculo numérico y aplicaciones científicas, programación de juegos y multimedia, gráficos e inteligencia artificial, entre muchos otros.

Se trata de un lenguaje multiplataforma, es decir, disponible para los principales sistemas operativos, y se incluye automáticamente en las distribuciones Linux y en los ordenadores Macintosh. Además, proporciona todas las herramientas para escribir de manera sencilla programas portables, es decir, que se comportan del mismo modo si se ejecutan sobre distintas plataformas. Podremos ver un ejemplo elocuente de código portable en el ejercicio final de este capítulo.

Se utiliza con éxito a nivel mundial en las empresas y organizaciones más variadas, entre las cuales se encuentran Google, la NASA, YouTube, Intel, Yahoo! Groups, reddit, Spotify Ltd, OpenStack y Dropbox Inc. Esta última merece una mención aparte, puesto que su historia nos permite evidenciar distintos puntos fuertes de Python.

Dropbox es un software multiplataforma que ofrece un servicio de alojamiento y sincronización automática de archivos a través de la web. Su primera versión fue lanzada en septiembre de 2008 y en muy poco tiempo tuvo un éxito sorprendente, llegando a los 50 millones de usuarios en octubre de 2011 y a los 100 millones el año siguiente, como anunció el 12 de noviembre de 2012 Drew Houston, uno de los dos fundadores de Dropbox Inc.

Casi un mes después del anuncio de este increíble resultado, el 7 de diciembre de 2012, Drew nos sorprendió a todos con otra clamorosa noticia. Guido van Rossum, tras haber sido partícipe durante siete años de la buena suerte de Google, se unía al equipo de Dropbox:

Nos complace dar la bienvenida, de forma insólita, a un nuevo miembro de la familia Dropbox. Aunque su incorporación es muy reciente, sus aportaciones a Dropbox han sido evidentes desde el primer día, desde la primera línea de código.

Son muy pocas las personas que no necesitan presentación, y el BDFL (“el dictador benevolente de por vida”) es una de ellas. Dropbox está orgulloso de dar la bienvenida a Guido, el creador del lenguaje de programación Python, y amigo nuestro desde hace mucho tiempo. Han pasado cinco años desde que nuestro primer prototipo fue guardado como dropbox.py, y Guido y la comunidad de Python han sido cruciales en ayudarnos a resolver retos que han concernido a cientos de millones de personas.

Por todo ello, acogemos a Guido con admiración y gratitud. Guido nos ha inspirado a todos, ha desarrollado un papel fundamental en el modo en que Dropbox une los productos, los dispositivos y los servicios en nuestra vida. Estamos muy contentos de tenerlo en nuestro equipo.

En ese mismo anuncio, Drew rindió homenaje a Python, su lenguaje de programación favorito, elogiándolo por su portabilidad, simplicidad y flexibilidad:

Desde el principio, estaba claro que Dropbox tenía que funcionar en todos los sistemas operativos. Históricamente, este aspecto representaba un reto importante para los desarrolladores: cada plataforma precisaba distintas herramientas de desarrollo, distintos lenguajes de programación, y los desarrolladores debían escribir el mismo código múltiples veces.

No teníamos tiempo de hacerlo y, afortunadamente, Python llegó para socorrernos. Unos años atrás, Python se había convertido en mi lenguaje de programación favorito porque presentaba un equilibrio entre simplicidad, flexibilidad y elegancia. Estas cualidades de Python, y el trabajo de la comunidad para soportar cada una de las plataformas más importantes, nos permitió escribir el código una sola vez y ejecutarlo en cualquier lugar. Python y la comunidad han sido una influencia para la filosofía más importante que está detrás de Dropbox: realizar un producto simple que reúna toda nuestra vida.

Aquellos que conocen Python pueden confirmar que cuanto dice Drew Houston es cierto. Todo el mundo sabe que programar con Python es un placer, gracias a su sintaxis clara y comprensible, que lo hace simple y fácil de aprender, pero también porque solo con los tipos integrados y con la librería estándar puede hacerse casi todo, y únicamente ante exigencias muy especializadas es preciso recurrir a librerías de terceros. A todo esto debemos añadir otro importante mérito: Python es un lenguaje multiparadigma, es decir, que permite utilizar diferentes paradigmas de programación: meta-programación, procedural, funcional, a objetos y scripting.

NOTA

Por honestidad intelectual, tengo el deber de informaros acerca de una importante contraindicación de uso de Python: crea dependencia. Cuando hayáis aprendido a programar con Python, os será muy difícil prescindir de él.

Dicho esto, Drew ha sacado partido de sus decisiones y, tras menos de un año de la llegada de Guido y del anuncio del logro de los 100 millones de usuarios, en noviembre de 2013 Dropbox había doblado esta cifra, llegando a los 200 millones.

Acabamos esta sección con una sugerencia: la lectura del Python Advocacy HOWTO, que puede consultarse en la siguiente página de su sitio oficial: http://docs.python.org/3/howto/advocacy.html.

₺547,49