Pitón (lenguaje de programación)
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.
Historia
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.
Eliminaciones de Python
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.
Filosofía de diseño y características
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:
- Hermosa es mejor que fea.
- El explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- La legibilidad cuenta.
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.
Sintaxis y semántica
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.
Sangría
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.
Declaraciones y flujo de control
Las declaraciones de Python incluyen:
- La declaración de asignación, usando un solo signo igual
=
- El
if
declaración, que ejecuta condicionalmente un bloque de código, junto conelse
yelif
(una contracción de otra forma) - El
for
declaración, que itera sobre un objeto iterable, capturando cada elemento a una variable local para su uso por el bloque adjunto - El
while
declaración, que ejecuta un bloque de código mientras su condición sea verdadera - El
try
declaración, que permite que las excepciones planteadas en su bloque de código adjunto sean captadas y manejadas porexcept
cláusulas (o nueva sintaxisexcept*
en Python 3.11 para grupos de excepción); también asegura que el código de limpieza en unfinally
bloque siempre se ejecuta independientemente de cómo sale el bloque - El
raise
declaración, utilizada para plantear una excepción especificada o volver a establecer una excepción atrapada - El
class
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 objeto - El
def
declaración, que define una función o método - El
with
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ún - El
break
declaración, que sale de un bucle - El
continue
declaración, que salta el resto de la iteración actual y continúa con la siguiente - El
del
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 redefinida - El
pass
declaración, sirviendo como NOP, sintacticamente necesario para crear un bloque de código vacío - El
assert
declaración, utilizado en depuración para comprobar las condiciones que deben aplicarse - El
yield
declaración, que devuelve un valor de una función generadora (y también un operador); utilizado para implementar coroutines - El
return
declaración, utilizado para devolver un valor de una función - El
import
declaración, utilizado para importar módulos cuyas funciones o variables se pueden utilizar en el programa actual
La 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.
Expresiones
Las expresiones de Python incluyen:
- El
+
,-
, 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. - Python utiliza el
+
operador de concatenación de cadenas. Python utiliza el*
operador para duplicar una cadena un número específico de veces. - El
@
operador de infix. Está destinado a ser utilizado por bibliotecas como NumPy para la multiplicación de matriz. - La sintaxis
:=
, llamado "operador de moras", fue introducido en Python 3.8. asigna valores a variables como parte de una expresión mayor. - En Python,
==
compara por valor. Python'sis
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
. - Python utiliza
and
,or
, ynot
como operadores booleanos. - Python tiene un tipo de expresión llamado lista de comprensión, así como una expresión más general llamada expresión generador.
- Las funciones anónimas se implementan utilizando expresiones de lambda; sin embargo, sólo puede haber una expresión en cada cuerpo.
- Las expresiones condicionales están escritas como
x if c else y
(diferente en orden de operar de losc ? x: y
operador común a muchos otros idiomas). - Python hace una distinción entre listas y tuples. Las listas están escritas como
[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 variablet
inicialmente igual a(1, 2, 3)
, ejecuciónt = t + (4, 5)
primero evalúat + (4, 5)
, que rinde(1, 2, 3, 4, 5)
, que se asigna de nuevo at
—de hecho "modificar el contenido" det
a la vez que se conforman con la naturaleza inmutable de los objetos tuple. Los padres son opcionales para tuples en contextos inequívocos. - Características de pitón secuencia de desempaquetado donde se asocian múltiples expresiones, cada una evaluando a cualquier cosa que se pueda asignar (a una propiedad variable, writable, etc.) de manera idéntica a esa forma de literales tuples, y, en su conjunto, se colocan en la mano izquierda del signo igual en una declaración de asignación. La declaración espera una iterable objeto en el lado derecho de la misma señal que produce el mismo número de valores que las expresiones doradas; cuando se iteró a través de ellas, asigna cada uno de los valores producidos a la expresión correspondiente a la izquierda.
- Python tiene un operador de "formato de cuerda"
%
que funciona analógicamenteprintf
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 elformat()
método delstr
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}'
. - Las cuerdas en Python pueden ser concatenadas por "adding" ellas (con el mismo operador que para añadir enteros y carros), por ejemplo.
"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"
. - Python tiene varios literales de cuerda:
- Delimitado por marcas de citas simples o dobles; a diferencia de las conchas Unix, Perl y lenguajes influenciados por Perl, las marcas de cita simple y doble funcionan igual. Ambos usan la barra trasera (
Como un personaje de escape. La interpolación de cuerdas se puso a disposición en Python 3.6 como " literales de cuerdas formateadas".
- Cita triple (comenzando y terminando con tres marcas de citas individuales o dobles), que pueden abarcar múltiples líneas y funcionar como aquí documentos en conchas, Perl y Ruby.
- Uvas de cuerda cruda, denotadas por prefijo de la cadena literal con
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#.)
- Delimitado por marcas de citas simples o dobles; a diferencia de las conchas Unix, Perl y lenguajes influenciados por Perl, las marcas de cita simple y doble funcionan igual. Ambos usan la barra trasera (
- Python tiene índice de matriz y expresiones de corte de matriz en listas, denotadas como
a[key]
,a[start:stop]
oa[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:
- Comprensiones de listas vs.
for
- bucles - Expresiones condicionales vs.
if
bloques - El
eval()
vs.exec()
funciones incorporadas (en Python 2,exec
es una declaración); la primera es para las expresiones, la segunda es para las declaraciones
Las 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.
Métodos
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.
Escribiendo
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',) () |
Operaciones aritméticas
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:
- Python actual (es decir, desde 3.0) cambió
/
para siempre ser división de puntos flotantes, por ejemplo.5/2 == 2.5
. - La división del piso
//
El operador fue introducido. Así que...7//3 == 2
,-7//3 == -3
,7.5//3 == 2.0
y-7.5//3 == -3.0
. Añadiendofrom __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.
Ejemplos de programación
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)
Bibliotecas
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:
- Automatización
- Análisis de datos
- Bases de datos
- Documentación
- Interfaz gráfica de usuario
- Procesamiento de imagen
- Aprendizaje a máquina
- Aplicaciones móviles
- Multimedia
- Redes informáticas
- Computación científica
- Administración de sistemas
- Marcos de prueba
- Procesamiento de texto
- Marcos web
- Web scraping
Entornos de desarrollo
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.
Implementaciones
Implementación de referencia
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).
Otras implementaciones
- PyPy es un intérprete rápido y fiable de Python 2.7 y 3.8. Su compilador de tiempo justo a menudo trae una mejora de velocidad significativa sobre el CPython, pero algunas bibliotecas escritas en C no se pueden utilizar con él.
- Stackless Python es un tenedor significativo de CPython que implementa microthreads; no utiliza la pila de llamadas de la misma manera, permitiendo así programas masivos concurrentes. PyPy también tiene una versión sin pilas.
- MicroPython y CircuitPython son Python 3 variantes optimizadas para microcontroladores, incluyendo Lego Mindstorms EV3.
- Pyston es una variante del tiempo de ejecución de Python que utiliza la compilación de tiempo justo para acelerar la ejecución de los programas de Python.
- Cinder es un tenedor orientado al rendimiento de CPython 3.8 que contiene una serie de optimizaciones incluyendo el caché de inline bytecode, evaluación ansiosa de los coroutines, un método a tiempo JIT, y un compilador experimental de códigos bytecode.
Implementaciones no admitidas
Se han desarrollado otros compiladores de Python justo a tiempo, pero ahora no son compatibles:
- Google inició un proyecto llamado Unladen Swallow en 2009, con el objetivo de acelerar el intérprete de Python cinco veces utilizando el LLVM, y de mejorar su capacidad de lectura múltiple para escalar a miles de núcleos, mientras que las implementaciones ordinarias sufren de la cerradura de intérprete global.
- Psyco es un compilador especializado de tiempo parcial que se integra con CPython y transforma bytecode 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 soporta Python 2.7 o posterior.
- PyS60 fue un intérprete de Python 2 para la serie 60 teléfonos móviles lanzados por Nokia en 2005. Implementó muchos de los módulos de la biblioteca estándar y algunos módulos adicionales para integrarse con el sistema operativo Symbian. El Nokia N900 también admite Python con bibliotecas de widget GTK, permitiendo que los programas sean escritos y ejecutados en el dispositivo objetivo.
Compiladores cruzados a otros lenguajes
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:
- Brython, Transcrypt y Pyjs (la última versión en 2012) compilan Python a JavaScript.
- Cython compila (un superset de) Python 2.7 a C (mientras el código resultante también se utiliza con Python 3 y también por ejemplo C++).
- Nuitka compila Python en C.
- Numba utiliza LLVM para compilar un subconjunto de Python al código de máquina.
- Pythran compila un subconjunto de Python 3 a C++ (C++11).
- RPython se puede compilar a C, y se utiliza para construir el intérprete PyPy de Python.
- El Python → 11l → Transpilador C++ compila un subconjunto de Python 3 a C++ (C+17).
Especializados:
- MyHDL es un lenguaje de descripción de hardware basado en Python (HDL), que convierte el código MyHDL a Verilog o código VHDL.
Proyectos más antiguos (o que no se usen con Python 3.x y la sintaxis más reciente):
- Grumpy de Google (la última liberación en 2017) transpiles Python 2 a Go.
- IronPython permite ejecutar programas Python 2.7 (y un alpha, publicado en 2021, también está disponible para "Python 3.4, aunque las características y comportamientos de versiones posteriores pueden ser incluidos") en el. NET Common Language Runtime.
- Jython compila Python 2.7 a Java bytecode, permitiendo el uso de las bibliotecas Java de un programa Python.
- Pyrex (la última versión en 2010) y Shed Skin (la última versión en 2013) compilan a C y C++ respectivamente.
Rendimiento
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.
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 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:
- Versiones incompatibles al revés, donde se espera que el código se rompa y necesita ser manualmente portado. La primera parte del número de versión se aumenta. Estas versiones suceden infrecuentemente: la versión 3.0 fue liberada 8 años después de 2.0. Según Guido van Rossum, una versión 4.0 es muy poco probable que ocurra.
- Las versiones principales o "comida" 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 aumenta. A partir de Python 3.9, se espera que estas versiones ocurran anualmente. Cada versión principal es compatible con correcciones de errores durante varios años después de su liberación.
- Las versiones de Bugfix, que no introducen nuevas características, ocurren alrededor de cada 3 meses y se hacen cuando un número suficiente de fallos se han fijado río arriba desde la última liberación. Las vulnerabilidades de seguridad también se remplazan en estas versiones. La tercera y última parte del número de versión se aumenta.
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.
Generadores de documentación 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.
Nombramiento
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.
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 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.
Usos
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.
Lenguajes influenciados por Python
El diseño y la filosofía de Python han influido en muchos otros lenguajes de programación:
- Boo utiliza la indentación, una sintaxis similar, y un modelo de objeto similar.
- Cobra utiliza la indentación y una sintaxis similar, y su Reconocimientos lista de documentos Python primero entre idiomas que lo influenciaron.
- CoffeeScript, un lenguaje de programación que se cruza con JavaScript, tiene sintaxis inspirada en Python.
- ECMAScript/JavaScript ha prestado iteradores y generadores de Python.
- GDScript, un lenguaje de scripting muy similar a Python, incorporado al motor de juego Godot.
- Go está diseñado para la "velocidad de trabajar en un lenguaje dinámico como Python" y comparte la misma sintaxis para los arrays de corte.
- Groovy fue motivado por el deseo de llevar la filosofía de diseño Python a Java.
- Julia fue diseñada para ser "como usable para la programación general como Python".
- Nim utiliza la indentación y sintaxis similar.
- El creador de Ruby, Yukihiro Matsumoto, ha dicho: "Yo quería un lenguaje de scripting más poderoso que Perl, y más orientado al objeto que Python. Por eso decidí diseñar mi propio idioma".
- Swift, un lenguaje de programación desarrollado por Apple, tiene una sintaxis inspirada en Python.
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.
Contenido relacionado
Algoritmo de Ford-Fulkerson
Ole-Johan Dahl
Subprograma de Java