En este artículo falta información sobre las características destacadas de las versiones posteriores a la 3.0. ( Marzo de 2024 ) |
El lenguaje de programación Python fue concebido a fines de la década de 1980, [1] y su implementación se inició en diciembre de 1989 [2] por Guido van Rossum en CWI en los Países Bajos como sucesor de ABC capaz de manejar excepciones e interactuar con el sistema operativo Amoeba . [3] Van Rossum es el autor principal de Python, y su continuo papel central en decidir la dirección de Python se refleja en el título que le dio la comunidad Python, Benevolent Dictator for Life (BDFL) . [4] [5] (Sin embargo, Van Rossum renunció como líder el 12 de julio de 2018. [6] ). Python recibió su nombre del programa de televisión de la BBC Monty Python's Flying Circus . [7]
Python 2.0 fue lanzado el 16 de octubre de 2000, con muchas nuevas características importantes, incluyendo un recolector de basura con detección de ciclos (además del conteo de referencias ) para la gestión de memoria y soporte para Unicode , junto con un cambio en el proceso de desarrollo en sí, con un cambio a un proceso más transparente y respaldado por la comunidad. [8]
El 3 de diciembre de 2008 [9] se publicó Python 3.0, una versión importante que no es compatible con versiones anteriores . Muchas de sus principales características también se han incorporado a Python 2.6 y 2.7, que son compatibles con versiones anteriores, aunque ahora no cuentan con soporte. [10]
En febrero de 1991, Van Rossum publicó el código (etiquetado como versión 0.9.0) en alt.sources. [11] [12] Ya presentes en esta etapa del desarrollo estaban las clases con herencia , manejo de excepciones, funciones y los tipos de datos básicos de list
, dict
, str
etc. También en esta versión inicial había un sistema de módulos tomado de Modula-3 ; Van Rossum describe el módulo como "una de las principales unidades de programación de Python". [1] El modelo de excepción de Python también se parece al de Modula-3, con la adición de una else
cláusula. [3] En 1994 se formó comp.lang.python, el principal foro de discusión de Python, lo que marcó un hito en el crecimiento de la base de usuarios y la popularidad de Python. [1]
Python alcanzó la versión 1.0 en enero de 1994. Las principales novedades incluidas en esta versión fueron las herramientas de programación funcional lambda
, map
, filter
y reduce
. Van Rossum afirmó que "Python adquirió lambda, reduce(), filter() y map(), cortesía de un hacker de Lisp que los extrañó y envió parches que funcionaban ". [13]
La última versión publicada mientras Van Rossum estaba en CWI fue Python 1.2. En 1995, Van Rossum continuó su trabajo en Python en la Corporation for National Research Initiatives (CNRI) en Reston , Virginia, desde donde publicó varias versiones.
En la versión 1.4, Python había adquirido varias características nuevas. Entre ellas, destacan los argumentos de palabras clave inspirados en Modula-3 (que también son similares a los argumentos de palabras clave de Common Lisp ) y el soporte integrado para números complejos . También se incluye una forma básica de ocultamiento de datos mediante la manipulación de nombres , aunque esto se puede obviar fácilmente. [14]
Durante la estancia de Van Rossum en el CNRI, lanzó la iniciativa Computer Programming for Everybody (CP4E), con la intención de hacer que la programación fuera más accesible para más personas, con una "alfabetización" básica en lenguajes de programación, similar a la alfabetización básica en inglés y las habilidades matemáticas requeridas por la mayoría de los empleadores. Python cumplió un papel central en esto: debido a su enfoque en la sintaxis limpia, ya era adecuado, y los objetivos de CP4E tenían similitudes con su predecesor, ABC. El proyecto fue financiado por DARPA . [15] A partir de 2007 [actualizar], el proyecto CP4E está inactivo, y aunque Python intenta ser fácil de aprender y no demasiado arcano en su sintaxis y semántica, la divulgación a los no programadores no es una preocupación activa. [16]
En 2000, el equipo de desarrollo central de Python se trasladó a BeOpen.com [17] para formar el equipo BeOpen PythonLabs. [18] [19] CNRI solicitó que se lanzara una versión 1.6, resumiendo el desarrollo de Python hasta el punto en el que el equipo de desarrollo dejó CNRI. En consecuencia, los cronogramas de lanzamiento para 1.6 y 2.0 tuvieron una cantidad significativa de superposición. [8] Python 2.0 fue el único lanzamiento de BeOpen.com. Después de que BeOpen.com lanzara Python 2.0, Guido van Rossum y los otros desarrolladores de PythonLabs se unieron a Digital Creations .
La versión 1.6 de Python incluía una nueva licencia CNRI que era sustancialmente más larga que la licencia CWI que se había utilizado para versiones anteriores. La nueva licencia incluía una cláusula que establecía que la licencia se regía por las leyes del estado de Virginia . La Free Software Foundation argumentó que la cláusula de elección de la ley aplicable era incompatible con la Licencia Pública General de GNU . BeOpen, CNRI y la FSF negociaron un cambio en la licencia de software libre de Python que la haría compatible con la GPL. Python 1.6.1 es esencialmente igual que Python 1.6, con algunas correcciones de errores menores y con la nueva licencia compatible con la GPL. [20]
Python 2.0, publicado en octubre de 2000, [8] introdujo las listas por comprensión , una característica tomada prestada de los lenguajes de programación funcional SETL y Haskell . La sintaxis de Python para esta construcción es muy similar a la de Haskell, aparte de la preferencia de Haskell por los caracteres de puntuación y la preferencia de Python por las palabras clave alfabéticas. Python 2.0 también introdujo un recolector de basura capaz de recolectar ciclos de referencia. [8]
Python 2.1 era similar a Python 1.6.1, así como a Python 2.0. Su licencia fue renombrada Python Software Foundation License . Todo el código, la documentación y las especificaciones agregadas, desde el momento del lanzamiento alfa de Python 2.1, son propiedad de Python Software Foundation (PSF), una organización sin fines de lucro formada en 2001, inspirada en Apache Software Foundation . [20] El lanzamiento incluyó un cambio en la especificación del lenguaje para admitir ámbitos anidados, como otros lenguajes con ámbito estático . [21] (La función estaba desactivada de forma predeterminada y no era obligatoria hasta Python 2.2).
Python 2.2 se lanzó en diciembre de 2001; [22] una innovación importante fue la unificación de los tipos de Python (tipos escritos en C ) y las clases (tipos escritos en Python) en una sola jerarquía. Esta unificación única hizo que el modelo de objetos de Python fuera pura y consistentemente orientado a objetos. [23] También se agregaron generadores inspirados en Icon . [24]
Python 2.5 se lanzó en septiembre de 2006 [25] e introdujo la with
declaración, que encierra un bloque de código dentro de un administrador de contexto (por ejemplo, adquiriendo un bloqueo antes de que se ejecute el bloque de código y liberando el bloqueo después, o abriendo un archivo y luego cerrándolo), lo que permite un comportamiento similar a la adquisición de recursos en la inicialización (RAII) y reemplazando un modismo try/finally común. [26]
Python 2.6 se lanzó para coincidir con Python 3.0 e incluyó algunas características de esa versión, así como un modo de "advertencias" que resaltaba el uso de características que se eliminaron en Python 3.0. [27] [10] De manera similar, Python 2.7 coincidió con Python 3.1 e incluyó características de este, [28] que se lanzó el 26 de junio de 2009. Luego cesaron las versiones paralelas 2.x y 3.x, y Python 2.7 fue la última versión de la serie 2.x. [29] En noviembre de 2014, se anunció que Python 2.7 sería compatible hasta 2020, pero se animó a los usuarios a migrar a Python 3 lo antes posible. [30] El soporte de Python 2.7 finalizó el 1 de enero de 2020, junto con la congelación del código de la rama de desarrollo 2.7. El 20 de abril de 2020 se lanzó una versión final, 2.7.18, que incluía correcciones de errores críticos y bloqueadores de versiones. [31] Esto marcó el final de la vida útil de Python 2. [32]
Python 3.0 (también llamado "Python 3000" o "Py3K") fue lanzado el 3 de diciembre de 2008. [9] Fue diseñado para corregir fallas de diseño fundamentales en el lenguaje: los cambios requeridos no podían implementarse manteniendo la compatibilidad total con la serie 2.x, lo que requería un nuevo número de versión principal. El principio rector de Python 3 fue: "reducir la duplicación de características eliminando las viejas formas de hacer las cosas". [33]
Python 3.0 se desarrolló con la misma filosofía que las versiones anteriores. Sin embargo, como Python había acumulado formas nuevas y redundantes de programar la misma tarea, Python 3.0 hizo hincapié en eliminar construcciones y módulos duplicados, en consonancia con el Zen de Python : "Debería haber una forma obvia de hacerlo, preferiblemente solo una".
No obstante, Python 3.0 siguió siendo un lenguaje multiparadigma . Los programadores aún podían seguir paradigmas de programación orientada a objetos , estructurada y funcional , entre otros, pero dentro de una gama tan amplia de opciones, se pretendía que los detalles fueran más obvios en Python 3.0 que en Python 2.x.
Python 3.0 rompió la compatibilidad con versiones anteriores, y gran parte del código de Python 2 no se ejecuta sin modificaciones en Python 3. [34] La tipificación dinámica de Python combinada con los planes para cambiar la semántica de ciertos métodos de diccionarios, por ejemplo, hizo que la traducción mecánica perfecta de Python 2.x a Python 3.0 fuera muy difícil. Una herramienta llamada "2to3" hace las partes de la traducción que se pueden hacer automáticamente. En este sentido, 2to3 parecía tener bastante éxito, aunque una revisión temprana señaló que había aspectos de la traducción que una herramienta de este tipo nunca podría manejar. [35] Antes del lanzamiento de Python 3, se recomendaba que los proyectos que requerían compatibilidad con las series 2.x y 3.x tuvieran una fuente (para la serie 2.x) y produjeran versiones para la plataforma Python 3.x utilizando 2to3. Las ediciones del código Python 3.x se desaconsejaron mientras el código necesitara ejecutarse en Python 2.x. [10] Esto ya no se recomienda; A partir de 2012, el enfoque preferido fue crear una única base de código que pudiera ejecutarse tanto en Python 2 como en 3 utilizando módulos de compatibilidad. [36]
Algunos de los principales cambios incluidos para Python 3.0 fueron:
print
para que sea una función incorporada , no una declaración. Esto hizo que fuera más fácil cambiar un módulo para usar una función de impresión diferente, además de hacer que la sintaxis sea más regular. En Python 2.6 y 2.7 print()
está disponible como una función incorporada, pero está enmascarada por la sintaxis de la declaración de impresión, que se puede deshabilitar ingresando from __future__ import print_function
en la parte superior del archivo [37]input
función de Python 2 y cambio de nombre de la raw_input
función a input
. input
La función de Python 3 se comporta como raw_input
la función de Python 2, en el sentido de que la entrada siempre se devuelve como una cadena en lugar de evaluarse como una expresión.reduce
(pero no map
o filter
) fuera del espacio de nombres integrado y hacia functools
(la razón es que el código que usa reduce
es menos legible que el código que usa un bucle for y una variable acumuladora) [38] [39]str
/ unicode
, representar texto e introducir un bytes
tipo inmutable separado; y un tipo mutable correspondiente en su mayor parte bytearray
, ambos representan matrices de bytes [41]5 / 2
is 2
; mientras que en Python 3, 5 / 2
is 2.5
. (Tanto en Python 2 (2.2 en adelante) como en Python 3, existe un operador independiente para proporcionar el comportamiento anterior: 5 // 2
is 2
)smörgåsbord
, y admitir totalmente caracteres Unicode en el código fuente ( se utiliza UTF-8 de forma predeterminada)Las versiones posteriores de la serie Python 3.x han incluido nuevas características adicionales y sustanciales; todo el desarrollo continuo del lenguaje se realiza en la serie 3.x.
Lanzamientos anteriores a las versiones numeradas:
Versión | Última versión micro | Fecha de lanzamiento | Fin del soporte completo | Fin de las correcciones de seguridad |
---|---|---|---|---|
Versión antigua, ya no se mantiene:0.9 | 0.9.9 [2] | 20 de febrero de 1991 [2] | 29 de julio de 1993 [a] [2] | |
Versión antigua, ya no se mantiene:1.0 | 1.0.4 [2] | 26 de enero de 1994 [2] | 15 de febrero de 1994 [a] [2] | |
Versión antigua, ya no se mantiene:1.1 | 1.1.1 [2] | 11 de octubre de 1994 [2] | 10 de noviembre de 1994 [a] [2] | |
Versión antigua, ya no se mantiene:1.2 | 13 de abril de 1995 [2] | Sin soporte | ||
Versión antigua, ya no se mantiene:1.3 | 13 de octubre de 1995 [2] | Sin soporte | ||
Versión antigua, ya no se mantiene:1.4 | 25 de octubre de 1996 [2] | Sin soporte | ||
Versión antigua, ya no se mantiene:1.5 | 1.5.2 [43] | 03-01-1998 [2] | 13 de abril de 1999 [a] [2] | |
Versión antigua, ya no se mantiene:1.6 | 1.6.1 [43] | 5 de septiembre de 2000 [44] | 2000–09 [a] [43] | |
Versión antigua, ya no se mantiene:2.0 | 2.0.1 [45] | 16 de octubre de 2000 [46] | 22 de junio de 2001 [a] [45] | |
Versión antigua, ya no se mantiene:2.1 | 2.1.3 [45] | 15 de abril de 2001 [47] | 09-04-2002 [a] [45] | |
Versión antigua, ya no se mantiene:2.2 | 2.2.3 [45] | 21 de diciembre de 2001 [48] | 30 de mayo de 2003 [a] [45] | |
Versión antigua, ya no se mantiene:2.3 | 2.3.7 [45] | 29 de junio de 2003 [49] | 11-03-2008 [a] [45] | |
Versión antigua, ya no se mantiene:2.4 | 2.4.6 [45] | 30 de noviembre de 2004 [50] | 19 de diciembre de 2008 [a] [45] | |
Versión antigua, ya no se mantiene:2.5 | 2.5.6 [45] | 19 de septiembre de 2006 [51] | 26 de mayo de 2011 [a] [45] | |
Versión antigua, ya no se mantiene:2.6 | 2.6.9 [27] | 1 de octubre de 2008 [27] | 24 de agosto de 2010 [b] [27] | 29 de octubre de 2013 [27] |
Versión antigua, ya no se mantiene:2.7 | 2.7.18 [32] | 3 de julio de 2010 [32] | 01-01-2020 [c] [32] | |
Versión antigua, ya no se mantiene:3.0 | 3.0.1 [45] | 3 de diciembre de 2008 [27] | 27 de junio de 2009 [52] | |
Versión antigua, ya no se mantiene:3.1 | 3.1.5 [53] | 27 de junio de 2009 [53] | 12 de junio de 2011 [54] | 6 de abril de 2012 [53] |
Versión antigua, ya no se mantiene:3.2 | 3.2.6 [55] | 20 de febrero de 2011 [55] | 13 de mayo de 2013 [b] [55] | 20 de febrero de 2016 [55] |
Versión antigua, ya no se mantiene:3.3 | 3.3.7 [56] | 29 de septiembre de 2012 [56] | 8 de marzo de 2014 [b] [56] | 29 de septiembre de 2017 [56] |
Versión antigua, ya no se mantiene:3.4 | 3.4.10 [57] | 16 de marzo de 2014 [57] | 09-08-2017 [58] | 18-03-2019 [a] [57] |
Versión antigua, ya no se mantiene:3.5 | 3.5.10 [59] | 13 de septiembre de 2015 [59] | 08-08-2017 [60] | 30 de septiembre de 2020 [59] |
Versión antigua, ya no se mantiene:3.6 | 3.6.15 [61] | 23 de diciembre de 2016 [61] | 24 de diciembre de 2018 [b] [61] | 23 de diciembre de 2021 [61] |
Versión antigua, ya no se mantiene:3.7 | 3.7.17 [62] | 27 de junio de 2018 [62] | 27 de junio de 2020 [b] [62] | 6 de junio de 2023 [62] |
Versión antigua, ya no se mantiene:3.8 | 3.8.20 [63] | 14 de octubre de 2019 [63] | 3 de mayo de 2021 [b] [63] | 07-10-2024 [63] |
Versión antigua, pero aún mantenida:3.9 | 3.9.20 [64] | 5 de octubre de 2020 [64] | 17 de mayo de 2022 [b] [64] | 2025-10 [64] [65] |
Versión antigua, pero aún mantenida:3.10 | 3.10.15 [66] | 4 de octubre de 2021 [66] | 5 de abril de 2023 [b] [66] | 2026-10 [66] |
Versión antigua, pero aún mantenida:3.11 | 3.11.10 [67] | 24 de octubre de 2022 [67] | 2 de abril de 2024 [b] [67] | 2027-10 [67] |
Versión antigua, pero aún mantenida:3.12 | 3.12.7 [68] | 2 de octubre de 2023 [68] | 2025-05 [68] | 2028-10 [68] |
Versión estable actual: 3.13 | 3.13.0 [69] | 07-10-2024 [69] | 2026-05 [69] | 2029-10 [69] |
Lanzamiento futuro:3.14 | 3.14.0a1 [70] | 01-10-2025 [70] | 2027-05 [70] | 2030-10 [70] |
Notas de la tabla:
Así como Python 2.6 incorporó características de Python 3.0, la versión 2.7 incorpora algunas de las nuevas características de Python 3.1. La serie 2.x continúa brindando herramientas para migrar a la serie 3.x.
{{cite web}}
: CS1 maint: estado de la URL ( enlace )