Guido van Rossum comenzó a trabajar en Python a fines de la década de 1980 como sucesor del lenguaje de programación ABC y lo lanzó por primera vez en 1991 como Python 0.9.0. [35] Python 2.0 se lanzó en 2000. Python 3.0, lanzado en 2008, fue una revisión importante que no era completamente compatible con versiones anteriores. Python 2.7.18, lanzado en 2020, fue la última versión de Python 2. [36]
Python se clasifica constantemente como uno de los lenguajes de programación más populares y ha ganado un uso generalizado en la comunidad de aprendizaje automático . [37] [38] [39] [40]
Historia
Python fue inventado a fines de la década de 1980 [41] por Guido van Rossum en Centrum Wiskunde & Informatica (CWI) en los Países Bajos como sucesor del lenguaje de programación ABC , que se inspiró en SETL , [42] capaz de manejar excepciones e interactuar con el sistema operativo Amoeba . [12] Su implementación comenzó en diciembre de 1989. [43] Van Rossum asumió la responsabilidad exclusiva del proyecto, como desarrollador principal, hasta el 12 de julio de 2018, cuando anunció sus "vacaciones permanentes" de sus responsabilidades como " dictador benevolente de por vida " (BDFL) de Python, un título que la comunidad de Python le otorgó para reflejar su compromiso a largo plazo como principal responsable de la toma de decisiones del proyecto [44] (desde entonces ha salido de su retiro y se autodenomina "BDFL-emérito"). En enero de 2019, los desarrolladores activos del núcleo de Python eligieron un Consejo Directivo de cinco miembros para liderar el proyecto. [45] [46]
Python 2.0 fue lanzado el 16 de octubre de 2000, con muchas nuevas características importantes como listas por comprensión , recolección de basura con detección cíclica , conteo de referencias y soporte Unicode . [47] Python 3.0 fue lanzado el 3 de diciembre de 2008, con muchas de sus características principales incorporadas a Python 2.6.x [48] y 2.7.x. Las versiones de Python 3 incluyen la 2to3utilidad, que automatiza la traducción del código de Python 2 a Python 3. [49]
El fin de la vida útil de Python 2.7 se fijó inicialmente para 2015, luego se pospuso a 2020 debido a la preocupación de que una gran parte del código existente no pudiera trasladarse fácilmente a Python 3. [50] [51] No se lanzarán más parches de seguridad ni otras mejoras para él. [52] [53] Actualmente, solo se admiten las versiones 3.9 y posteriores (los problemas de seguridad de 2023 se solucionaron en, por ejemplo, 3.7.17, la versión final 3.7.x [54] ). Si bien Python 2.7 y versiones anteriores no son oficialmente compatibles, una implementación no oficial de Python diferente, PyPy , continúa admitiendo Python 2, es decir, "2.7.18+" (más 3.10), donde el signo más significa (al menos algunas) " actualizaciones de seguridad trasladadas ". [55]
En 2021 (y nuevamente dos veces en 2022, y en septiembre de 2024 para Python 3.12.6 hasta 3.8.20), se aceleraron las actualizaciones de seguridad, ya que todas las versiones de Python eran inseguras (incluida la 2.7 [56] ) debido a problemas de seguridad que conducían a una posible ejecución remota de código [57] y envenenamiento de caché web . [58] En 2022, se aceleraron Python 3.10.4 y 3.9.12 [59] y 3.8.13, debido a muchos problemas de seguridad. [60] Cuando se lanzó Python 3.9.13 en mayo de 2022, se anunció que la serie 3.9 (que se une a las series más antiguas 3.8 y 3.7) solo recibiría correcciones de seguridad en el futuro. [61] El 7 de septiembre de 2022, se realizaron cuatro nuevas versiones debido a un posible ataque de denegación de servicio : 3.10.7, 3.9.14, 3.8.14 y 3.7.14. [62] [63]
Cada versión de Python desde la 3.5 ha añadido algo de sintaxis al lenguaje. La 3.10 añadió el |operador de tipo de unión [64] y las palabras clave matchand (para declaraciones de coincidencia de patronescase estructurales ). La 3.11 amplió la funcionalidad de manejo de excepciones . La 3.12 añadió la nueva palabra clave . Los cambios notables en la 3.11 con respecto a la 3.10 incluyen una mayor velocidad de ejecución del programa y un mejor informe de errores. [65] Python 3.11 afirma ser entre un 10 y un 60 % más rápido que Python 3.10, y Python 3.12 añade otro 5 % más a eso. También ha mejorado los mensajes de error y muchos otros cambios.type
Python 3.13 introduce más sintaxis para tipos, un nuevo y mejorado intérprete interactivo ( REPL ), con edición de múltiples líneas y soporte de color; un recolector de basura incremental (que produce pausas más cortas para la recolección en programas con muchos objetos, y además de la velocidad mejorada en 3.11 y 3.12), y un compilador experimental just-in-time (JIT) (tales características, pueden/deben ser habilitadas específicamente para el aumento de velocidad), [66] y un modo de compilación experimental de subprocesos libres, que deshabilita el bloqueo del intérprete global (GIL), permitiendo que los subprocesos se ejecuten de manera más concurrente, esta última característica habilitada con python3.13to python3.13t.exe.
Python 3.13 introduce algunos cambios en el comportamiento, es decir, nueva "semántica bien definida", corrección de errores (además de muchas eliminaciones de clases, funciones y métodos obsoletos, y eliminó parte de la API de C y módulos obsoletos): "La [antigua] implementación de locals()y frame.f_localses lenta, inconsistente y llena de errores [y tiene] muchos casos especiales y rarezas. Es posible que sea necesario cambiar el código que funciona en torno a ellos. El código que se usa locals()para plantillas simples o depuración de impresión seguirá funcionando correctamente". [67]
Desde el 7 de octubre de 2024 [actualizar], Python 3.13 es la última versión estable, y 3.13 y 3.12 son las únicas versiones con soporte activo (a diferencia de solo soporte de seguridad) y Python 3.9 es la versión compatible más antigua de Python (aunque en la fase de "soporte de seguridad"), debido a que Python 3.8 está llegando al final de su vida útil . [68] A partir de 3.13, esta y las versiones posteriores tienen 2 años de soporte completo (en lugar de uno y medio); seguido de 3 años de soporte de seguridad (para el mismo soporte total que antes).
Algunos módulos de la biblioteca estándar (más) y muchas clases, funciones y métodos obsoletos se eliminarán en Python 3.15 o 3.16. [69] [70]
Python 3.14 (ahora en alfa 1) [71] tiene cambios para las anotaciones, con PEP 649 "[preservando] casi todo el comportamiento existente de las anotaciones a partir de la semántica estándar". [72]
Su diseño ofrece cierto soporte para la programación funcional en la tradición de Lisp . Tiene funciones y ; listas por comprensiónfilter , diccionarios , conjuntos y expresiones generadoras . [80] La biblioteca estándar tiene dos módulos ( y ) que implementan herramientas funcionales tomadas de Haskell y Standard ML . [81]mapreduceitertoolsfunctools
Su filosofía central se resume en el Zen de Python (PEP 20), que incluye aforismos como: [82]
Lo bello es mejor que lo feo.
Explícito es mejor que implícito.
Lo simple es mejor que lo complejo.
Lo complejo es mejor que lo complicado.
La legibilidad cuenta.
Sin embargo, las características de Python violan regularmente estos principios y han recibido críticas por agregar una hinchazón innecesaria al lenguaje. [83] Las respuestas a estas críticas son que el Zen de Python es una guía en lugar de una regla. [84] La adición de algunas características nuevas había sido tan controvertida que Guido van Rossum renunció como dictador benévolo vitalicio después de las críticas por la adición del operador de expresión de asignación en Python 3.8. [85] [86]
Sin embargo, en lugar de construir toda su funcionalidad en su núcleo, Python fue diseñado para ser altamente extensible a través de módulos. Esta modularidad compacta lo ha hecho particularmente popular como un medio para agregar interfaces programables a aplicaciones existentes. La visión de Van Rossum de un lenguaje de núcleo pequeño con una gran biblioteca estándar y un intérprete fácilmente extensible surgió de sus frustraciones con ABC , que defendía el enfoque opuesto. [41]
Python afirma esforzarse por lograr una sintaxis y una gramática más simples y menos desordenadas, al tiempo que ofrece a los desarrolladores la posibilidad de elegir su metodología de codificación. En contraste con el lema de Perl " hay más de una manera de hacerlo ", Python adopta una filosofía de "debería haber una, y preferiblemente solo una, manera obvia de hacerlo". [82] En la práctica, sin embargo, Python proporciona muchas maneras de lograr la misma tarea. Hay, por ejemplo, al menos tres maneras de formatear un literal de cadena, sin certeza sobre cuál debería usar un programador. [87] Alex Martelli , miembro de la Python Software Foundation y autor de libros sobre Python, escribió: "Describir algo como 'inteligente' no se considera un cumplido en la cultura Python". [88]
Los desarrolladores de Python generalmente se esfuerzan por evitar la optimización prematura y rechazan parches a partes no críticas de la implementación de referencia de CPython que ofrecerían aumentos marginales en la velocidad a costa de la claridad. [89] La velocidad de ejecución se puede mejorar moviendo funciones críticas para la velocidad a módulos de extensión escritos en lenguajes como C, o usando un compilador justo a tiempo como PyPy . También es posible realizar una compilación cruzada a otros lenguajes, pero o bien no proporciona la aceleración completa que podría esperarse, ya que Python es un lenguaje muy dinámico , o se compila un subconjunto restringido de Python, y posiblemente se cambie ligeramente la semántica. [90]
Los desarrolladores de Python buscan que sea divertido de usar. Esto se refleja en su nombre, un tributo al grupo de comedia británico Monty Python [91] , y en enfoques ocasionalmente lúdicos de tutoriales y materiales de referencia, como el uso de los términos "spam" y "eggs" (una referencia a un sketch de Monty Python ) en los ejemplos, en lugar de los términos "foo" y "bar" que se usan a menudo . [92] [93] Un neologismo común en la comunidad Python es pythonic , que tiene una amplia gama de significados relacionados con el estilo del programa. El código "Pythonic" puede usar bien los modismos de Python , ser natural o mostrar fluidez en el lenguaje, o cumplir con la filosofía minimalista de Python y el énfasis en la legibilidad. El código que es difícil de entender o que se lee como una transcripción aproximada de otro lenguaje de programación se llama unpythonic . [94]
Sintaxis y semántica
Python está pensado para ser un lenguaje de fácil lectura. Su formato es visualmente despejado y a menudo utiliza palabras clave en inglés donde otros lenguajes utilizan puntuación. A diferencia de muchos otros lenguajes, no utiliza llaves para delimitar bloques y se permiten los puntos y comas después de las declaraciones, pero rara vez se utilizan. Tiene menos excepciones sintácticas y casos especiales que C o Pascal . [95]
Sangría
Python utiliza la sangría de espacios en blanco , en lugar de llaves o palabras clave, para delimitar bloques . Un aumento en la sangría viene después de ciertas declaraciones; una disminución en la sangría significa el final del bloque actual. [96] Por lo tanto, la estructura visual del programa representa con precisión su estructura semántica. [97] Esta característica a veces se denomina regla del lado opuesto . Algunos otros lenguajes utilizan la sangría de esta manera; pero en la mayoría, la sangría no tiene un significado semántico. El tamaño de sangría recomendado es de cuatro espacios. [98]
La declaración de asignación , utilizando un solo signo igual=
La ifdeclaración, que ejecuta condicionalmente un bloque de código, junto con elsey elif(una contracción de else-if)
La fordeclaración, que itera sobre un objeto iterable , capturando cada elemento en una variable local para su uso por el bloque adjunto.
La whiledeclaración, que ejecuta un bloque de código siempre que su condición sea verdadera
La trydeclaración, que permite que las excepciones generadas en su bloque de código adjunto sean capturadas y manejadas por exceptcláusulas (o nueva sintaxis except*en Python 3.11 para grupos de excepciones [99] ); también garantiza que el código de limpieza en un finallybloque siempre se ejecute independientemente de cómo salga el bloque.
La raisedeclaración, utilizada para generar una excepción específica o volver a generar una excepción detectada
La classdeclaración, que ejecuta un bloque de código y adjunta su espacio de nombres local a una clase , para su uso en programación orientada a objetos.
La withdeclaración, que encierra un bloque de código dentro de un administrador de contexto (por ejemplo, adquirir un bloqueo antes de que se ejecute, luego liberar el bloqueo; o abrir y cerrar un archivo ), permite un comportamiento similar al de adquisición de recursos como inicialización (RAII) y reemplaza un modismo try/finally común [100]
La continuedeclaración, que omite el resto de la iteración actual y continúa con la siguiente
La deldeclaración que elimina una variable, eliminando la referencia del nombre al valor y produciendo un error si se hace referencia a la variable antes de que se redefina.
La passdeclaración, que actúa como NOP , sintácticamente necesitaba crear un bloque de código vacío
La assertdeclaración se utiliza en la depuración para comprobar las condiciones que deberían aplicarse.
La yielddeclaración, que devuelve un valor de una función generadora (y también un operador); se utiliza para implementar corrutinas
La returndeclaración, utilizada para devolver un valor de una función
Las instrucciones importand fromse utilizan para importar módulos cuyas funciones o variables se pueden utilizar en el programa actual
Las declaraciones matchand case, un análogo de la construcción de la declaración switch , que compara una expresión con uno o más casos como una medida de control de flujo.
La sentencia de asignación ( =) vincula un nombre como referencia a un objeto separado asignado dinámicamente . Las variables pueden volver a vincularse en cualquier momento a cualquier objeto. En Python, un nombre de variable es un contenedor de referencia genérico sin un tipo de datos fijo ; sin embargo, siempre se refiere a algún objeto con un tipo. Esto se denomina tipado dinámico , en contraste con los lenguajes de tipado estático , donde cada variable puede contener solo un valor de un tipo determinado.
Python no admite la optimización de llamadas de cola ni las continuaciones de primera clase y, según Van Rossum, nunca lo hará. [101] [102] Sin embargo, se proporciona un mejor soporte para la funcionalidad similar a la de las corrutinas al extender los generadores de Python . [103] Antes de 2.5, los generadores eran iteradores perezosos ; los datos se pasaban unidireccionalmente fuera del generador. A partir de Python 2.5, es posible pasar datos de vuelta a una función de generador; y a partir de la versión 3.3, se pueden pasar a través de múltiples niveles de pila. [104]
Los operadores +, -, y *para la suma, resta y multiplicación matemática son similares a los de otros lenguajes, pero el comportamiento de la división difiere. Hay dos tipos de divisiones en Python: división de piso (o división de enteros) //y división de punto flotante /. [105] Python usa el **operador para la exponenciación.
Python utiliza el +operador para la concatenación de cadenas. Python utiliza el *operador para duplicar una cadena una cantidad específica de veces.
La sintaxis :=, denominada "operador morsa", se introdujo en Python 3.8. Asigna valores a las variables como parte de una expresión más grande. [108]
En Python, ==se compara por valor. isEl operador de Python se puede utilizar para comparar identidades de objetos (comparación por referencia) y las comparaciones se pueden encadenar, por ejemplo, .a<=b<=c
Python utiliza and, or, y notcomo operadores booleanos.
Python tiene un tipo de expresión llamada comprensión de lista y una expresión más general llamada expresión generadora . [80]
Las expresiones condicionales se escriben como [109] (diferente en el orden de los operandos del operador común a muchos otros lenguajes).xifcelseyc ? x : y
Python hace una distinción entre listas y tuplas . Las listas se escriben como , son mutables y no se pueden usar como claves de diccionarios (las claves de diccionario deben ser inmutables en Python). Las tuplas, escritas como , son inmutables y, por lo tanto, se pueden usar como claves de diccionarios, siempre que todos los elementos de la tupla sean inmutables. El operador se puede usar para concatenar dos tuplas, lo que no modifica directamente su contenido, sino que produce una nueva tupla que contiene los elementos de ambas. Por lo tanto, dada la variable inicialmente igual a , la ejecución primero evalúa , que produce , que luego se asigna de nuevo a —por lo tanto, "modificando efectivamente el contenido" de mientras se ajusta a la naturaleza inmutable de los objetos de tupla. Los paréntesis son opcionales para las tuplas en contextos no ambiguos. [110][1,2,3](1,2,3)+t(1,2,3)t=t+(4,5)t+(4,5)(1,2,3,4,5)tt
Python tiene una función de desempaquetado de secuencias , en la que múltiples expresiones, cada una de las cuales evalúa algo que se puede asignar (a una variable, propiedad escribible, etc.), se asocian de manera idéntica a la que se usa para formar literales de tupla y, en conjunto, se colocan en el lado izquierdo del signo igual en una declaración de asignación. La declaración espera un objeto iterable en el lado derecho del signo igual que produzca la misma cantidad de valores que las expresiones escribibles proporcionadas; cuando se itera a través de ellas, asigna cada uno de los valores producidos a la expresión correspondiente en el lado izquierdo. [111]
Python tiene un operador de "formato de cadena" %que funciona de manera análoga a printflas cadenas de formato en C, por ejemplo, evalúa como . En Python 2.6+ y 3+, esto se complementó con el método de la clase, por ejemplo . Python 3.6 agregó "f-strings": . [112]"spam=%s eggs=%d"%("blah",2)"spam=blah eggs=2"format()str"spam={0} eggs={1}".format("blah",2)spam="blah";eggs=2;f'spam={spam} eggs={eggs}'
En Python, las cadenas se pueden concatenar "sumándolas" (con el mismo operador que para sumar números enteros y flotantes), por ejemplo, returns . Si las cadenas contienen números, se agregan como cadenas en lugar de como números enteros, por ejemplo, returns ."spam"+"eggs""spameggs""2"+"2""22"
Delimitado por comillas simples o dobles; a diferencia de lo que ocurre en los shells de Unix , Perl y los lenguajes influenciados por Perl, las comillas simples y dobles funcionan de la misma manera. Ambos utilizan la barra invertida ( \) como carácter de escape . La interpolación de cadenas se hizo disponible en Python 3.6 como "literales de cadena formateados". [112]
Entre comillas triples (que comienzan y terminan con tres comillas simples o dobles), que pueden abarcar varias líneas y funcionar como estos documentos en shells, Perl y Ruby .
Variedades de cadenas sin formato , que se indican anteponiendo el literal de cadena con r. Las secuencias de escape no se interpretan; por lo tanto, las cadenas sin formato son útiles cuando las barras invertidas literales son comunes, como en las expresiones regulares y las rutas de estilo Windows . (Compare " @-quoting" en C# ).
Python tiene expresiones de índice de matriz y de segmentación de matriz en listas, denotadas como a[key], o . Los índices se basan en cero y los índices negativos son relativos al final. Las segmentaciones toman elementos desde el índice de inicio hasta el índice de finalización , pero sin incluirlo . El tercer parámetro de segmentación, llamado step o stride , permite omitir elementos e invertirlos. Los índices de segmentación se pueden omitir; por ejemplo, devuelve una copia de la lista completa. Cada elemento de una segmentación es una copia superficial .a[start:stop]a[start:stop:step]a[:]
En Python, se aplica una distinción estricta entre expresiones y declaraciones, a diferencia de lenguajes como Common Lisp , Scheme o Ruby . Esto lleva a la duplicación de algunas funciones. Por ejemplo:
Las funciones integradas eval()vs. (en Python 2, es una declaración); la primera es para expresiones, la segunda es para declaracionesexec()exec
Las declaraciones no pueden ser parte de una expresión, por lo que las listas y otras comprensiones o expresiones lambda , al ser todas expresiones, no pueden contener declaraciones. Un caso particular es que una declaración de asignación como no puede formar parte de la expresión condicional de una declaración condicional.a=1
Métodos
Los métodos de los objetos son funciones asociadas a la clase del objeto; la sintaxis es, para los métodos y funciones normales, azúcar sintáctica para . Los métodos de Python tienen un parámetro explícito para acceder a los datos de instancia , en contraste con el self (o ) implícito en algunos otros lenguajes de programación orientados a objetos (por ejemplo, C++ , Java , Objective-C , Ruby ). [113] Python también proporciona métodos, a menudo llamados métodos dunder (debido a que sus nombres comienzan y terminan con guiones bajos dobles), para permitir que las clases definidas por el usuario modifiquen la forma en que son manejadas por operaciones nativas, incluyendo longitud, comparación, en operaciones aritméticas y conversión de tipos. [114]instance.method(argument)Class.method(instance,argument)selfthis
Mecanografía
Python utiliza tipado de pato y tiene objetos tipados pero nombres de variables sin tipar. Las restricciones de tipo no se comprueban en tiempo de compilación ; en cambio, las operaciones sobre un objeto pueden fallar, lo que significa que no es de un tipo adecuado. A pesar de estar tipado dinámicamente , Python está fuertemente tipado , prohibiendo las operaciones que no están bien definidas (por ejemplo, agregar un número a una cadena) en lugar de intentar silenciosamente darles sentido.
Python permite a los programadores definir sus propios tipos mediante clases , que se utilizan con mayor frecuencia en la programación orientada a objetos . Las nuevas instancias de clases se construyen llamando a la clase (por ejemplo, o ), y las clases son instancias de la metaclase (que a su vez es una instancia de sí misma), lo que permite la metaprogramación y la reflexión .SpamClass()EggsClass()type
Antes de la versión 3.0, Python tenía dos tipos de clases (ambas usando la misma sintaxis): estilo antiguo y estilo nuevo ; [115] las versiones actuales de Python solo admiten la semántica del nuevo estilo.
Python admite anotaciones de tipo opcionales . [4] [116] Estas anotaciones no son impuestas por el lenguaje, pero pueden ser utilizadas por herramientas externas como mypy para detectar errores. [117] [118] Mypy también admite un compilador de Python llamado mypyc, que aprovecha las anotaciones de tipo para la optimización. [119]
Operaciones aritméticas
Python tiene los símbolos habituales para los operadores aritméticos ( +, -, *, /), el operador de división de base //y la operación de módulo% (donde el resto puede ser negativo, p. ej. 4 % -3 == -2). También tiene **para la exponenciación , p. ej . 5**3 == 125y 9**0.5 == 3.0, y un operador de multiplicación de matrices @. [123] Estos operadores funcionan como en las matemáticas tradicionales; con las mismas reglas de precedencia , los operadores infijo ( +y -también pueden ser unarios para representar números positivos y negativos respectivamente).
La división entre números enteros produce resultados de punto flotante. El comportamiento de la división ha cambiado significativamente con el tiempo: [124]
La versión actual de Python (es decir, desde la versión 3.0) cambió /para que siempre sea división de punto flotante, por ejemplo .5/2==2.5
//Se introdujo el operador de división de piso . Por lo tanto 7//3 == 2, -7//3 == -3, 7.5//3 == 2.0y -7.5//3 == -3.0. La suma hace que un módulo usado en Python 2.7 use las reglas de Python 3.0 para la división (ver arriba).from__future__importdivision
En términos de Python, /es una división verdadera (o simplemente división ), y //es una división de piso./ antes de la versión 3.0 es una división clásica . [124]
El redondeo hacia el infinito negativo, aunque es diferente de la mayoría de los lenguajes, agrega consistencia. Por ejemplo, significa que la ecuación siempre es verdadera. También significa que la ecuación es válida tanto para valores positivos como negativos de . Sin embargo, mantener la validez de esta ecuación significa que, si bien el resultado de está, como se esperaba, en el intervalo semiabierto [0, b ), donde es un entero positivo, tiene que estar en el intervalo ( b , 0] cuando es negativo. [125](a+b)//b==a//b+1b*(a//b)+a%b==aaa%bbb
Python proporciona una roundfunción para redondear un número de punto flotante al entero más cercano. Para desempatar , Python 3 usa round to even : round(1.5)y round(2.5)ambos producen 2. [126] Las versiones anteriores a la 3 usaban round-away-from-zero : round(0.5)is 1.0, round(-0.5)is −1.0. [127]
Python permite expresiones booleanas con múltiples relaciones de igualdad de una manera que es coherente con el uso general en matemáticas. Por ejemplo, la expresión a < b < cprueba si aes menor que by bes menor que c. [128] Los lenguajes derivados de C interpretan esta expresión de manera diferente: en C, la expresión primero evaluaría a < b, lo que daría como resultado 0 o 1, y luego ese resultado se compararía con c. [129]
Python utiliza aritmética de precisión arbitraria para todas las operaciones con números enteros. El Decimaltipo/clase del decimalmódulo proporciona números decimales en coma flotante con una precisión arbitraria predefinida y varios modos de redondeo. [130] La Fractionclase del fractionsmódulo proporciona precisión arbitraria para números racionales . [131]
Debido a la extensa biblioteca matemática de Python y a la biblioteca de terceros NumPy que extiende aún más las capacidades nativas, se utiliza frecuentemente como lenguaje de programación científico para ayudar en problemas como el procesamiento y la manipulación de datos numéricos. [132] [133]
Programa para calcular el factorial de un entero positivo:
n = int ( input ( 'Escribe un número y se imprimirá su factorial: ' ))Si n < 0 :raise ValueError ( 'Debe ingresar un entero no negativo' )factorial = 1para i en el rango ( 2 , n + 1 ):factorial *= iimprimir ( factorial )
Algunas partes de la biblioteca estándar están cubiertas por especificaciones (por ejemplo, la implementación de la interfaz de puerta de enlace del servidor web (WSGI) wsgirefsigue la norma PEP 333 [135] ), pero la mayoría están especificadas por su código, documentación interna y conjuntos de pruebas . Sin embargo, debido a que la mayor parte de la biblioteca estándar es código Python multiplataforma, solo es necesario modificar o reescribir unos pocos módulos para implementar variantes.
Al 17 de marzo de 2024, [actualizar]el Índice de paquetes de Python (PyPI), el repositorio oficial de software Python de terceros, contiene más de 523 000 [136] paquetes con una amplia gama de funcionalidades, que incluyen:
La mayoría de las implementaciones de Python (incluido CPython) incluyen un bucle de lectura-evaluación-impresión (REPL), lo que les permite funcionar como un intérprete de línea de comandos para el cual los usuarios ingresan declaraciones secuencialmente y reciben resultados inmediatamente.
Otros shells, incluidos IDLE e IPython , agregan capacidades adicionales como autocompletado mejorado, retención del estado de la sesión y resaltado de sintaxis .
CPython es la implementación de referencia de Python. Está escrito en C, cumpliendo con el estándar C89 (Python 3.11 usa C11 [138] ) con varias características C99 seleccionadas . CPython incluye sus propias extensiones C, pero las extensiones de terceros no se limitan a versiones anteriores de C; por ejemplo, se pueden implementar con C11 o C++. [139] [140] CPython compila programas Python en un bytecode intermedio [141] que luego es ejecutado por su máquina virtual . [142] CPython se distribuye con una gran biblioteca estándar escrita en una mezcla de C y Python nativo, y está disponible para muchas plataformas, incluyendo Windows (a partir de Python 3.9, el instalador de Python falla deliberadamente en la instalación en Windows 7 y 8; [143] [144] Windows XP fue compatible hasta Python 3.5) y la mayoría de los sistemas modernos tipo Unix , incluyendo macOS (y Apple M1 Macs, desde Python 3.9.1, con instalador experimental), con soporte no oficial para VMS . [145] La portabilidad de la plataforma fue una de sus primeras prioridades. [146] (Durante el desarrollo de Python 1 y 2, incluso OS/2 y Solaris fueron compatibles, [147] pero desde entonces se ha abandonado el soporte para muchas plataformas).
Todas las versiones actuales de Python (es decir, desde la 3.7) solo admiten sistemas operativos con soporte para subprocesos múltiples.
Otras implementaciones
Todas las implementaciones alternativas tienen una semántica al menos ligeramente diferente (por ejemplo, pueden tener diccionarios desordenados, a diferencia de todas las versiones actuales de Python), por ejemplo, con el ecosistema Python más grande, como con el soporte de la API C Python con PyPy:
PyPy es un intérprete rápido y compatible con Python 2.7 y 3.10. [148] [149] Su compilador just-in-time a menudo aporta una mejora significativa en la velocidad sobre CPython, pero algunas bibliotecas escritas en C no se pueden usar con él. [150] Tiene, por ejemplo, soporte RISC-V .
Codon es un lenguaje con un compilador adelantado en el tiempo (AOT) , que (AOT) compila un lenguaje similar a Python con tipos estáticos con "sintaxis y semántica casi idénticas a las de Python, hay algunas diferencias notables" [151] por ejemplo, utiliza números enteros de máquina de 64 bits, para mayor velocidad, no arbitrarios como Python, y afirma que las aceleraciones sobre CPython suelen ser del orden de 10-100x. Se compila a código de máquina (a través de LLVM ) y admite subprocesos múltiples nativos. [152] Codon también puede compilar a módulos de extensión de Python que se pueden importar y usar desde Python.
Stackless Python es una bifurcación importante de CPython que implementa microthreads ; no utiliza la pila de llamadas de la misma manera, lo que permite programas concurrentes masivos. PyPy también tiene una versión sin pila. [153]
Pyston es una variante del entorno de ejecución de Python que utiliza la compilación just-in-time para acelerar la ejecución de programas Python. [155]
Snek [157] [158] [159] Lenguaje de Computación Integrada (compatible, por ejemplo, con microcontroladores AVR de 8 bits como Arduino basado en ATmega 328P , así como otros más grandes compatibles con MicroPython ) "está inspirado en Python, pero no es Python. Es posible escribir programas Snek que se ejecuten en un sistema Python completo, pero la mayoría de los programas Python no se ejecutarán en Snek". [160] Es un lenguaje imperativo que no incluye OOP /clases, a diferencia de Python, y se simplifica a un tipo de número con precisión simple de 32 bits (similar a JavaScript , excepto que es más pequeño).
Implementaciones que ya no son compatibles
Se han desarrollado otros compiladores Python just-in-time, pero actualmente no son compatibles:
Google inició un proyecto llamado Unladen Swallow en 2009, con el objetivo de acelerar cinco veces el intérprete de Python mediante el uso de LLVM y de mejorar su capacidad de subprocesamiento múltiple para escalar a miles de núcleos, [161] mientras que las implementaciones ordinarias sufren el bloqueo global del intérprete .
Psyco es un compilador especializado en tiempo real que ya no se fabrica y que se integra con CPython y transforma el código de bytes en código de máquina en tiempo de ejecución. El código emitido está especializado para ciertos tipos de datos y es más rápido que el código Python estándar. Psyco no es compatible con Python 2.7 o versiones posteriores.
PyS60 fue un intérprete de Python 2 para teléfonos móviles de la serie 60 lanzado por Nokia en 2005. Implementó muchos de los módulos de la biblioteca estándar y algunos módulos adicionales para la integración con el sistema operativo Symbian . El Nokia N900 también es compatible con Python con bibliotecas de widgets GTK , lo que permite escribir y ejecutar programas en el dispositivo de destino. [162]
Compiladores cruzados a otros lenguajes
Hay varios compiladores/ transpiladores para lenguajes de objetos de alto nivel, ya sea con Python sin restricciones, un subconjunto restringido de Python o un lenguaje similar a Python como lenguaje fuente:
Brython, [163] Transcrypt [164] [165] y Pyjs (última versión en 2012) compilan Python a JavaScript .
Cython compila (un superconjunto de) Python a C. El código resultante también se puede utilizar con Python a través de llamadas API de nivel C directas al intérprete de Python.
PyJL compila/transpila un subconjunto de Python a "código fuente de Julia legible para humanos, mantenible y de alto rendimiento". [90] A pesar de afirmar un alto rendimiento, ninguna herramienta puede afirmar que lo hace para código Python arbitrario ; es decir, se sabe que no es posible compilar a un lenguaje más rápido o código de máquina. A menos que se cambie la semántica de Python, pero en muchos casos la aceleración es posible con pocos o ningún cambio en el código Python. El código fuente de Julia más rápido se puede usar desde Python, o compilar a código de máquina y basarlo de esa manera.
Nuitka compila Python en C. [166] Funciona con Python 3.4 a 3.12 (y 2.6 y 2.7), para las principales plataformas compatibles con Python (y Windows 7 o incluso Windows XP) y para Android. Afirma tener soporte completo para Python 3.10, algo de soporte para 3.11 y 3.12 y soporte experimental para Python 3.13. Es compatible con macOS, incluido el basado en Apple Silicon. Es un compilador gratuito, aunque también tiene complementos comerciales (por ejemplo, para ocultar el código fuente).
Numba se utiliza desde Python como herramienta (habilitada al agregar un decorador al código Python relevante), un compilador JIT que traduce un subconjunto de código Python y NumPy en código de máquina rápido.
Pythran compila un subconjunto de Python 3 a C++ ( C++11 ). [167]
RPython se puede compilar a C y se utiliza para construir el intérprete PyPy de Python.
El transpilador Python → 11l → C++ [168] compila un subconjunto de Python 3 a C++ ( C++17 ).
Proyectos más antiguos (o que no deben usarse con Python 3.x y la sintaxis más reciente):
Grumpy de Google (última versión en 2017) transpila Python 2 a Go . [169] [170] [171]
IronPython permite ejecutar programas Python 2.7 (y también está disponible una versión alfa , lanzada en 2021, para "Python 3.4, aunque se pueden incluir características y comportamientos de versiones posteriores" [172] ) en .NET Common Language Runtime . [173]
Jython compila Python 2.7 a bytecode Java, lo que permite el uso de las bibliotecas Java desde un programa Python. [174]
Pyrex (última versión en 2010) y Shed Skin (última versión en 2013) se compilan en C y C++ respectivamente.
Actuación
En EuroSciPy '13 se presentó una comparación del rendimiento de varias implementaciones de Python en una carga de trabajo no numérica (combinatoria). [175] El rendimiento de Python en comparación con otros lenguajes de programación también se evalúa mediante The Computer Language Benchmarks Game . [176]
Desarrollo
El desarrollo de Python se lleva a cabo en gran medida a través del proceso de Propuesta de Mejora de Python (PEP), el mecanismo principal para proponer nuevas características importantes, recopilar comentarios de la comunidad sobre problemas y documentar las decisiones de diseño de Python. [177] El estilo de codificación de Python se cubre en PEP 8. [178] La comunidad de Python y el consejo directivo revisan y comentan las PEP pendientes. [177]
La mejora del lenguaje se corresponde con el desarrollo de la implementación de referencia de CPython. La lista de correo python-dev es el foro principal para el desarrollo del lenguaje. Los problemas específicos se discutieron originalmente en el rastreador de errores Roundup alojado en por la fundación. [179] En 2022, todos los problemas y discusiones se migraron a GitHub . [180] El desarrollo se llevó a cabo originalmente en un repositorio de código fuente autoalojado que ejecutaba Mercurial , hasta que Python se trasladó a GitHub en enero de 2017. [181]
Las versiones públicas de CPython vienen en tres tipos, que se distinguen por qué parte del número de versión se incrementa:
Versiones incompatibles con versiones anteriores, en las que se espera que el código se rompa y se deba portar manualmente . La primera parte del número de versión se incrementa. Estos lanzamientos ocurren con poca frecuencia: la versión 3.0 se lanzó 8 años después de la 2.0. Según Guido van Rossum, es muy poco probable que alguna vez se lance una versión 4.0. [182]
Las versiones principales o "de características" son en gran medida compatibles con la versión anterior, pero introducen nuevas características. La segunda parte del número de versión se incrementa. A partir de Python 3.9, se espera que estas versiones se realicen anualmente. [183] [184] Cada versión principal está respaldada por correcciones de errores durante varios años después de su lanzamiento. [185]
Las versiones de corrección de errores, [186] que no introducen nuevas características, se publican aproximadamente cada 3 meses y se realizan cuando se ha corregido una cantidad suficiente de errores desde la última versión. Las vulnerabilidades de seguridad también se corrigen en estas versiones. La tercera y última parte del número de versión se incrementa. [186]
También se lanzan muchas versiones alfa, beta y candidatas a lanzamiento como vistas previas y para pruebas antes de los lanzamientos finales. Aunque existe un cronograma aproximado para cada lanzamiento, a menudo se retrasan si el código no está listo. El equipo de desarrollo de Python monitorea el estado del código ejecutando el gran conjunto de pruebas unitarias durante el desarrollo. [187]
La principal conferencia académica sobre Python es PyCon . También existen programas especiales de tutoría sobre Python, como PyLadies .
Python 3.12 eliminó wstrel significado de que las extensiones de Python [188] debían modificarse [189] y 3.10 agregó la coincidencia de patrones al lenguaje. [190]
Python 3.12 eliminó algunos módulos obsoletos y se eliminarán más en el futuro, obsoleto a partir de 3.13; el código de formato de matriz 'u' ya obsoleto se emitirá DeprecationWarningdesde 3.13 y se eliminará en Python 3.16. Se debe usar el código de formato 'w' en su lugar. Parte de ctypes también está obsoleto y http.server.CGIHTTPRequestHandleremitirá un DeprecationWarning, y se eliminará en 3.15. El uso de ese código ya tiene un alto potencial de errores de seguridad y funcionalidad. Partes del módulo de tipificación están obsoletas, por ejemplo, crear una typing.NamedTupleclase usando argumentos de palabras clave para denotar los campos y cosas así (y más) no se permitirá en Python 3.15.
Generadores de documentación de API
Las herramientas que pueden generar documentación para la API de Python incluyen pydoc (disponible como parte de la biblioteca estándar), Sphinx , Pdoc y sus bifurcaciones, Doxygen y Graphviz , entre otras. [191]
Nombramiento
El nombre de Python se deriva del grupo de comedia británico Monty Python , al que el creador de Python, Guido van Rossum, disfrutó mientras desarrollaba el lenguaje. Las referencias a Monty Python aparecen con frecuencia en el código y la cultura de Python; [192] por ejemplo, las variables metasintácticas que se usan a menudo en la literatura de Python son spam y eggs en lugar de las tradicionales foo y bar . [192] [193] La documentación oficial de Python también contiene varias referencias a rutinas de Monty Python. [194] [195] A los usuarios de Python a veces se les llama "Pythonistas". [196]
El prefijo Py- se utiliza para indicar que algo está relacionado con Python. Algunos ejemplos del uso de este prefijo en nombres de aplicaciones o bibliotecas de Python incluyen Pygame , un enlace de Simple DirectMedia Layer a Python (usado comúnmente para crear juegos); PyQt y PyGTK , que enlazan Qt y GTK a Python respectivamente; y PyPy , una implementación de Python escrita originalmente en Python.
Popularidad
Desde 2003, Python se ha clasificado constantemente entre los diez lenguajes de programación más populares en el índice de la comunidad de programación TIOBE , donde a diciembre de 2022 [actualizar]era el lenguaje más popular (por delante de C, C++ y Java ). [39] Fue seleccionado como lenguaje de programación del año (por "el mayor aumento en las calificaciones en un año") en 2007, 2010, 2018 y 2020 (el único lenguaje que lo ha hecho cuatro veces a partir de 2020 [197] ).[actualizar]
Las grandes organizaciones que utilizan Python incluyen Wikipedia , Google , [198] Yahoo !, [199] CERN , [200] NASA , [201] Facebook , [202] Amazon , Instagram , [203] Spotify , [204] y algunas entidades más pequeñas como Industrial Light & Magic [205] e ITA . [206] El sitio de redes sociales de noticias Reddit fue escrito principalmente en Python. [207] Las organizaciones que usan parcialmente Python incluyen Discord [208] y Baidu . [209]
La combinación de Python y Prolog ha demostrado ser particularmente útil para aplicaciones de IA, ya que Prolog proporciona representación de conocimiento y capacidades de razonamiento. El sistema Janus, en particular, explota las similitudes entre estos dos lenguajes, en parte debido a su uso de tipado dinámico y la naturaleza recursiva simple de sus estructuras de datos. Las aplicaciones típicas de esta combinación incluyen el procesamiento del lenguaje natural, la respuesta visual a consultas, el razonamiento geoespacial y el manejo de datos de la web semántica. [221] [222]
El sistema Natlog, implementado en Python, utiliza gramáticas de cláusulas definidas (DCG) como generadores de indicaciones para generadores de texto a texto como GPT3 y generadores de texto a imagen como DALL-E o Stable Diffusion. [223]
LibreOffice incluye Python y pretende reemplazar Java por Python. Su proveedor de scripts para Python es una característica fundamental [236] desde la versión 4.0 del 7 de febrero de 2013.
Lenguajes influenciados por Python
El diseño y la filosofía de Python han influido en muchos otros lenguajes de programación:
Boo utiliza sangría, una sintaxis similar y un modelo de objetos similar. [237]
Cobra utiliza sangría y una sintaxis similar, y su documento de Agradecimientos incluye a Python en primer lugar entre los lenguajes que lo influenciaron. [238]
CoffeeScript , un lenguaje de programación que se compila de forma cruzada con JavaScript, tiene una sintaxis inspirada en Python.
GDScript , un lenguaje de programación muy similar a Python, integrado en el motor de juego Godot . [240]
Go está diseñado para la "velocidad de trabajar en un lenguaje dinámico como Python" [241] y comparte la misma sintaxis para dividir matrices.
Groovy fue motivado por el deseo de llevar la filosofía de diseño de Python a Java . [242]
Julia fue diseñada para ser "tan útil para la programación general como Python". [27]
Mojo es un superconjunto no estricto [28] [243] de Python (por ejemplo, todavía faltan clases y se agrega, por ejemplo, struct ). [244]
Nim utiliza sangría y una sintaxis similar. [245]
El creador de Ruby , Yukihiro Matsumoto , ha dicho: "Quería un lenguaje de programación que fuera más potente que Perl y más orientado a objetos que Python. Por eso decidí diseñar mi propio lenguaje". [246]
Swift , un lenguaje de programación desarrollado por Apple, tiene una sintaxis inspirada en Python. [247]
Kotlin combina características de Python y Java, minimizando el código repetitivo para mejorar la eficiencia del desarrollador. [248]
Las prácticas de desarrollo de Python también han sido emuladas por otros lenguajes. Por ejemplo, la práctica de requerir un documento que describa la justificación y los problemas relacionados con un cambio en el lenguaje (en Python, un PEP) también se utiliza en Tcl , [249] Erlang , [250] y Swift. [251]
^ "Preguntas frecuentes generales sobre Python: documentación de Python 3". docs.python.org . Consultado el 7 de julio de 2024 .
^ "Python 0.9.1 parte 01/21". Archivos de alt.sources. Archivado desde el original el 11 de agosto de 2021. Consultado el 11 de agosto de 2021 .
^ "¿Por qué Python es un lenguaje dinámico y también fuertemente tipado?" Wiki de Python . Archivado desde el original el 14 de marzo de 2021. Consultado el 27 de enero de 2021 .
^ ab "PEP 483 – La teoría de las pistas de tipos". Python.org . Archivado desde el original el 14 de junio de 2020 . Consultado el 14 de junio de 2018 .
^ "PEP 11 – Compatibilidad con la plataforma CPython | peps.python.org". Propuestas de mejora de Python (PEP) . Consultado el 22 de abril de 2024 .
^ "PEP 738 – Incorporación de Android como plataforma compatible | peps.python.org". Propuestas de mejora de Python (PEP) . Consultado el 19 de mayo de 2024 .
^ "Descargar Python para otras plataformas". Python.org . Archivado desde el original el 27 de noviembre de 2020. Consultado el 18 de agosto de 2023 .
^ "test – Paquete de pruebas de regresión para Python – Documentación de Python 3.7.13". docs.python.org . Archivado desde el original el 17 de mayo de 2022 . Consultado el 17 de mayo de 2022 .
^ "plataforma – Acceso a los datos de identificación de la plataforma subyacente – Documentación de Python 3.10.4". docs.python.org . Archivado desde el original el 17 de mayo de 2022 . Consultado el 17 de mayo de 2022 .
^ Holth, Moore (30 de marzo de 2014). «PEP 0441 – Mejorar la compatibilidad de aplicaciones ZIP con Python». Archivado desde el original el 26 de diciembre de 2018. Consultado el 12 de noviembre de 2015 .
^ "Starlark Language". Archivado desde el original el 15 de junio de 2020. Consultado el 25 de mayo de 2019 .
^ ab "¿Por qué se creó Python en primer lugar?". Preguntas frecuentes generales sobre Python . Python Software Foundation. Archivado desde el original el 24 de octubre de 2012. Consultado el 22 de marzo de 2007. Tenía una amplia experiencia en la implementación de un lenguaje interpretado en el grupo ABC de CWI , y al trabajar con este grupo aprendí mucho sobre el diseño de lenguajes. Este es el origen de muchas características de Python, incluido el uso de sangría para agrupar declaraciones y la inclusión de tipos de datos de muy alto nivel (aunque los detalles son todos diferentes en Python).
^ "Manual de referencia de Ada 83 (declaración de aumento)". Archivado desde el original el 22 de octubre de 2019 . Consultado el 7 de enero de 2020 .
^ ab Kuchling, Andrew M. (22 de diciembre de 2006). "Entrevista con Guido van Rossum (julio de 1998)". amk.ca . Archivado desde el original el 1 de mayo de 2007 . Consultado el 12 de marzo de 2012 . Pasé un verano en el Centro de Investigación de Sistemas del DEC, donde conocí Modula-2+; el informe final de Modula-3 se estaba escribiendo allí aproximadamente al mismo tiempo. Lo que aprendí allí más tarde se mostró en el manejo de excepciones de Python, los módulos y el hecho de que los métodos contienen explícitamente "self" en su lista de parámetros. La segmentación de cadenas provino de Algol-68 e Icon.
^ abc "itertools – Funciones que crean iteradores para bucles eficientes – Documentación de Python 3.7.1". docs.python.org . Archivado desde el original el 14 de junio de 2020 . Consultado el 22 de noviembre de 2016 . Este módulo implementa una serie de bloques de construcción de iteradores inspirados en construcciones de APL, Haskell y SML.
^ van Rossum, Guido (1993). "Introducción a Python para programadores de UNIX/C". Actas de la NLUUG Najaarsconferentie (Grupo de usuarios de UNIX holandés) . CiteSeerX 10.1.1.38.2023 . Aunque el diseño de C está lejos de ser ideal, su influencia en Python es considerable.
^ ab "Clases". El tutorial de Python . Python Software Foundation. Archivado desde el original el 23 de octubre de 2012 . Consultado el 20 de febrero de 2012 . Es una mezcla de los mecanismos de clase que se encuentran en C++ y Modula-3
^ Lundh, Fredrik. "Llamada por objeto". effbot.org . Archivado desde el original el 23 de noviembre de 2019. Consultado el 21 de noviembre de 2017. Si reemplaza "CLU" por "Python", "registro" por "instancia" y "procedimiento" por "función o método", obtendrá una descripción bastante precisa del modelo de objetos de Python.
^ Simionato, Michele. "El orden de resolución del método de Python 2.3". Python Software Foundation. Archivado desde el original el 20 de agosto de 2020. Consultado el 29 de julio de 2014. El método C3 en sí no tiene nada que ver con Python, ya que fue inventado por personas que trabajaban en Dylan y se describe en un artículo destinado a los que tienen problemas de lenguaje.
^ Kuchling, AM "Functional Programming HOWTO". Documentación de Python v2.7.2 . Python Software Foundation. Archivado desde el original el 24 de octubre de 2012 . Consultado el 9 de febrero de 2012 . Las comprensiones de listas y las expresiones generadoras [...] son una notación concisa para tales operaciones, tomada del lenguaje de programación funcional Haskell.
^ Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 de mayo de 2001). «PEP 255 – Generadores simples». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 5 de junio de 2020. Consultado el 9 de febrero de 2012 .
^ "Más herramientas de control de flujo". Documentación de Python 3 . Python Software Foundation. Archivado desde el original el 4 de junio de 2016 . Consultado el 24 de julio de 2015 . Por demanda popular, se han agregado a Python algunas características que se encuentran comúnmente en lenguajes de programación funcionales como Lisp. Con la palabra clave lambda, se pueden crear pequeñas funciones anónimas.
^ "re – Operaciones con expresiones regulares – Documentación de Python 3.10.6". docs.python.org . Archivado desde el original el 18 de julio de 2018 . Consultado el 6 de septiembre de 2022 . Este módulo proporciona operaciones de coincidencia de expresiones regulares similares a las que se encuentran en Perl.
^ "CoffeeScript". coffeescript.org . Archivado desde el original el 12 de junio de 2020 . Consultado el 3 de julio de 2018 .
^ "Influencias de Perl y Python en JavaScript". www.2ality.com . 24 de febrero de 2013. Archivado desde el original el 26 de diciembre de 2018 . Consultado el 15 de mayo de 2015 .
^ Rauschmayer, Axel. «Capítulo 3: La naturaleza de JavaScript; influencias». O'Reilly, Speaking JavaScript . Archivado desde el original el 26 de diciembre de 2018. Consultado el 15 de mayo de 2015 .
^ ab "Por qué creamos a Julia". Sitio web de Julia . Febrero de 2012. Archivado desde el original el 2 de mayo de 2020. Consultado el 5 de junio de 2014. Queremos algo tan útil para la programación general como Python [...]
^ ab Krill, Paul (4 de mayo de 2023). «El lenguaje Mojo combina Python y MLIR para el desarrollo de IA». InfoWorld . Archivado desde el original el 5 de mayo de 2023 . Consultado el 5 de mayo de 2023 .
^ Ring Team (4 de diciembre de 2017). «Ring y otros idiomas». ring-lang.net . ring-lang. Archivado desde el original el 25 de diciembre de 2018 . Consultado el 4 de diciembre de 2017 .
^ Bini, Ola (2007). Proyectos prácticos de JRuby on Rails Web 2.0: llevar Ruby on Rails a la plataforma Java . Berkeley: APress. p. 3. ISBN978-1-59059-881-8.
^ Lattner, Chris (3 de junio de 2014). "Página de inicio de Chris Lattner". Chris Lattner. Archivado desde el original el 25 de diciembre de 2018. Consultado el 3 de junio de 2014. El lenguaje Swift es el producto del esfuerzo incansable de un equipo de expertos en lenguajes, gurús de la documentación, ninjas de la optimización de compiladores y un grupo interno de pruebas internas increíblemente importante que brindó comentarios para ayudar a refinar y probar ideas. Por supuesto, también se benefició enormemente de las experiencias ganadas con esfuerzo por muchos otros lenguajes en el campo, tomando ideas de Objective-C, Rust, Haskell, Ruby, Python, C#, CLU y muchos otros para enumerarlos.
^ Kuhlman, Dave. "Un libro sobre Python: Python para principiantes, Python avanzado y ejercicios de Python". Sección 1.1. Archivado desde el original (PDF) el 23 de junio de 2012.
^ "Acerca de Python". Python Software Foundation. Archivado desde el original el 20 de abril de 2012. Consultado el 24 de abril de 2012 ., segunda sección "Los fanáticos de Python usan la frase "baterías incluidas" para describir la biblioteca estándar, que cubre todo, desde el procesamiento asincrónico hasta archivos zip".
^ "PEP 206 – Biblioteca avanzada de Python". Python.org . Archivado desde el original el 5 de mayo de 2021 . Consultado el 11 de octubre de 2021 .
^ Rossum, Guido Van (20 de enero de 2009). «La historia de Python: una breve cronología de Python». La historia de Python . Archivado desde el original el 5 de junio de 2020. Consultado el 5 de marzo de 2021 .
^ Peterson, Benjamin (20 de abril de 2020). «Python 2.7.18, la última versión de Python 2». Python Insider . Archivado desde el original el 26 de abril de 2020. Consultado el 27 de abril de 2020 .
^ "Encuesta para desarrolladores de Stack Overflow 2022". Stack Overflow . Archivado desde el original el 27 de junio de 2022 . Consultado el 12 de agosto de 2022 .
^ "Infografía sobre el estado del ecosistema de desarrolladores en 2020". JetBrains: herramientas para desarrolladores para profesionales y equipos . Archivado desde el original el 1 de marzo de 2021. Consultado el 5 de marzo de 2021 .
^ ab "Índice TIOBE". TIOBE. Archivado desde el original el 25 de febrero de 2018. Consultado el 3 de enero de 2023. El índice de la comunidad de programación TIOBE es un indicador de la popularidad de los lenguajes de programación .Actualizado según sea necesario.
^ "Índice de popularidad de lenguajes de programación PYPL". pypl.github.io . Archivado desde el original el 14 de marzo de 2017 . Consultado el 26 de marzo de 2021 .
^ ab Venners, Bill (13 de enero de 2003). "The Making of Python". Artima Developer . Artima. Archivado desde el original el 1 de septiembre de 2016 . Consultado el 22 de marzo de 2007 .
^ van Rossum, Guido (29 de agosto de 2000). «SETL (era: tibio sobre los literales de rango)». Python-Dev (lista de correo). Archivado desde el original el 14 de julio de 2018. Consultado el 13 de marzo de 2011 .
^ van Rossum, Guido (20 de enero de 2009). «Una breve cronología de Python». La historia de Python . Archivado desde el original el 5 de junio de 2020. Consultado el 20 de enero de 2009 .
^ Fairchild, Carlie (12 de julio de 2018). «Guido van Rossum renuncia a su papel de dictador benévolo de Python de por vida». Linux Journal . Archivado desde el original el 13 de julio de 2018. Consultado el 13 de julio de 2018 .
^ "PEP 8100". Python Software Foundation. Archivado desde el original el 4 de junio de 2020. Consultado el 4 de mayo de 2019 .
^ "PEP 13 – Gobernanza del lenguaje Python". Python.org . Archivado desde el original el 27 de mayo de 2021 . Consultado el 25 de agosto de 2021 .
^ Kuchling, AM; Zadka, Moshe (16 de octubre de 2000). "Novedades en Python 2.0". Python Software Foundation. Archivado desde el original el 23 de octubre de 2012. Consultado el 11 de febrero de 2012 .
^ van Rossum, Guido (5 de abril de 2006). «PEP 3000 – Python 3000». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 3 de marzo de 2016. Consultado el 27 de junio de 2009 .
^ "2to3 – Traducción automática de código Python 2 a 3". docs.python.org . Archivado desde el original el 4 de junio de 2020 . Consultado el 2 de febrero de 2021 .
^ "PEP 373 – Calendario de lanzamiento de Python 2.7". python.org . Archivado desde el original el 19 de mayo de 2020 . Consultado el 9 de enero de 2017 .
^ "PEP 466 – Mejoras de seguridad de red para Python 2.7.x". python.org . Archivado desde el original el 4 de junio de 2020 . Consultado el 9 de enero de 2017 .
^ "El fin de Python 2". Python.org . Archivado desde el original el 12 de enero de 2020. Consultado el 22 de septiembre de 2019 .
^ "PEP 373 – Calendario de lanzamiento de Python 2.7". Python.org . Archivado desde el original el 13 de enero de 2020 . Consultado el 22 de septiembre de 2019 .
^ "Python Release Python 3.7.17". Python.org . Archivado desde el original el 31 de julio de 2023 . Consultado el 18 de agosto de 2023 .
^ mattip (25 de diciembre de 2023). "Lanzamiento de PyPy v7.3.14". PyPy . Archivado desde el original el 5 de enero de 2024 . Consultado el 5 de enero de 2024 .
^ "CVE-2021-3177". Portal del cliente de Red Hat . Archivado desde el original el 6 de marzo de 2021. Consultado el 26 de febrero de 2021 .
^ "CVE-2021-3177". CVE . Archivado desde el original el 27 de febrero de 2021 . Consultado el 26 de febrero de 2021 .
^ "CVE-2021-23336". CVE . Archivado desde el original el 24 de febrero de 2021 . Consultado el 26 de febrero de 2021 .
^ Langa, Łukasz (24 de marzo de 2022). «Python 3.10.4 y 3.9.12 ya están disponibles fuera de lo previsto». Python Insider . Archivado desde el original el 21 de abril de 2022. Consultado el 19 de abril de 2022 .
^ Langa, Łukasz (16 de marzo de 2022). «Python 3.10.3, 3.9.11, 3.8.13 y 3.7.13 ya están disponibles con contenido de seguridad». Python Insider . Archivado desde el original el 17 de abril de 2022. Consultado el 19 de abril de 2022 .
^ Langa, Łukasz (17 de mayo de 2022). «Python 3.9.13 ya está disponible». Python Insider . Archivado desde el original el 17 de mayo de 2022. Consultado el 21 de mayo de 2022 .
^ Langa, Łukasz (7 de septiembre de 2022). «Las versiones 3.10.7, 3.9.14, 3.8.14 y 3.7.14 de Python ya están disponibles». Python Insider . Archivado desde el original el 13 de septiembre de 2022. Consultado el 16 de septiembre de 2022 .
^ "CVE-2020-10735". CVE . Archivado desde el original el 20 de septiembre de 2022 . Consultado el 16 de septiembre de 2022 .
^ "Tipos incorporados".
^ corbet (24 de octubre de 2022). «Python 3.11 lanzado [LWN.net]». lwn.net . Consultado el 15 de noviembre de 2022 .
^ "Novedades de Python 3.13". Documentación de Python . Consultado el 30 de abril de 2024 .
^ "PEP 667 – Vistas consistentes de espacios de nombres | peps.python.org". Propuestas de mejora de Python (PEP) . Consultado el 7 de octubre de 2024 .
^ "Estado de las versiones de Python". Guía del desarrollador de Python . Consultado el 7 de octubre de 2024 .
^ Wouters, Thomas (9 de abril de 2024). «Python Insider: Python 3.12.3 y 3.13.0a6 publicados». Python Insider . Consultado el 29 de abril de 2024 .
^ "PEP 594 – Eliminación de baterías agotadas de la biblioteca estándar". Propuestas de mejora de Python . Python Softtware Foundation. 20 de mayo de 2019.
^ Hugo (15 de octubre de 2024). «Python Insider: Python 3.14.0 alpha 1 ya está disponible». Python Insider . Consultado el 16 de octubre de 2024 .
^ "PEP 649 – Evaluación diferida de anotaciones mediante descriptores | peps.python.org". Propuestas de mejora de Python (PEP) . Consultado el 16 de octubre de 2024 .
^ The Cain Gang Ltd. "Metaclases de Python: ¿Quién? ¿Por qué? ¿Cuándo?" (PDF) . Archivado desde el original (PDF) el 30 de mayo de 2009. Consultado el 27 de junio de 2009 .
^ "3.3. Nombres de métodos especiales". Referencia del lenguaje Python . Python Software Foundation. Archivado desde el original el 15 de diciembre de 2018. Consultado el 27 de junio de 2009 .
^ "PyDBC: precondiciones de método, poscondiciones de método e invariantes de clase para Python". Archivado desde el original el 23 de noviembre de 2019. Consultado el 24 de septiembre de 2011 .
^ "Contratos para Python". Archivado desde el original el 15 de junio de 2020. Consultado el 24 de septiembre de 2011 .
^ "PyDatalog". Archivado desde el original el 13 de junio de 2020. Consultado el 22 de julio de 2012 .
^ "Glue It All Together With Python" (Pégalo todo junto con Python). Python.org . Consultado el 30 de septiembre de 2024 .
^ "Extensión e incrustación del intérprete de Python: recuento de referencias". Docs.python.org. Archivado desde el original el 18 de octubre de 2012. Consultado el 5 de junio de 2020. Dado que Python hace un uso intensivo de y , necesita una estrategia para evitar fugas de memoria, así como el uso de memoria liberada. El método elegido se llama recuento de referencias .malloc()free()
^ ab Hettinger, Raymond (30 de enero de 2002). «PEP 289 – Expresiones generadoras». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 14 de junio de 2020. Consultado el 19 de febrero de 2012 .
^ "6.5 itertools – Funciones que crean iteradores para bucles eficientes". Docs.python.org. Archivado desde el original el 14 de junio de 2020. Consultado el 22 de noviembre de 2016 .
^ ab Peters, Tim (19 de agosto de 2004). «PEP 20 – El zen de Python». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 26 de diciembre de 2018. Consultado el 24 de noviembre de 2008 .
^ Lutz, Mark (enero de 2022). «Cambios en Python 2014+». Aprendiendo Python . Archivado desde el original el 15 de marzo de 2024. Consultado el 25 de febrero de 2024 .
^ "Confusión sobre una regla en El zen de Python". Ayuda de Python - Discusiones en Python.org . 3 de mayo de 2022. Archivado desde el original el 25 de febrero de 2024 . Consultado el 25 de febrero de 2024 .
^ Ambi, Chetan (4 de julio de 2021). «El operador Walrus de Python más controvertido». Python simplificado . Archivado desde el original el 27 de agosto de 2023. Consultado el 5 de febrero de 2024 .
^ Grifski, Jeremy (24 de mayo de 2020). «La controversia detrás del operador Walrus en Python». The Renegade Coder . Archivado desde el original el 28 de diciembre de 2023. Consultado el 25 de febrero de 2024 .
^ Bader, Dan. "Mejores prácticas de formato de cadenas en Python". Real Python . Archivado desde el original el 18 de febrero de 2024. Consultado el 25 de febrero de 2024 .
^ Martelli, Alex; Ravenscroft, Anna; Ascher, David (2005). Libro de cocina de Python, 2.ª edición. O'Reilly Media . pág. 230. ISBN978-0-596-00797-3Archivado del original el 23 de febrero de 2020 . Consultado el 14 de noviembre de 2015 .
^ "Cultura Python". ebeab . 21 de enero de 2014. Archivado desde el original el 30 de enero de 2014.
^ ab "Transpilación de Python a Julia con PyJL" (PDF) . Archivado (PDF) del original el 19 de noviembre de 2023 . Consultado el 20 de septiembre de 2023 . Después de modificar manualmente una línea de código especificando la información de tipo necesaria, obtuvimos una aceleración de 52,6×, lo que hace que el código de Julia traducido sea 19,5× más rápido que el código Python original.
^ "¿Por qué se llama Python?". Preguntas frecuentes generales sobre Python . Docs.python.org. Archivado desde el original el 24 de octubre de 2012. Consultado el 3 de enero de 2023 .
^ "15 maneras en las que Python es una fuerza poderosa en la Web". Archivado desde el original el 11 de mayo de 2019 . Consultado el 3 de julio de 2018 .
^ "pprint – Impresora bonita de datos – Documentación de Python 3.11.0". docs.python.org . Archivado desde el original el 22 de enero de 2021 . Consultado el 5 de noviembre de 2022 . stuff=['spam', 'eggs', 'lumberjack', 'knights', 'ni']
^ "Code Style – The Hitchhiker's Guide to Python" (Estilo de código: la guía del autoestopista para Python). docs.python-guide.org . Archivado desde el original el 27 de enero de 2021. Consultado el 20 de enero de 2021 .
^ "¿Es Python un buen lenguaje para programadores principiantes?". Preguntas frecuentes generales sobre Python . Python Software Foundation. Archivado desde el original el 24 de octubre de 2012. Consultado el 21 de marzo de 2007 .
^ "Mitos sobre la sangría en Python". Secnetix.de. Archivado desde el original el 18 de febrero de 2018. Consultado el 19 de abril de 2011 .
^ Guttag, John V. (12 de agosto de 2016). Introducción a la computación y la programación con Python: con aplicación para comprender los datos . MIT Press. ISBN978-0-262-52962-4.
^ "PEP 8 – Guía de estilo para código Python". Python.org . Archivado desde el original el 17 de abril de 2019. Consultado el 26 de marzo de 2019 .
^ "8. Errores y excepciones: documentación de Python 3.12.0a0". docs.python.org . Archivado desde el original el 9 de mayo de 2022 . Consultado el 9 de mayo de 2022 .
^ "Lo más destacado: Python 2.5". Python.org . Archivado desde el original el 4 de agosto de 2019. Consultado el 20 de marzo de 2018 .
^ van Rossum, Guido (22 de abril de 2009). «Tail Recursion Elimination». Neopythonic.blogspot.be. Archivado desde el original el 19 de mayo de 2018. Consultado el 3 de diciembre de 2012 .
^ van Rossum, Guido (9 de febrero de 2006). «El diseño del lenguaje no consiste simplemente en resolver acertijos». Foros de Artima . Artima. Archivado desde el original el 17 de enero de 2020. Consultado el 21 de marzo de 2007 .
^ van Rossum, Guido; Eby, Phillip J. (10 de mayo de 2005). «PEP 342 – Corrutinas mediante generadores mejorados». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 29 de mayo de 2020. Consultado el 19 de febrero de 2012 .
^ "PEP 380". Python.org. Archivado desde el original el 4 de junio de 2020. Consultado el 3 de diciembre de 2012 .
^ "división". python.org . Archivado desde el original el 20 de julio de 2006 . Consultado el 30 de julio de 2014 .
^ "PEP 0465 – Un operador infijo dedicado para la multiplicación de matrices". python.org . Archivado desde el original el 4 de junio de 2020 . Consultado el 1 de enero de 2016 .
^ "Lanzamiento y registro de cambios de Python 3.5.1". python.org . Archivado desde el original el 14 de mayo de 2020 . Consultado el 1 de enero de 2016 .
^ "Novedades de Python 3.8". Archivado desde el original el 8 de junio de 2020. Consultado el 14 de octubre de 2019 .
^ van Rossum, Guido; Hettinger, Raymond (7 de febrero de 2003). «PEP 308 – Conditional Expressions». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 13 de marzo de 2016. Consultado el 13 de julio de 2011 .
^ "4. Tipos integrados: documentación de Python 3.6.3rc1". python.org . Archivado desde el original el 14 de junio de 2020 . Consultado el 1 de octubre de 2017 .
^ "5.3. Tuplas y secuencias: documentación de Python 3.7.1rc2". python.org . Archivado desde el original el 10 de junio de 2020 . Consultado el 17 de octubre de 2018 .
^ ab «PEP 498 – Interpolación de cadenas literales». python.org . Archivado desde el original el 15 de junio de 2020 . Consultado el 8 de marzo de 2017 .
^ "¿Por qué se debe usar 'self' explícitamente en las definiciones y llamadas de métodos?". Preguntas frecuentes sobre diseño e historia . Python Software Foundation. Archivado desde el original el 24 de octubre de 2012. Consultado el 19 de febrero de 2012 .
^ Sweigart, Al (2020). Más allá de lo básico con Python: mejores prácticas para escribir código limpio. No Starch Press. p. 322. ISBN978-1-59327-966-0Archivado del original el 13 de agosto de 2021 . Consultado el 7 de julio de 2021 .
^ "Referencia del lenguaje Python, sección 3.3. Clases clásicas y de nuevo estilo, para la versión 2.7.1". Archivado desde el original el 26 de octubre de 2012 . Consultado el 12 de enero de 2011 .
^ "PEP 484 – Sugerencias de tipo | peps.python.org". peps.python.org . Archivado desde el original el 27 de noviembre de 2023 . Consultado el 29 de noviembre de 2023 .
^ "Tiping — Soporte para sugerencias de tipos". Documentación de Python . Python Software Foundation. Archivado desde el original el 21 de febrero de 2020 . Consultado el 22 de diciembre de 2023 .
^ «mypy – Tipado estático opcional para Python». Archivado desde el original el 6 de junio de 2020. Consultado el 28 de enero de 2017 .
^ "Introducción". mypyc.readthedocs.io . Archivado desde el original el 22 de diciembre de 2023 . Consultado el 22 de diciembre de 2023 .
^ "15. Aritmética de punto flotante: problemas y limitaciones – Documentación de Python 3.8.3". docs.python.org . Archivado desde el original el 6 de junio de 2020 . Consultado el 6 de junio de 2020 . Casi todas las máquinas actuales (noviembre de 2000) utilizan aritmética de punto flotante IEEE-754, y casi todas las plataformas asignan los flotantes de Python a la "doble precisión" IEEE-754.
^ Zadka, Moshe; van Rossum, Guido (11 de marzo de 2001). «PEP 237 – Unificación de enteros largos y enteros». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 28 de mayo de 2020. Consultado el 24 de septiembre de 2011 .
^ "Tipos integrados". Archivado desde el original el 14 de junio de 2020. Consultado el 3 de octubre de 2019 .
^ "PEP 465 – Un operador infijo dedicado para la multiplicación de matrices". python.org . Archivado desde el original el 29 de mayo de 2020 . Consultado el 3 de julio de 2018 .
^ ab Zadka, Moshe; van Rossum, Guido (11 de marzo de 2001). «PEP 238 – Cambio del operador de división». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 28 de mayo de 2020. Consultado el 23 de octubre de 2013 .
^ "Por qué la división de enteros de Python tiene límites inferiores". 24 de agosto de 2010. Archivado desde el original el 5 de junio de 2020. Consultado el 25 de agosto de 2010 .
^ "round", La biblioteca estándar de Python, versión 3.2, §2: Funciones integradas , archivado desde el original el 25 de octubre de 2012 , consultado el 14 de agosto de 2011
^ "round", La biblioteca estándar de Python, versión 2.7, §2: Funciones integradas , archivado desde el original el 27 de octubre de 2012 , consultado el 14 de agosto de 2011
^ Beazley, David M. (2009). Referencia esencial de Python (4.ª ed.). Addison-Wesley Professional. pág. 66. ISBN9780672329784.
^ ab Batista, Facundo (17 de octubre de 2003). «PEP 327 – Tipo de datos decimales». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 4 de junio de 2020. Consultado el 24 de noviembre de 2008 .
^ "Novedades de Python 2.6". Documentación de Python v2.6.9 . 29 de octubre de 2013. Archivado desde el original el 23 de diciembre de 2019 . Consultado el 26 de septiembre de 2015 .
^ "10 razones por las que Python es genial para la investigación (y algunas razones por las que no lo es) – Hoyt Koepke". Departamento de Estadística de la Universidad de Washington . Archivado desde el original el 31 de mayo de 2020. Consultado el 3 de febrero de 2019 .
^ Shell, Scott (17 de junio de 2014). «Una introducción a Python para la computación científica» (PDF) . Archivado (PDF) del original el 4 de febrero de 2019. Consultado el 3 de febrero de 2019 .
^ Piotrowski, Przemyslaw (julio de 2006). "Construya un entorno de desarrollo web rápido para Python Server Pages y Oracle". Oracle Technology Network . Oracle. Archivado desde el original el 2 de abril de 2019. Consultado el 12 de marzo de 2012 .
^ Eby, Phillip J. (7 de diciembre de 2003). «PEP 333 – Interfaz de puerta de enlace de servidor web Python v1.0». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 14 de junio de 2020. Consultado el 19 de febrero de 2012 .
^ "PyPI". PyPI . 17 de marzo de 2024. Archivado desde el original el 17 de marzo de 2024.
^ Enthought, Canopy. «Canopy». www.enthought.com . Archivado desde el original el 15 de julio de 2017. Consultado el 20 de agosto de 2016 .
^ "PEP 7 – Guía de estilo para código C | peps.python.org". peps.python.org . Archivado desde el original el 24 de abril de 2022 . Consultado el 28 de abril de 2022 .
^ "4. Creación de extensiones de C y C++: documentación de Python 3.9.2". docs.python.org . Archivado desde el original el 3 de marzo de 2021 . Consultado el 1 de marzo de 2021 .
^ van Rossum, Guido (5 de junio de 2001). «PEP 7 – Guía de estilo para código C». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 1 de junio de 2020. Consultado el 24 de noviembre de 2008 .
^ "Código de bytes de CPython". Docs.python.org. Archivado desde el original el 5 de junio de 2020. Consultado el 16 de febrero de 2016 .
^ "Componentes internos de Python 2.5" (PDF) . Archivado (PDF) del original el 6 de agosto de 2012 . Consultado el 19 de abril de 2011 .
^ "Registro de cambios: documentación de Python 3.9.0". docs.python.org . Archivado desde el original el 7 de febrero de 2021 . Consultado el 8 de febrero de 2021 .
^ "Descargar Python". Python.org . Archivado desde el original el 8 de diciembre de 2020. Consultado el 13 de diciembre de 2020 .
^ "historia [vmspython]". www.vmspython.org . Archivado desde el original el 2 de diciembre de 2020 . Consultado el 4 de diciembre de 2020 .
^ "Entrevista con Guido van Rossum". Oreilly.com. Archivado desde el original el 16 de julio de 2014. Consultado el 24 de noviembre de 2008 .
^ "Descargar Python para otras plataformas". Python.org . Archivado desde el original el 27 de noviembre de 2020. Consultado el 4 de diciembre de 2020 .
^ "Compatibilidad con PyPy". Pypy.org. Archivado desde el original el 6 de junio de 2020. Consultado el 3 de diciembre de 2012 .
^ Equipo de PyPy (28 de diciembre de 2019). «Descargar e instalar». PyPy . Archivado desde el original el 8 de enero de 2022 . Consultado el 8 de enero de 2022 .
^ "comparación de velocidad entre CPython y Pypy". Speed.pypy.org. Archivado desde el original el 10 de mayo de 2021. Consultado el 3 de diciembre de 2012 .
^ "Codon: diferencias con Python". Archivado desde el original el 25 de mayo de 2023. Consultado el 28 de agosto de 2023 .
^ Lawson, Loraine (14 de marzo de 2023). «El compilador creado por el MIT acelera el código Python». The New Stack . Archivado desde el original el 6 de abril de 2023. Consultado el 28 de agosto de 2023 .
^ "Características de Stackless a nivel de aplicación: documentación de PyPy 2.0.2". Doc.pypy.org. Archivado desde el original el 4 de junio de 2020. Consultado el 17 de julio de 2013 .
^ "Python para EV3". LEGO Education . Archivado desde el original el 7 de junio de 2020. Consultado el 17 de abril de 2019 .
^ Yegulalp, Serdar (29 de octubre de 2020). «Pyston regresa de entre los muertos para acelerar Python». InfoWorld . Archivado desde el original el 27 de enero de 2021. Consultado el 26 de enero de 2021 .
^ "cinder: la bifurcación de CPython orientada al rendimiento de Instagram". GitHub . Archivado desde el original el 4 de mayo de 2021 . Consultado el 4 de mayo de 2021 .
^ Aroca, Rafael (7 de agosto de 2021). «Snek Lang: se siente como Python en Arduinos». Yet Another Technology Blog . Archivado desde el original el 5 de enero de 2024 . Consultado el 4 de enero de 2024 .
^ Aufranc (CNXSoft), Jean-Luc (16 de enero de 2020). «Snekboard controla las funciones de potencia de LEGO con lenguajes de programación CircuitPython o Snek (financiación colectiva) – CNX Software». CNX Software – Embedded Systems News . Archivado desde el original el 5 de enero de 2024. Consultado el 4 de enero de 2024 .
^ Kennedy (@mkennedy), Michael. "¿Listo para descubrir si eres famoso?". pythonbytes.fm . Archivado desde el original el 5 de enero de 2024. Consultado el 4 de enero de 2024 .
^ Packard, Keith (20 de diciembre de 2022). «El lenguaje de programación Snek: un lenguaje informático integrado inspirado en Python» (PDF) . Archivado (PDF) del original el 4 de enero de 2024. Consultado el 4 de enero de 2024 .
^ "Planes para optimizar Python". Google Project Hosting . 15 de diciembre de 2009. Archivado desde el original el 11 de abril de 2016. Consultado el 24 de septiembre de 2011 .
^ "Python en el Nokia N900". Geometría estocástica . 29 de abril de 2010. Archivado desde el original el 20 de junio de 2019. Consultado el 9 de julio de 2015 .
^ "Brython". brython.info . Archivado desde el original el 3 de agosto de 2018 . Consultado el 21 de enero de 2021 .
^ "Transcrypt – Python en el navegador". transcrypt.org . Archivado desde el original el 19 de agosto de 2018 . Consultado el 22 de diciembre de 2020 .
^ "Transcrypt: Anatomía de un compilador de Python a JavaScript". InfoQ . Archivado desde el original el 5 de diciembre de 2020 . Consultado el 20 de enero de 2021 .
^ "Nuitka Home | Nuitka Home". nuitka.net . Archivado desde el original el 30 de mayo de 2020 . Consultado el 18 de agosto de 2017 .
^ Guelton, Serge; Brunet, Pierrick; Amini, Mehdi; Merlini, Adrien; Corbillon, Xavier; Raynaud, Alan (16 de marzo de 2015). "Pythran: permitiendo la optimización estática de programas científicos en Python". Computational Science & Discovery . 8 (1). IOP Publishing: 014001. Bibcode :2015CS&D....8a4001G. doi : 10.1088/1749-4680/8/1/014001 . ISSN 1749-4699.
^ "El transpilador Python → 11l → C++". Archivado desde el original el 24 de septiembre de 2022 . Consultado el 17 de julio de 2022 .
^ "google/grumpy". 10 de abril de 2020. Archivado desde el original el 15 de abril de 2020. Consultado el 25 de marzo de 2020 en GitHub.
^ "Proyectos". opensource.google . Archivado desde el original el 24 de abril de 2020 . Consultado el 25 de marzo de 2020 .
^ Francisco, Thomas Claburn en San. "El código Grumpy de Google hace que Python Go". www.theregister.com . Archivado desde el original el 7 de marzo de 2021 . Consultado el 20 de enero de 2021 .
^ "GitHub – IronLanguages/ironpython3: Implementación de Python 3.x para .NET Framework que se basa en Dynamic Language Runtime". GitHub . Archivado desde el original el 28 de septiembre de 2021.
^ "IronPython.net /". ironpython.net . Archivado desde el original el 17 de abril de 2021.
^ "Preguntas frecuentes sobre Jython". www.jython.org . Archivado desde el original el 22 de abril de 2021. Consultado el 22 de abril de 2021 .
^ Murri, Riccardo (2013). Rendimiento de los entornos de ejecución de Python en un código científico no numérico . Conferencia Europea sobre Python en la Ciencia (EuroSciPy). arXiv : 1404.6388 . Bibcode :2014arXiv1404.6388M.
^ "El juego de los benchmarks de lenguaje informático". Archivado desde el original el 14 de junio de 2020. Consultado el 30 de abril de 2020 .
^ ab Warsaw, Barry; Hylton, Jeremy; Goodger, David (13 de junio de 2000). «PEP 1 – Propósito y directrices del PEP». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 6 de junio de 2020. Consultado el 19 de abril de 2011 .
^ "PEP 8 – Guía de estilo para código Python". Python.org . Archivado desde el original el 17 de abril de 2019. Consultado el 26 de marzo de 2019 .
^ Cannon, Brett. "Guido, algunos chicos y una lista de correo: cómo se desarrolla Python". python.org . Python Software Foundation. Archivado desde el original el 1 de junio de 2009 . Consultado el 27 de junio de 2009 .
^ "Trasladando los errores de Python a GitHub [LWN.net]". Archivado desde el original el 2 de octubre de 2022 . Consultado el 2 de octubre de 2022 .
^ "Guía para desarrolladores de Python: Guía para desarrolladores de Python". devguide.python.org . Archivado desde el original el 9 de noviembre de 2020 . Consultado el 17 de diciembre de 2019 .
^ Hughes, Owen (24 de mayo de 2021). «Lenguajes de programación: por qué Python 4.0 podría no llegar nunca, según su creador». TechRepublic . Archivado desde el original el 14 de julio de 2022 . Consultado el 16 de mayo de 2022 .
^ "PEP 602 – Ciclo de lanzamiento anual de Python". Python.org . Archivado desde el original el 14 de junio de 2020. Consultado el 6 de noviembre de 2019 .
^ "Cambiar la cadencia de publicación de Python [LWN.net]". lwn.net . Archivado desde el original el 6 de noviembre de 2019 . Consultado el 6 de noviembre de 2019 .
^ Norwitz, Neal (8 de abril de 2002). «[Python-Dev] Release Schedules (was Stability & change)». Archivado desde el original el 15 de diciembre de 2018. Consultado el 27 de junio de 2009 .
^ ab Aahz; Baxter, Anthony (15 de marzo de 2001). «PEP 6 – Lanzamientos con corrección de errores». Propuestas de mejora de Python . Python Software Foundation. Archivado desde el original el 5 de junio de 2020. Consultado el 27 de junio de 2009 .
^ "Python Buildbot". Guía del desarrollador de Python . Python Software Foundation. Archivado desde el original el 5 de junio de 2020. Consultado el 24 de septiembre de 2011 .
^ "1. Extender Python con C o C++ – Documentación de Python 3.9.1". docs.python.org . Archivado desde el original el 23 de junio de 2020 . Consultado el 14 de febrero de 2021 .
^ "PEP 623 – Eliminar wstr de Unicode". Python.org . Archivado desde el original el 5 de marzo de 2021 . Consultado el 14 de febrero de 2021 .
^ "PEP 634 – Coincidencia de patrones estructurales: especificación". Python.org . Archivado desde el original el 6 de mayo de 2021 . Consultado el 14 de febrero de 2021 .
^ "Herramientas de documentación". Python.org . Archivado desde el original el 11 de noviembre de 2020. Consultado el 22 de marzo de 2021 .
^ ab "Despertando el apetito". El tutorial de Python . Python Software Foundation. Archivado desde el original el 26 de octubre de 2012 . Consultado el 20 de febrero de 2012 .
^ "En Python, ¿debería usar else después de un retorno en un bloque if?". Desbordamiento de pila . Stack Exchange. 17 de febrero de 2011. Archivado desde el original el 20 de junio de 2019 . Consultado el 6 de mayo de 2011 .
^ Lutz, Mark (2009). Aprendiendo Python: Programación orientada a objetos poderosa. O'Reilly Media, Inc. p. 17. ISBN9781449379322Archivado desde el original el 17 de julio de 2017 . Consultado el 9 de mayo de 2017 .
^ Fehily, Chris (2002). Python. Peachpit Press. pág. xv. ISBN9780201748840Archivado desde el original el 17 de julio de 2017 . Consultado el 9 de mayo de 2017 .
^ Lubanovic, Bill (2014). Introducción a Python. Sebastopol, CA: O'Reilly Media. pág. 305. ISBN978-1-4493-5936-2. Recuperado el 31 de julio de 2023 .
^ Blake, Troy (18 de enero de 2021). "Índice TIOBE de enero de 2021". Noticias e información tecnológica de SeniorDBA . Archivado desde el original el 21 de marzo de 2021. Consultado el 26 de febrero de 2021 .
^ "Citas sobre Python". Python Software Foundation. Archivado desde el original el 3 de junio de 2020. Consultado el 8 de enero de 2012 .
^ "Organizaciones que utilizan Python". Python Software Foundation. Archivado desde el original el 21 de agosto de 2018. Consultado el 15 de enero de 2009 .
^ "Python: el santo grial de la programación". Boletín del CERN (31/2006). Publicaciones del CERN. 31 de julio de 2006. Archivado desde el original el 15 de enero de 2013. Consultado el 11 de febrero de 2012 .
^ Shafer, Daniel G. (17 de enero de 2003). «Python optimiza el diseño de la misión del transbordador espacial». Python Software Foundation. Archivado desde el original el 5 de junio de 2020. Consultado el 24 de noviembre de 2008 .
^ "Tornado: el marco web en tiempo real de Facebook para Python – Facebook para desarrolladores". Facebook para desarrolladores . Archivado desde el original el 19 de febrero de 2019. Consultado el 19 de junio de 2018 .
^ "Lo que impulsa a Instagram: cientos de instancias, docenas de tecnologías". Ingeniería de Instagram. 11 de diciembre de 2016. Archivado desde el original el 15 de junio de 2020. Consultado el 27 de mayo de 2019 .
^ "Cómo usamos Python en Spotify". Spotify Labs . 20 de marzo de 2013. Archivado desde el original el 10 de junio de 2020. Consultado el 25 de julio de 2018 .
^ Fortenberry, Tim (17 de enero de 2003). «Industrial Light & Magic Runs on Python». Python Software Foundation. Archivado desde el original el 6 de junio de 2020. Consultado el 11 de febrero de 2012 .
^ Taft, Darryl K. (5 de marzo de 2007). "Python se cuela en los sistemas". eWeek.com . Ziff Davis Holdings. Archivado desde el original el 13 de agosto de 2021. Consultado el 24 de septiembre de 2011 .
^ GitHub – reddit-archive/reddit: código histórico de reddit.com., The Reddit Archives, archivado desde el original el 1 de junio de 2020 , consultado el 20 de marzo de 2019
^ "Comunicación en tiempo real a gran escala con Elixir en Discord". 8 de octubre de 2020.
^ "¿En qué lenguaje de programación está integrado Baidu?". 5 de julio de 2018.
^ "Estadísticas de uso y cuota de mercado de Python para sitios web". 2012. Archivado desde el original el 13 de agosto de 2021. Consultado el 18 de diciembre de 2012 .
^ Oliphant, Travis (2007). "Python para computación científica". Computing in Science and Engineering . 9 (3): 10–20. Bibcode :2007CSE.....9c..10O. CiteSeerX 10.1.1.474.6460 . doi :10.1109/MCSE.2007.58. ISSN 1521-9615. S2CID 206457124. Archivado desde el original el 15 de junio de 2020 . Consultado el 10 de abril de 2015 .
^ Millman, K. Jarrod; Aivazis, Michael (2011). "Python para científicos e ingenieros". Computing in Science and Engineering . 13 (2): 9–12. Bibcode :2011CSE....13b...9M. doi :10.1109/MCSE.2011.36. Archivado desde el original el 19 de febrero de 2019 . Consultado el 7 de julio de 2014 .
^ Educación científica con SageMath, Informática innovadora en la educación científica, archivado del original el 15 de junio de 2020 , consultado el 22 de abril de 2019
^ "OpenCV: Tutoriales de OpenCV-Python". docs.opencv.org . Archivado desde el original el 23 de septiembre de 2020 . Consultado el 14 de septiembre de 2020 .
^ Dean, Jeff ; Monga, Rajat; et al. (9 de noviembre de 2015). "TensorFlow: aprendizaje automático a gran escala en sistemas heterogéneos" (PDF) . TensorFlow.org . Google Research. Archivado (PDF) del original el 20 de noviembre de 2015 . Consultado el 10 de noviembre de 2015 .
^ Piatetsky, Gregory. "Python se come a R: el mejor software para análisis, ciencia de datos y aprendizaje automático en 2018: tendencias y análisis". KDnuggets . Archivado desde el original el 15 de noviembre de 2019. Consultado el 30 de mayo de 2018 .
^ "¿Quién utiliza scikit-learn? – Documentación de scikit-learn 0.20.1". scikit-learn.org . Archivado desde el original el 6 de mayo de 2020. Consultado el 30 de noviembre de 2018 .
^ Jouppi, Norm . «Google potencia las tareas de aprendizaje automático con un chip personalizado de TPU». Blog de Google Cloud Platform . Archivado desde el original el 18 de mayo de 2016. Consultado el 19 de mayo de 2016 .
^ De Raedt, Luc; Kimmig, Angelika (2015). "Conceptos de programación (lógica) probabilística". Aprendizaje automático . 100 (1): 5–47. doi : 10.1007/s10994-015-5494-z . S2CID 3166992.
^ "Natural Language Toolkit – Documentación de NLTK 3.5b1". www.nltk.org . Archivado desde el original el 13 de junio de 2020 . Consultado el 10 de abril de 2020 .
^ Andersen, C. y Swift, T., 2023. El sistema Janus: un puente hacia nuevas aplicaciones de Prolog. En Prolog: The Next 50 Years (págs. 93-104). Cham: Springer Nature Switzerland.
^ "Interfaz Python de SWI-Prolog". Archivado desde el original el 15 de marzo de 2024 . Consultado el 15 de marzo de 2024 .
^ Tarau, P., 2023. Reflexiones sobre automatización, capacidad de aprendizaje y expresividad en lenguajes de programación basados en lógica. En Prolog: The Next 50 Years (pp. 359–371). Cham: Springer Nature Suiza.
^ "Tkinter — Interfaz Python para TCL/Tk". Archivado desde el original el 18 de octubre de 2012 . Consultado el 9 de junio de 2023 .
^ "Tutorial de Python Tkinter". 3 de junio de 2020. Archivado desde el original el 9 de junio de 2023 . Consultado el 9 de junio de 2023 .
^ "Instaladores de GIMP para Windows: preguntas frecuentes". 26 de julio de 2013. Archivado desde el original el 17 de julio de 2013. Consultado el 26 de julio de 2013 .
^ "jasc psp9components". Archivado desde el original el 19 de marzo de 2008.
^ "Introducción a la escritura de scripts de geoprocesamiento". Ayuda de ArcGIS Desktop 9.2 . Environmental Systems Research Institute. 17 de noviembre de 2006. Archivado desde el original el 5 de junio de 2020. Consultado el 11 de febrero de 2012 .
^ CCP porkbelly (24 de agosto de 2010). «Stackless Python 2.7». Blogs de desarrollo de la comunidad de EVE . Juegos de CCP . Archivado desde el original el 11 de enero de 2014. Consultado el 11 de enero de 2014. Como sabrás, EVE tiene como núcleo el lenguaje de programación conocido como Stackless Python.
^ Caudill, Barry (20 de septiembre de 2005). "Modding Sid Meier's Civilization IV". Blog de desarrolladores de Sid Meier's Civilization IV . Firaxis Games . Archivado desde el original el 2 de diciembre de 2010. Creamos tres niveles de herramientas... El siguiente nivel ofrece compatibilidad con Python y XML, lo que permite a los modders con más experiencia manipular el mundo del juego y todo lo que contiene.
^ "Guía del lenguaje Python (v1.0)". API de datos de listas de Google Documents v1.0 . Archivado desde el original el 15 de julio de 2010.
^ "Configuración y uso de Python". Python Software Foundation. Archivado desde el original el 17 de junio de 2020. Consultado el 10 de enero de 2020 .
^ "Inmunidad: saber que estás seguro". Archivado desde el original el 16 de febrero de 2009.
^ "Seguridad básica". Seguridad básica . Archivado desde el original el 9 de junio de 2020. Consultado el 10 de abril de 2020 .
^ "¿Qué es el azúcar?". Sugar Labs. Archivado desde el original el 9 de enero de 2009. Consultado el 11 de febrero de 2012 .
^ "4.0 Nuevas características y correcciones". LibreOffice.org . The Document Foundation . 2013. Archivado desde el original el 9 de febrero de 2014 . Consultado el 25 de febrero de 2013 .
^ "Consejos para los usuarios de Python". boo.codehaus.org . Fundación Codehaus. Archivado desde el original el 11 de diciembre de 2008 . Consultado el 24 de noviembre de 2008 .
^ Esterbrook, Charles. "Agradecimientos". cobra-language.com . Cobra Language. Archivado desde el original el 8 de febrero de 2008 . Consultado el 7 de abril de 2010 .
^ "Propuestas: iteradores y generadores [ES4 Wiki]". wiki.ecmascript.org. Archivado desde el original el 20 de octubre de 2007. Consultado el 24 de noviembre de 2008 .
^ "Preguntas frecuentes". Documentación de Godot Engine . Archivado desde el original el 28 de abril de 2021. Consultado el 10 de mayo de 2021 .
^ Kincaid, Jason (10 de noviembre de 2009). "Google's Go: A New Programming Language That's Python Meets C++". TechCrunch . Archivado desde el original el 18 de enero de 2010. Consultado el 29 de enero de 2010 .
^ Strachan, James (29 de agosto de 2003). «Groovy: el nacimiento de un nuevo lenguaje dinámico para la plataforma Java». Archivado desde el original el 5 de abril de 2007. Consultado el 11 de junio de 2007 .
^ "Modular Docs – Por qué Mojo". docs.modular.com . Archivado del original el 5 de mayo de 2023 . Consultado el 5 de mayo de 2023 . Mojo como miembro de la familia Python [..] Adoptar Python simplifica enormemente nuestros esfuerzos de diseño, porque la mayor parte de la sintaxis ya está especificada. [..] decidimos que el objetivo correcto a largo plazo para Mojo es proporcionar un superconjunto de Python (es decir, que sea compatible con los programas existentes) y adoptar CPython de inmediato para habilitar el ecosistema de cola larga. Para un programador Python, esperamos y deseamos que Mojo le resulte inmediatamente familiar, al mismo tiempo que le proporcione nuevas herramientas para desarrollar código a nivel de sistemas que le permitan hacer cosas para las que Python recurre a C y C++.
^ Spencer, Michael (4 de mayo de 2023). "¿Qué es el lenguaje de programación Mojo?". datasciencelearningcenter.substack.com . Archivado desde el original el 5 de mayo de 2023 . Consultado el 5 de mayo de 2023 .
^ Yegulalp, Serdar (16 de enero de 2017). "El lenguaje Nim se nutre de lo mejor de Python, Rust, Go y Lisp". InfoWorld . Archivado desde el original el 13 de octubre de 2018 . Consultado el 7 de junio de 2020 . La sintaxis de Nim recuerda mucho a la de Python, ya que utiliza bloques de código sangrados y parte de la misma sintaxis (como la forma en que se construyen los bloques if/elif/then/else).
^ "Entrevista con el creador de Ruby". Linuxdevcenter.com. Archivado desde el original el 28 de abril de 2018. Consultado el 3 de diciembre de 2012 .
^ Lattner, Chris (3 de junio de 2014). "Página de inicio de Chris Lattner". Chris Lattner. Archivado desde el original el 22 de diciembre de 2015 . Consultado el 3 de junio de 2014 . Comencé a trabajar en el lenguaje de programación Swift en julio de 2010. Implementé gran parte de la estructura básica del lenguaje, y solo unas pocas personas sabían de su existencia. Algunas otras personas (increíbles) comenzaron a contribuir en serio a fines de 2011, y se convirtió en un foco principal para el grupo de herramientas para desarrolladores de Apple en julio de 2013 [...] tomando ideas de Objective-C, Rust, Haskell, Ruby, Python, C#, CLU y muchos otros para enumerarlos.
^ Jalan, Nishant Aanjaney (10 de noviembre de 2022). "Programación en Kotlin". CódigoX . Consultado el 29 de abril de 2024 .
^ Kupries, Andreas; Fellows, Donal K. (14 de septiembre de 2000). "TIP #3: TIP Format". tcl.tk . Tcl Developer Xchange. Archivado desde el original el 13 de julio de 2017 . Consultado el 24 de noviembre de 2008 .
^ Gustafsson, Per; Niskanen, Raimo (29 de enero de 2007). «EEP 1: Propósito y directrices del EEP». erlang.org. Archivado desde el original el 15 de junio de 2020. Consultado el 19 de abril de 2011 .
^ "Proceso de evolución de Swift". Repositorio de evolución del lenguaje de programación Swift en GitHub . 18 de febrero de 2020. Archivado desde el original el 27 de abril de 2020. Consultado el 27 de abril de 2020 .
Fuentes
"Python para la Inteligencia Artificial". Wiki de Python. 19 de julio de 2012. Archivado desde el original el 1 de noviembre de 2012 . Consultado el 3 de diciembre de 2012 .
Paine, Jocelyn, ed. (agosto de 2005). "AI in Python". Boletín de noticias de expertos en IA . Amzi!. Archivado desde el original el 26 de marzo de 2012. Consultado el 11 de febrero de 2012 .
"PyAIML 0.8.5: índice de paquetes de Python". Pypi.python.org . Consultado el 17 de julio de 2013 .
Downey, Allen B. (mayo de 2012). Think Python: How to Think Like a Computer Scientist (versión 1.6.6 ed.). Cambridge University Press. ISBN 978-0-521-72596-5.
Hamilton, Naomi (5 de agosto de 2008). "Lenguajes de programación de la A a la Z: Python". Computerworld . Archivado desde el original el 29 de diciembre de 2008. Consultado el 31 de marzo de 2010 .
Lutz, Mark (2013). Aprendiendo Python (5.ª edición). O'Reilly Media. ISBN 978-0-596-15806-4.
Summerfield, Mark (2009). Programación en Python 3 (2.ª edición). Addison-Wesley Professional. ISBN 978-0-321-68056-3.
Ramalho, Luciano (mayo de 2022). Python fluido. Medios O'Reilly. ISBN 978-1-4920-5632-4.