Capítulo 1
INTRODUCCIÓN AL LENGUAJE PYTHON
Hoy día, la tecnología se ha vuelto un elemento fundamental para todos los seres humanos. Existen dispositivos que ayudan a realizar casi todas las actividades cotidianas, desde teléfonos inteligentes que resuelven cualquier duda en cuestión de segundos a miniordenadores que pueden ser integrados en pacientes como una prótesis, pasando por cohetes espaciales capaces de enviar robots fuera de nuestro planeta y recopilar información constantemente durante años. Muchos de estos componentes tecnológicos son operados por un software encargado de velar por su correcto funcionamiento y por su ejecución óptima. Por tanto, el desarrollo de este software es un pilar muy importante en la evolución de la tecnología y de la humanidad en su conjunto, además de ser un ámbito en auge que, se prevé, seguirá creciendo y necesitando de más expertos en los próximos años.
El software se compone de algoritmos. Estos no son más que la sucesión de comandos, programados en un lenguaje entendible de alguna forma por los humanos, que son transformados a un lenguaje que las máquinas pueden procesar y ejecutar con rapidez. El desarrollo del software se hace utilizando lenguajes de programación que se definen con una gramática específica (similar a un lenguaje hablado por los seres humanos) que define los comandos y la lógica que debe aplicar el sistema en cuestión bajo unos parámetros específicos. Existen multitud de lenguajes de programación, que difieren en sus propósitos y características. Encontraremos desde lenguajes de alto nivel (muy parecidos a los lenguajes que utilizamos para comunicarnos entre humanos) hasta lenguajes muy próximos al código máquina, pasando por lenguajes con un propósito puramente educacional o creados por simple diversión para los desarrolladores.
En este libro se darán las bases y los conceptos principales de uno de los mejores lenguajes de programación que existe hasta el momento, además de ser uno de los que se encuentra en mayor auge: el lenguaje de programación Python.
1 INTRODUCCIÓN
Corría el año 1989 cuando un joven holandés de 24 años comenzó sus primeras implementaciones del lenguaje de programación que hoy conocemos como Python. Este joven era Guido van Rossum y trabajaba para la empresa Centrum Wiskunde & Informatica (CWI). En su tiempo libre, no paraba de pensar en cómo mejorar la interfaz de usuario que utilizaban para trabajar con el sistema operativo Amoeba. Con esta idea en mente, nació el lenguaje de programación Python, que en principio iba a ser un proyecto pequeño de un lenguaje de programación que sucediera al lenguaje ABC que desarrollaban en CWI y que tuviera manejo de excepciones y ayudara a interactuar mejor con el sistema operativo. El nombre del lenguaje proviene de la afición que tenía Van Rossum a la serie de televisión Monty Python's Flying Circus y no de algo relacionado con el mundo de los reptiles.
La primera versión de Python fue lanzada en febrero de 1991 con el número de versión 0.9.0. En esta versión ya tenía componentes como clases con herencia, gestores de excepciones, funciones y tipos de datos como listas y diccionarios o cadenas de caracteres, con lo que desde sus inicios se veía su potencial frente a los demás lenguajes del momento (C++, Common Lisp o Perl).
Van Rossum ha sido el principal autor del lenguaje y quien ha dirigido el rumbo del mismo desde su inicio hasta que, en julio de 2018, decidió abandonar el cargo de benevolent dictator for life (BDL, dictador benevolente de por vida) para formar parte de una comisión directiva formada por cinco miembros.
1.1 EVOLUCIÓN DE LAS VERSIONES DE PYTHON
Durante los años que lleva en desarrollo, Python ha sufrido numerosos cambios y, hoy día, sigue recibiéndolos continuamente por medio de las PEP (siglas en inglés de Python Enhancement Proposals), que son propuestas que se crean en la comunidad de Python y que, de aprobarse, se aplican al código del lenguaje, a la documentación o a la parte específica que trate la PEP (se profundizará en esta cuestión más adelante).
A continuación, se nombran las principales versiones de Python con los cambios más destacados y sus fechas de lanzamiento:
• Versión 0.9 (febrero de 1991): primera versión de Python publicada por Van Rossum. Ya tenía componentes actuales como listas, diccionarios, clases y herencia, cadenas de caracteres y otras muchas características.
• Versión 1.0 (enero de 1994): se introdujo por primera vez la programación funcional y funciones como lambda, map o filter, entre otras.
• Versión 1.4 (octubre de 1996): añade los parámetros por clave-valor y los números complejos.
• Versión 1.6 (septiembre del 2000): se arreglan algunos errores y se añade una licencia compatible con GPL (GNU General Public License).
• Versión 2.0 (octubre del 2000): se añaden las listas por comprensión y el recolector de basura.
• Versión 2.1 (diciembre del 2001): se hacen cambios en el código para soportar ámbitos anidados y ámbitos estáticos. También cambia la licencia de nombre a Python Software Fundation License (PSFL). La Python Software Fundation se crea en ese mismo año como organización sin ánimo de lucro, organizadora y dueña, desde entonces, del código, documentación y especificaciones del lenguaje.
• Versión 2.2 (septiembre del 2006): se unifican los tipos de Python, escritos en C, y se añaden los conceptos de generadores.
• Versión 2.5 (septiembre del 2008): se introduce la cláusula with en el lenguaje, lo que permite encapsular bloques de código dentro de un administrador de contexto como se explicará más adelante en el libro.
• Versión 2.7 (julio del 2010): se añade OrderedDict a collections. Es la última versión de la rama 2.X y se incluyen algunas mejoras de la ya empezada a desarrollar versión 3.X. En noviembre de 2014 se anuncia que la versión 2.7 será la última de las versiones de la rama 2.X y que dejará de tener soporte a principios de 2020, invitando a todos los usuarios a migrar activamente a la versión 3.
• Versión 3.0 (diciembre del 2008): tras el lanzamiento de la versión 2.6, se realiza también el de la versión 3 (también llamada Python 3000), en la que, entre otras cosas, se hacen cambios en la parte principal del lenguaje, quitando redundancia de código e introduciendo grandes incompatibilidades con la versión 2.
• Versión 3.5 (septiembre del 2014): se añaden corrutinas con la sin-taxis de async y await. Además, se añaden una forma adicional de hacer las asignaciones en iteradores y la nueva librería para definir el tipado de variables: typing.
• Versión 3.6 (diciembre del 2016): aparece el concepto de f-string para ayudar al formateado de cadenas de caracteres, se añaden las anotaciones de variables, se permite la generación de generadores asíncronos y se mejora notablemente la implementación de diccionarios.
• Versión 3.8 (octubre del 2019): introducción del operador walrus, se añaden los parámetros solo-posicionales usando /en las funciones y el soporte de = para los f-strings, para autodocumentar expresiones y ayudar a depurar.
• Versión 3.9 (octubre del 2020): se añade el paquete zoneinfo para facilitar el uso de zonas horarias en fechas, se añade el operador de unión (|) para diccionarios, se permite el uso de expresiones en decoradores, se añaden los métodos removesuffix y removeprefix para cadenas de caracteres, se permite usar tipos del builting para definir hints sin necesidad de importar la librería y se añade Annotated a typing para mejorar la integración de ambas, entre otros muchos cambios. Cabe destacar que en esta versión se han borrado muchas funciones que estaban presentes por retrocompatibilidad con la versión 2, y que en las siguientes versiones se borrarán más.
Para más información sobre cada una de las versiones y los cambios entre una y otra es recomendable revisar con frecuencia la web oficial de lenguaje de programación Python:
https://www.python.org/doc/versions/.
1.2 CARACTERÍSTICAS PRINCIPALES DE LOS LENGUAJES DE PROGRAMACIÓN
Los humanos nos comunicamos por medio de un lenguaje (mayoritariamente verbal). De forma similar, para comunicarnos con las máquinas hemos diseñado diferentes formas de comunicación denominadas lenguajes de programación. Al igual que los lenguajes utilizados entre humanos, los lenguajes de programación tienen diferentes características; están orientados a satisfacer las necesidades por las que han sido creados y los gustos de sus creadores y desarrolladores principales. Las principales características por las que un lenguaje de programación se puede caracterizar son la generación a la que pertenece, el nivel de abstracción del lenguaje, el tipo de tipado de variables, los paradigmas de program...