Algoritmo de Ford-Fulkerson
(leer más)
Python es un lenguaje de programación de propósito general y alto nivel. Su filosofía de diseño enfatiza la legibilidad del código con el uso de sangría significativa.
Python se tipifica dinámicamente y se recolecta basura. Admite múltiples paradigmas de programación, incluida la programación estructurada (particularmente procedimental), orientada a objetos y funcional. A menudo se describe como "baterías incluidas" idioma debido a su completa biblioteca estándar.
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. Python 2.0 se lanzó en 2000 e introdujo nuevas funciones, como la comprensión de listas, la recolección de elementos no utilizados con detección de ciclos, el recuento de referencias y la compatibilidad con Unicode. 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 el último lanzamiento de Python 2.
Python se clasifica constantemente como uno de los lenguajes de programación más populares.
Python fue concebido a fines de la década de 1980 por Guido van Rossum en Centrum Wiskunde & Informatica (CWI) en los Países Bajos como sucesor del lenguaje de programación ABC, inspirado en SETL, capaz de manejar excepciones (desde el principio más nuevas capacidades en Python 3.11) e interactuar con el sistema operativo Amoeba. Su implementación comenzó en diciembre de 1989. 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 benévolo de por vida' 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. En enero de 2019, los desarrolladores principales activos de Python eligieron un consejo directivo de cinco miembros para dirigir el proyecto.
Python 2.0 se lanzó el 16 de octubre de 2000 e incluye muchas características nuevas importantes. Python 3.0, lanzado el 3 de diciembre de 2008, con muchas de sus funciones principales adaptadas a Python 2.6.x y 2.7.x. Las versiones de Python 3 incluyen la utilidad 2to3
, que automatiza la traducción del código de Python 2 a Python 3.
El final de la vida útil de Python 2.7 se fijó inicialmente para 2015, luego se pospuso hasta 2020 debido a la preocupación de que una gran cantidad de código existente no pudiera transferirse fácilmente a Python 3. No hay más parches de seguridad u otras mejoras serán lanzadas para ello. Actualmente solo se admiten 3.7 y versiones posteriores. En 2021, Python 3.9.2 y 3.8.8 se agilizaron porque todas las versiones de Python (incluida la 2.7) tenían problemas de seguridad que provocaban una posible ejecución remota de código y envenenamiento de caché web.
En 2022, Python 3.10.4 y 3.9.12 se aceleraron y 3.8.13 y 3.7.13 debido a muchos problemas de seguridad. Cuando se lanzó Python 3.9.13 en mayo de 2022, se anunció que la serie 3.9 (que se une a las series anteriores 3.8 y 3.7) solo recibirá correcciones de seguridad en el futuro. El 7 de septiembre de 2022, se realizaron cuatro nuevos lanzamientos debido a un posible ataque de denegación de servicio: 3.10.7, 3.9.14, 3.8.14 y 3.7.14.
Desde noviembre de 2022, Python 3.11.0 es la versión estable actual y, entre los cambios notables con respecto a la versión 3.10, se encuentra que es entre un 10 % y un 60 % más rápido y que mejora significativamente el informe de errores.
Python 3.12 (alfa 2) ha mejorado los mensajes de error.
El módulo obsoleto smtpd
se eliminó de Python 3.12 (alfa). Y se han eliminado una serie de otras funciones antiguas, rotas y obsoletas (por ejemplo, del módulo unittest
), clases y métodos. Se eliminaron los miembros de longitud obsoletos wstr
y wstr_
de la implementación C de objetos Unicode, para hacer que UTF-8 sea el valor predeterminado en versiones posteriores de Python.
Históricamente, Python 3 también hizo cambios con respecto a Python 2, p. cambió el operador de división.
Python es un lenguaje de programación multiparadigma. La programación orientada a objetos y la programación estructurada son totalmente compatibles, y muchas de sus funciones admiten la programación funcional y la programación orientada a aspectos (incluida la metaprogramación y los metaobjetos). Muchos otros paradigmas son compatibles a través de extensiones, incluido el diseño por contrato y la programación lógica.
Python usa escritura dinámica y una combinación de conteo de referencias y un recolector de basura de detección de ciclos para la administración de la memoria. Utiliza resolución dinámica de nombres (enlace tardío), que enlaza métodos y nombres de variables durante la ejecución del programa.
Su diseño ofrece cierto soporte para programación funcional en la tradición Lisp. Tiene funciones filter
, map
y reduce
; listas de comprensiones, diccionarios, conjuntos y expresiones generadoras. La biblioteca estándar tiene dos módulos (itertools
y functools
) que implementan herramientas funcionales prestadas de Haskell y Standard ML.
Su filosofía central se resume en el documento El Zen de Python (PEP 20), que incluye aforismos como:
En lugar de incorporar 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 medio para agregar interfaces programables a las aplicaciones existentes. La visión de Van Rossum de un lenguaje central 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.
Python se esfuerza por lograr una sintaxis y una gramática más simples y menos abarrotadas, al mismo tiempo que brinda a los desarrolladores una opción en su metodología de codificación. A diferencia de Perl 'hay más de una forma de hacerlo' lema, Python adopta un "debería haber una, y preferiblemente solo una, forma obvia de hacerlo" filosofía. Alex Martelli, miembro de la Python Software Foundation y autor del libro Python, escribió: "Para describir algo como 'inteligente' no se considera un cumplido en la cultura de Python."
Los desarrolladores de Python se esfuerzan por evitar la optimización prematura y rechazar parches en partes no críticas de la implementación de referencia de CPython que ofrecería aumentos marginales en la velocidad a costa de la claridad. Cuando la velocidad es importante, un programador de Python puede mover funciones de tiempo crítico a módulos de extensión escritos en lenguajes como C; o use PyPy, un compilador justo a tiempo. Cython también está disponible, lo que traduce una secuencia de comandos de Python a C y realiza llamadas API de nivel C directas al intérprete de Python.
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, y en ocasiones en los enfoques lúdicos de los tutoriales y materiales de referencia, como el uso de los términos "spam" y "huevos& #34; (una referencia a un boceto de Monty Python) en los ejemplos, en lugar de "foo" y "bar".
Un neologismo común en la comunidad de Python es pythonic, que tiene una amplia gama de significados relacionados con el estilo del programa. "Pitónica" el código puede usar bien los modismos de Python, ser natural o mostrar fluidez en el lenguaje, o ajustarse a la filosofía minimalista de Python y al énfasis en la legibilidad. El código que es difícil de entender o se lee como una transcripción aproximada de otro lenguaje de programación se llama no pitónico.
Los usuarios y admiradores de Python, especialmente aquellos que se consideran conocedores o experimentados, a menudo se denominan Pythonistas.
Python está destinado a ser un lenguaje de fácil lectura. Su formato es visualmente ordenado y, a menudo, utiliza palabras clave en inglés donde otros idiomas usan puntuación. A diferencia de muchos otros lenguajes, no usa corchetes para delimitar bloques, y se permiten puntos y comas después de las declaraciones, pero rara vez se usan. Tiene menos excepciones sintácticas y casos especiales que C o Pascal.
Python usa sangría de espacio en blanco, en lugar de corchetes 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. Por lo tanto, la estructura visual del programa representa con precisión su estructura semántica. Esta característica a veces se denomina la regla del fuera de juego. Algunos otros idiomas usan la sangría de esta manera; pero en la mayoría, la sangría no tiene significado semántico. El tamaño de sangría recomendado es de cuatro espacios.
Las declaraciones de Python incluyen:
=
if
declaración, que ejecuta condicionalmente un bloque de código, junto con else
y elif
(una contracción de otra forma)for
declaración, que itera sobre un objeto iterable, capturando cada elemento a una variable local para su uso por el bloque adjuntowhile
declaración, que ejecuta un bloque de código mientras su condición sea verdaderatry
declaración, que permite que las excepciones planteadas en su bloque de código adjunto sean captadas y manejadas por except
cláusulas (o nueva sintaxis except*
en Python 3.11 para grupos de excepción); también asegura que el código de limpieza en un finally
bloque siempre se ejecuta independientemente de cómo sale el bloqueraise
declaración, utilizada para plantear una excepción especificada o volver a establecer una excepción atrapadaclass
declaración, que ejecuta un bloque de código y adjunta su espacio de nombre local a una clase, para uso en programación orientada al objetodef
declaración, que define una función o métodowith
declaración, que encierra un bloque de código dentro de un gestor de contexto (por ejemplo, adquirir una cerradura antes de que se ejecute, luego liberar la cerradura; o abrir y cerrar un archivo), permitiendo la adquisición de recursos-es-inicialización (RAII)-como comportamiento y reemplazar un intento/finalmente idiom comúnbreak
declaración, que sale de un buclecontinue
declaración, que salta el resto de la iteración actual y continúa con la siguientedel
declaración, que elimina una variable, eliminando la referencia del nombre al valor, y produciendo un error si la variable se refiere antes de que sea redefinidapass
declaración, sirviendo como NOP, sintacticamente necesario para crear un bloque de código vacíoassert
declaración, utilizado en depuración para comprobar las condiciones que deben aplicarseyield
declaración, que devuelve un valor de una función generadora (y también un operador); utilizado para implementar coroutinesreturn
declaración, utilizado para devolver un valor de una funciónimport
declaración, utilizado para importar módulos cuyas funciones o variables se pueden utilizar en el programa actualLa declaración de asignación (=
) vincula un nombre como una referencia a un objeto independiente asignado dinámicamente. Posteriormente, las variables pueden volver a vincularse en cualquier momento a cualquier objeto. En Python, un nombre de variable es un titular de referencia genérico sin un tipo de datos fijo; sin embargo, siempre se refiere a algún objeto con un tipo. Esto se llama escritura dinámica, en contraste con los lenguajes de escritura estática, donde cada variable puede contener solo un valor de cierto tipo.
Python no admite la optimización de llamadas finales ni las continuaciones de primera clase y, según Van Rossum, nunca lo hará. Sin embargo, se proporciona un mejor soporte para la funcionalidad similar a la corrutina mediante la extensión de los generadores de Python. Antes de la versión 2.5, los generadores eran iteradores perezosos; los datos se pasaron unidireccionalmente fuera del generador. A partir de Python 2.5, es posible devolver datos a una función de generador; y desde la versión 3.3, se puede pasar a través de múltiples niveles de pila.
Las expresiones de Python incluyen:
+
, -
, y *
operadores para adición matemática, resta y multiplicación son similares a otros idiomas, pero el comportamiento de división difiere. Hay dos tipos de divisiones en Python: división del piso (o división del entero) //
y punto flotante/
división. Python utiliza el **
operador para la exponenciación.+
operador de concatenación de cadenas. Python utiliza el *
operador para duplicar una cadena un número específico de veces.@
operador de infix. Está destinado a ser utilizado por bibliotecas como NumPy para la multiplicación de matriz.:=
, llamado "operador de moras", fue introducido en Python 3.8. asigna valores a variables como parte de una expresión mayor.==
compara por valor. Python's is
el operador puede ser utilizado para comparar las identidades de objetos (comparación por referencia), y las comparaciones pueden ser encadenadas, por ejemplo, a <= b <= c
.and
, or
, y not
como operadores booleanos.x if c else y
(diferente en orden de operar de los c ? x: y
operador común a muchos otros idiomas).[1, 2, 3]
, son mutables, y no pueden ser utilizados como las claves de diccionarios (las claves diccionario deben ser inmutables en Python). Tuplas, escrito como (1, 2, 3)
, son inmutables y por lo tanto se pueden utilizar como claves de diccionarios, siempre que todos los elementos del tupla sean inmutables. El +
El operador puede ser utilizado para concatenar dos tuples, que no modifica directamente su contenido, sino que produce un nuevo tuple que contiene los elementos de ambos. Así, dada la variable t
inicialmente igual a (1, 2, 3)
, ejecución t = t + (4, 5)
primero evalúa t + (4, 5)
, que rinde (1, 2, 3, 4, 5)
, que se asigna de nuevo a t
—de hecho "modificar el contenido" de t
a la vez que se conforman con la naturaleza inmutable de los objetos tuple. Los padres son opcionales para tuples en contextos inequívocos.%
que funciona analógicamente printf
cadenas de formato en C, por ejemplo. "spam=%s eggs=%d" % ("blah", 2)
evaluar a "spam=blah eggs=2"
. En Python 2.6+ y 3+, esto fue complementado por el format()
método del str
clase, por ejemplo. "spam={0} eggs={1}".format("blah", 2)
. Python 3.6 añadió "f-strings": spam = "blah"; eggs = 2; f'spam={spam} eggs={eggs}'
."spam" + "eggs"
retornos "spameggs"
. Si las cadenas contienen números, se añaden como cadenas en lugar de enteros, por ejemplo. "2" + "2"
retornos "22"
.
Como un personaje de escape. La interpolación de cuerdas se puso a disposición en Python 3.6 como " literales de cuerdas formateadas".r
. Las secuencias de escape no se interpretan; por lo tanto, las cuerdas crudas son útiles cuando las pestañas literales son comunes, como expresiones regulares y caminos de estilo Windows. (Compararar "@
- citando" en C#.)a[key]
, a[start:stop]
o a[start:stop:step]
. Los índices son de base cero, y los índices negativos son relativos al final. Los piojos toman elementos del Empieza índice hasta, pero no incluyendo, el Para índice. El tercer parámetro llamado paso o stride, permite que los elementos sean saltados y revertidos. Los índices de piojos pueden omitirse, por ejemplo, a[:]
devuelve una copia de toda la lista. Cada elemento de una rebanada es una copia poco profunda.En Python, se aplica estrictamente una distinción entre expresiones y sentencias, en contraste con lenguajes como Common Lisp, Scheme o Ruby. Esto lleva a duplicar algunas funciones. Por ejemplo:
for
- buclesif
bloqueseval()
vs. exec()
funciones incorporadas (en Python 2, exec
es una declaración); la primera es para las expresiones, la segunda es para las declaracionesLas declaraciones no pueden ser parte de una expresión, por lo que la lista y otras comprensiones o expresiones lambda, siendo todas expresiones, no pueden contener declaraciones. Un caso particular es que una declaración de asignación como a = 1
no puede formar parte de la expresión condicional de una instrucción condicional. Esto tiene la ventaja de evitar un error clásico de C de confundir un operador de asignación =
con un operador de igualdad ==
en condiciones: if (c = 1) { ... }
es código C sintácticamente válido (pero probablemente no intencionado), pero if c = 1: ...
provoca un error de sintaxis en Python.
Los métodos en los objetos son funciones adjuntas a la clase del objeto; la sintaxis instancia .método(argumento)
es, para métodos y funciones normales, azúcar sintáctico para Clase.método (instancia, argumento)
. Los métodos de Python tienen un parámetro self
explícito para acceder a los datos de la instancia, en contraste con el self implícito (o this
) en algunos otros lenguajes de programación orientados a objetos (por ejemplo, C++, Java, Objective-C, Rubí). 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 las manejan las operaciones nativas, incluidas la longitud, la comparación, la en operaciones aritméticas y conversión de tipos.
Python utiliza la tipificación pato y tiene objetos tipificados pero nombres de variables no tipificados. Las restricciones de tipo no se comprueban en tiempo de compilación; más bien, las operaciones en 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 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 para la programación orientada a objetos. Las nuevas instancias de clases se construyen llamando a la clase (por ejemplo, SpamClass()
o EggsClass()
), y las clases son instancias de la metaclase type
(en sí misma una instancia de sí misma), lo que permite la metaprogramación y la reflexión.
Antes de la versión 3.0, Python tenía dos tipos de clases (ambas con la misma sintaxis): estilo antiguo y estilo nuevo; las versiones actuales de Python solo admiten la semántica nuevo estilo.
El plan a largo plazo es admitir la escritura gradual. La sintaxis de Python permite especificar tipos estáticos, pero no se verifican en la implementación predeterminada, CPython. Un verificador de tipos estático opcional experimental, mypy, admite la verificación de tipos en tiempo de compilación.
Tipo | Mutabilidad | Descripción | Ejemplos sintaxis |
---|---|---|---|
bool | inmutable | Valor booleano | True False |
bytearray | mutable | Secuencia de bytes | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105]) |
bytes | inmutable | Secuencia de bytes | b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105]) |
complex | inmutable | Número complejo con partes reales e imaginarias | 3+2.7j 3 + 2.7j |
dict | mutable | array asociativo (o diccionario) de pares de clave y valor; puede contener tipos mixtos (keys y valores), claves debe ser un tipo apresurable | {'key1': 1.0, 3: False} {} |
types.EllipsisType | inmutable | Un marcador de posición de elipsis para ser utilizado como índice en los arrays NumPy | ... Ellipsis |
float | inmutable | Doble precisión número de punto flotante. La precisión es dependiente de la máquina, pero en la práctica generalmente se implementa como un número IEEE 754 de 64 bits con 53 bits de precisión. |
|
frozenset | inmutable | Unordered set, no contiene duplicados; puede contener tipos mixtos, si es factible | frozenset([4.0, 'string', True]) |
int | inmutable | entero de magnitud ilimitada | 42 |
list | mutable | Lista, puede contener tipos mixtos | [4.0, 'string', True] [] |
types.NoneType | inmutable | Un objeto que representa la ausencia de un valor, a menudo llamado nulo en otros idiomas | None |
types.NotImplementedType | inmutable | Un marcador de posición que puede ser devuelto de operadores sobrecargados para indicar tipos de operandos no soportados. | NotImplemented |
range | inmutable | An secuencia inmutable de números comúnmente usados para buclear un número específico de veces en for bucles
| range(-1, 10) range(10, -5, -2) |
set | mutable | Unordered set, no contiene duplicados; puede contener tipos mixtos, si es factible | {4.0, 'string', True} set() |
str | inmutable | Una cadena de caracteres: secuencia de puntos de código Unicode | 'Wikipedia' "Wikipedia" "Spanning"múltiplelíneas" Spanningmúltiplelíneas |
tuple | inmutable | Puede contener tipos mixtos | (4.0, 'string', True) ('single element',) () |
Python tiene los símbolos habituales de los operadores aritméticos (+
, -
, *
, /
), el operador de división de piso //
y la operación de módulo %
(donde el resto puede ser negativo, por ejemplo, 4 % -3 == -2
). También tiene **
para exponenciación, p. 5**3 == 125
y 9**0.5 == 3.0
, y un operador de multiplicación de matrices @
. Estos operadores funcionan como en las matemáticas tradicionales; con las mismas reglas de precedencia, los operadores infijos (+
y -
también pueden ser únicos para representar números positivos y negativos respectivamente).
La división entre enteros produce resultados de punto flotante. El comportamiento de la división ha cambiado significativamente con el tiempo:
/
para siempre ser división de puntos flotantes, por ejemplo. 5/2 == 2.5
.//
El operador fue introducido. Así que... 7//3 == 2
, -7//3 == -3
, 7.5//3 == 2.0
y -7.5//3 == -3.0
. Añadiendo from __future__ import division
causa un módulo utilizado en Python 2.7 para utilizar las reglas Python 3.0 para división (ver arriba).En términos de Python, /
es verdadera división (o simplemente división), y //
es división de piso. /
antes de la versión 3.0 es división clásica.
El redondeo hacia el infinito negativo, aunque es diferente de la mayoría de los idiomas, agrega consistencia. Por ejemplo, significa que la ecuación (a + b)//b == a//b + 1
siempre es verdadero. También significa que la ecuación b*(a//b) + a%b == a
es válido tanto para valores positivos como negativos de a
. Sin embargo, mantener la validez de esta ecuación significa que mientras el resultado de a%b
está, como se esperaba, en el intervalo semiabierto [0, b), donde b
es un entero positivo, tiene que estar en el intervalo (b, 0] cuando b
es negativo.
Python proporciona una función round
para redondear un flotante al entero más cercano. Para el desempate, Python 3 usa round to even: round(1.5)
y round(2.5)
ambos producen 2
. Las versiones anteriores a la 3 usaban el redondeo desde cero: round(0.5)
es 1.0
, round(-0.5)
es − 1.0.
Python permite expresiones booleanas con múltiples relaciones de igualdad de una manera consistente con el uso general en matemáticas. Por ejemplo, la expresión a < b < c
comprueba si a
es menor que b
y si b
es menor que c
. Los lenguajes derivados de C interpretan esta expresión de manera diferente: en C, la expresión primero evaluaría a < b
, dando como resultado 0 o 1, y ese resultado luego se compararía con c
.
Python usa aritmética de precisión arbitraria para todas las operaciones con enteros. El tipo/clase Decimal
en el módulo decimal
proporciona números de punto flotante decimal con una precisión arbitraria predefinida y varios modos de redondeo. La clase Fraction
en el módulo fractions
proporciona precisión arbitraria para números racionales.
Debido a la extensa biblioteca de matemáticas de Python y la biblioteca de terceros NumPy que amplía aún más las capacidades nativas, se usa con frecuencia como un lenguaje de secuencias de comandos científicas para ayudar en problemas como el procesamiento y la manipulación de datos numéricos.
Programa Hola mundo:
impresión()¡Hola, mundo! ')
Programa para calcular el factorial de un entero positivo:
n = int()entrada()'Tipo un número, y su factorial será impreso: ')si n . 0: aumento ValueError()' Usted debe entrar en un entero no negativo ')factorial = 1para i dentro rango()2, n + 1): factorial *= iimpresión()factorial)
La gran biblioteca estándar de Python proporciona herramientas adecuadas para muchas tareas y se cita comúnmente como una de sus mayores fortalezas. Para las aplicaciones orientadas a Internet, se admiten muchos formatos y protocolos estándar, como MIME y HTTP. Incluye módulos para crear interfaces gráficas de usuario, conectarse a bases de datos relacionales, generar números pseudoaleatorios, aritmética con decimales de precisión arbitraria, manipular expresiones regulares y pruebas unitarias.
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) wsgiref
sigue PEP 333, pero la mayoría están especificadas por su código, documentación interna y suites de prueba. Sin embargo, debido a que la mayor parte de la biblioteca estándar es código Python multiplataforma, solo algunos módulos necesitan modificarse o reescribirse para implementaciones variantes.
A partir del 14 de noviembre de 2022, el Índice de paquetes de Python (PyPI), el repositorio oficial de software de Python de terceros, contiene más de 415.000 paquetes con una amplia variedad de funciones, entre las que se incluyen:
La mayoría de las implementaciones de Python (incluido CPython) incluyen un ciclo de lectura, evaluación e 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 de inmediato.
Python también viene con un entorno de desarrollo integrado (IDE) llamado IDLE, que está más orientado a principiantes.
Otros shells, incluidos IDLE e IPython, agregan capacidades adicionales, como la finalización automática mejorada, la retención del estado de la sesión y el resaltado de sintaxis.
Además de los entornos de desarrollo integrados de escritorio estándar, existen IDE basados en navegador web, incluido SageMath, para desarrollar programas relacionados con las ciencias y las matemáticas; PythonAnywhere, un IDE basado en navegador y un entorno de alojamiento; y Canopy IDE, un IDE comercial que enfatiza la computación científica.
CPython es la implementación de referencia de Python. Está escrito en C, cumple con el estándar C89 (Python 3.11 usa C11) con varias funciones C99 seleccionadas (con versiones posteriores de C, se considera obsoleto. CPython incluye sus propias extensiones C, pero las extensiones de terceros no se limitan a versiones anteriores). Versiones C, por ejemplo, se pueden implementar con C11 o C++.) Compila programas de Python en un código de bytes intermedio que luego es ejecutado por su máquina virtual. CPython se distribuye con una gran biblioteca estándar escrita en una mezcla de C y Python nativo, y está disponible para muchas plataformas, incluido Windows (a partir de Python 3.9, el instalador de Python falla deliberadamente al instalarse en Windows 7 y 8; Windows XP era compatible hasta Python 3.5) y la mayoría de los sistemas similares a Unix modernos, incluidos macOS (y Apple M1 Macs, desde Python 3.9.1, con instalador experimental) y soporte no oficial para, p. VMS. La portabilidad de la plataforma fue una de sus primeras prioridades. (Durante el desarrollo de Python 1 y 2, incluso OS/2 y Solaris eran compatibles, pero desde entonces se ha eliminado la compatibilidad con muchas plataformas).
Se han desarrollado otros compiladores de Python justo a tiempo, pero ahora no son compatibles:
Hay varios compiladores para lenguajes de objetos de alto nivel, con Python sin restricciones, un subconjunto restringido de Python o un lenguaje similar a Python como lenguaje de origen:
Especializados:
Proyectos más antiguos (o que no se usen con Python 3.x y la sintaxis más reciente):
La comparación de rendimiento de varias implementaciones de Python en una carga de trabajo no numérica (combinatoria) se presentó en EuroSciPy '13. El rendimiento de Python en comparación con otros lenguajes de programación también se compara con The Computer Language Benchmarks Game.
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 funciones importantes, recopilar comentarios de la comunidad sobre problemas y documentar las decisiones de diseño de Python. El estilo de codificación de Python se cubre en PEP 8. La comunidad de Python y el consejo directivo revisan y comentan los PEP sobresalientes.
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 de Roundup alojado en la fundación. En 2022, todos los problemas y debates se migraron a GitHub. El desarrollo se llevó a cabo originalmente en un repositorio de código fuente autohospedado que ejecutaba Mercurial, hasta que Python se trasladó a GitHub en enero de 2017.
Los lanzamientos públicos de CPython vienen en tres tipos, que se distinguen por qué parte del número de versión se incrementa:
Muchos candidatos alfa, beta y de lanzamiento también se lanzan como vistas previas y para probarlos antes de los lanzamientos finales. Aunque hay un cronograma aproximado para cada lanzamiento, a menudo se retrasan si el código no está listo. El equipo de desarrollo de Python supervisa el estado del código ejecutando el conjunto de pruebas de unidades grandes durante el desarrollo.
La principal conferencia académica sobre Python es PyCon. También hay programas especiales de tutoría de Python, como Pyladies.
Python 3.10 dejó obsoleto a wstr
(se eliminará en Python 3.12; lo que significa que las extensiones de Python deben modificarse para entonces) y agregó la coincidencia de patrones con el lenguaje.
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.
El nombre de Python se deriva del grupo de comedia británico Monty Python, a quien 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; por ejemplo, las variables metasintácticas que se usan a menudo en la literatura de Python son spam y huevos en lugar de los tradicionales foo y bar. La documentación oficial de Python también contiene varias referencias a las rutinas de Monty Python.
El prefijo Py- se usa para mostrar que algo está relacionado con Python. Los ejemplos del uso de este prefijo en nombres de aplicaciones o bibliotecas de Python incluyen Pygame, un enlace de SDL a Python (comúnmente utilizado para crear juegos); PyQt y PyGTK, que unen Qt y GTK a Python respectivamente; y PyPy, una implementación de Python escrita originalmente en Python.
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 de TIOBE, donde en diciembre de 2022 era el lenguaje más popular (por delante de C, C++ y Java). Fue seleccionado Lenguaje de programación del año (por "el mayor aumento de calificaciones en un año") en 2007, 2010, 2018 y 2020 (el único lenguaje que lo ha hecho cuatro veces a partir de 2020).
Un estudio empírico encontró que los lenguajes de secuencias de comandos, como Python, son más productivos que los lenguajes convencionales, como C y Java, para problemas de programación que involucran la manipulación de cadenas y la búsqueda en un diccionario, y determinó que el consumo de memoria a menudo era "mejor que Java y no mucho peor que C o C++".
Las grandes organizaciones que usan Python incluyen Wikipedia, Google, Yahoo!, CERN, NASA, Facebook, Amazon, Instagram, Spotify y algunas entidades más pequeñas como ILM e ITA. El sitio de redes sociales de noticias Reddit se escribió principalmente en Python.
Python puede servir como lenguaje de secuencias de comandos para aplicaciones web, por ejemplo, a través de mod_wsgi para el servidor web Apache. Con Web Server Gateway Interface, una API estándar ha evolucionado para facilitar estas aplicaciones. Los marcos web como Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle y Zope ayudan a los desarrolladores en el diseño y mantenimiento de aplicaciones complejas. Pyjs y IronPython se pueden usar para desarrollar el lado del cliente de las aplicaciones basadas en Ajax. SQLAlchemy se puede utilizar como un asignador de datos a una base de datos relacional. Twisted es un framework para programar comunicaciones entre ordenadores, y lo utiliza (por ejemplo) Dropbox.
Bibliotecas como NumPy, SciPy y Matplotlib permiten el uso efectivo de Python en computación científica, con bibliotecas especializadas como Biopython y Astropy que brindan funcionalidades específicas de dominio. SageMath es un sistema de álgebra computacional con una interfaz de computadora portátil programable en Python: su biblioteca cubre muchos aspectos de las matemáticas, que incluyen álgebra, combinatoria, matemáticas numéricas, teoría de números y cálculo. OpenCV tiene enlaces de Python con un amplio conjunto de características para la visión por computadora y el procesamiento de imágenes.
Python se usa comúnmente en proyectos de inteligencia artificial y proyectos de aprendizaje automático con la ayuda de bibliotecas como TensorFlow, Keras, Pytorch y scikit-learn. Como lenguaje de secuencias de comandos con una arquitectura modular, sintaxis simple y herramientas de procesamiento de texto enriquecido, Python se usa a menudo para el procesamiento de lenguaje natural.
Python también se puede usar para crear juegos, con bibliotecas como Pygame, que pueden crear juegos en 2D.
Python se ha integrado con éxito en muchos productos de software como lenguaje de secuencias de comandos, incluso en software de método de elementos finitos como Abaqus, modeladores paramétricos 3D como FreeCAD, paquetes de animación 3D como 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage, el compositor de efectos visuales Nuke, programas de imágenes 2D como GIMP, Inkscape, Scribus y Paint Shop Pro, y programas de notación musical como scorewriter y capella. GNU Debugger usa Python como una bonita impresora para mostrar estructuras complejas como contenedores C++. Esri promueve Python como la mejor opción para escribir scripts en ArcGIS. También se ha utilizado en varios videojuegos y se ha adoptado como el primero de los tres lenguajes de programación disponibles en Google App Engine, siendo los otros dos Java y Go.
Muchos sistemas operativos incluyen Python como componente estándar. Se envía con la mayoría de las distribuciones de Linux, AmigaOS 4 (con Python 2.7), FreeBSD (como paquete), NetBSD y OpenBSD (como paquete) y se puede usar desde la línea de comandos (terminal). Muchas distribuciones de Linux usan instaladores escritos en Python: Ubuntu usa el instalador Ubiquity, mientras que Red Hat Linux y Fedora Linux usan el instalador Anaconda. Gentoo Linux usa Python en su sistema de administración de paquetes, Portage.
Python se usa ampliamente en la industria de la seguridad de la información, incluso en el desarrollo de exploits.
La mayor parte del software de Sugar para One Laptop per Child XO, desarrollado en Sugar Labs desde 2008, está escrito en Python. El proyecto de computadora de placa única Raspberry Pi ha adoptado Python como su principal lenguaje de programación de usuarios.
LibreOffice incluye Python y pretende reemplazar Java con Python. Su Python Scripting Provider es una función central desde la versión 4.0 del 7 de febrero de 2013.
El diseño y la filosofía de Python han influido en muchos otros lenguajes de programación:
Las prácticas de desarrollo de Python también han sido emuladas por otros lenguajes. Por ejemplo, la práctica de solicitar un documento que describa la justificación y los problemas relacionados con un cambio en el lenguaje (en Python, un PEP) también se usa en Tcl, Erlang y Swift.
(leer más)
(leer más)
(leer más)