Python es un lenguaje de programación de propósito general de alto nivel interpretado. Su filosofía de diseño enfatiza la legibilidad del código con el uso de una sangría significativa. Sus construcciones de lenguaje, así como su enfoque orientado a objetos, tienen como objetivo ayudar a los programadores a escribir código claro y lógico para proyectos de pequeña y gran escala.
Python se escribe dinámicamente y se recolecta basura. Admite múltiples paradigmas de programación, incluida la programación estructurada (en particular, procedimental ), orientada a objetos y funcional. A menudo se describe como un lenguaje con "pilas incluidas" debido a su amplia 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 características, como listas por comprensión y un sistema de recolección de basura que usa el conteo de referencias. Python 3.0 se lanzó en 2008 y fue una revisión importante del lenguaje que no es completamente compatible con versiones anteriores. Python 2 se suspendió con la versión 2.7.18 en 2020.
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 amp; Informatica (CWI) en los Países Bajos como sucesor del lenguaje de programación ABC, que se inspiró en SETL, capaz de manejar excepciones 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 llamado Python. comunidad que se 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 centrales activos de Python eligieron un "Consejo Directivo" de cinco miembros para liderar el proyecto.
Python 2.0 fue lanzado el 16 de octubre de 2000, con muchas características nuevas importantes, incluido un recolector de basura que detecta ciclos y soporte para Unicode.
Python 3.0 fue lanzado el 3 de diciembre de 2008. Fue una revisión importante del lenguaje que no es completamente compatible con versiones anteriores. Muchos de sus principales características fueron portado a Python 2.6.xy 2.7.x serie de versiones. Las versiones de Python 3 incluyen la 2to3
utilidad, que automatiza la traducción del código de Python 2 a Python 3.
La fecha de finalización de Python 2.7 se estableció inicialmente en 2015 y luego se pospuso para 2020 debido a la preocupación de que una gran cantidad de código existente no se pudiera transferir fácilmente a Python 3. No se lanzarán más parches de seguridad ni otras mejoras. para ello. Con el final de la vida útil de Python 2, solo se admiten Python 3.6.xy versiones posteriores.
Python 3.9.2 y 3.8.8 se aceleraron ya que todas las versiones de Python (incluida la 2.7) tenían problemas de seguridad, lo que conducía a una posible ejecución remota de código y envenenamiento de la caché web.
Python es un lenguaje de programación de múltiples paradigmas. La programación orientada a objetos y la programación estructurada son totalmente compatibles, y muchas de sus características admiten la programación funcional y la programación orientada a aspectos (incluso mediante metaprogramación y metaobjetos (métodos mágicos)). Muchos otros paradigmas son compatibles mediante extensiones, incluido el diseño por contrato y la programación lógica.
Python usa tipado dinámico y una combinación de recuento de referencias y un recolector de basura con detección de ciclos para la gestión de la memoria. También cuenta con resolución dinámica de nombres ( enlace tardío ), que enlaza los nombres de métodos y variables durante la ejecución del programa.
El diseño de Python ofrece cierto soporte para la programación funcional en la tradición Lisp. Tiene filter
, map
y reduce
funciones; enumerar comprensiones, diccionarios, conjuntos y expresiones generadoras. La biblioteca estándar tiene dos módulos ( itertools
y functools
) que implementan herramientas funcionales tomadas de Haskell y Standard ML.
La filosofía central del lenguaje se resume en el documento The Zen of Python ( PEP 20), que incluye aforismos como:
En lugar de tener todas sus funciones integradas en su núcleo, Python fue diseñado para ser altamente extensible (con 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 básico pequeño con una gran biblioteca estándar y un intérprete fácilmente extensible surgió de sus frustraciones con ABC, que abrazó el enfoque opuesto. A menudo se describe como un lenguaje con "pilas incluidas" debido a su amplia biblioteca estándar.
Python se esfuerza por lograr una sintaxis y una gramática más simples y menos desordenadas, al tiempo que ofrece a los desarrolladores una opción en 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 diseño de "debe haber una, y preferiblemente sólo una, forma obvia de hacerlo". Alex Martelli, miembro de la Python Software Foundation y autor del libro de Python, escribe que "describir algo como 'inteligente' no se considera un cumplido en la cultura Python".
Los desarrolladores de Python se esfuerzan por evitar la optimización prematura y rechazan los parches para 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. 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 usar PyPy, un compilador justo a tiempo. También está disponible Cython, que traduce un script de Python a C y realiza llamadas directas a la API de nivel C en el intérprete de Python.
Los desarrolladores de Python tienen como objetivo que el lenguaje sea divertido de usar. Esto se refleja en su nombre, un tributo al grupo de comedia británico Monty Python, y en enfoques ocasionalmente divertidos de tutoriales y materiales de referencia, como ejemplos que hacen referencia a spam y huevos (una referencia a un boceto de Monty Python ) en lugar del estándar. foo y bar.
Un neologismo común en la comunidad de Python es el pitónico, que puede tener una amplia gama de significados relacionados con el estilo del programa. Decir que el código es pitónico es decir que usa bien los modismos de Python, que es natural o muestra fluidez en el lenguaje, que se ajusta a la filosofía minimalista de Python y el énfasis en la legibilidad. Por el contrario, 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 denomina no pitónico.
Los usuarios y admiradores de Python, especialmente aquellos considerados 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, usa palabras clave en inglés donde otros idiomas usan puntuación. A diferencia de muchos otros lenguajes, no utiliza corchetes para delimitar bloques, y se permiten puntos y coma después de las declaraciones, pero rara vez, si es que alguna vez, se utilizan. Tiene menos excepciones sintácticas y casos especiales que C o Pascal.
Python usa 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. Por lo tanto, la estructura visual del programa representa con precisión la estructura semántica del programa. Esta característica a veces se denomina regla de fuera de juego, que comparten algunos otros idiomas, pero en la mayoría de los idiomas la sangría no tiene ningún significado semántico. El tamaño de sangría recomendado es de cuatro espacios.
Las declaraciones de Python incluyen (entre otras):
=
. if
declaración, que ejecuta condicionalmente un bloque de código, junto con else
y elif
(una contracción de else-if). for
declaración, que itera sobre un objeto iterable, captura cada elemento en una variable local para que lo use el bloque adjunto. while
declaración, que ejecuta un bloque de código siempre que su condición sea verdadera. try
declaración, que permite que las excepciones generadas en su bloque de código adjunto sean capturadas y manejadas por except
cláusulas; también asegura que el código de limpieza en un finally
bloque siempre se ejecutará independientemente de cómo salga el bloque.raise
declaración, que se utiliza para generar una excepción especificada o volver a generar una excepción detectada.class
declaració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.def
declaración, que define una función o método. with
declaración, que incluye un bloque de código dentro de un administrador de contexto (por ejemplo, adquirir un bloqueo antes de que se ejecute el bloque de código y luego liberar el bloqueo, o abrir un archivo y luego cerrarlo), permitiendo la adquisición de recursos es la inicialización (RAII) -comportamiento similar a y reemplaza un lenguaje común try / finalmente.break
declaración sale de un bucle.continue
declaración omite esta iteración y continúa con el siguiente elemento.del
declaración elimina una variable, lo que significa que la referencia del nombre al valor se elimina y si se intenta usar esa variable se producirá un error. Se puede reasignar una variable eliminada.pass
declaración, que sirve como NOP. Se necesita sintácticamente para crear un bloque de código vacío. assert
declaración, utilizada durante la depuración para comprobar las condiciones que deberían aplicarse.yield
declaración, que devuelve un valor de una función generadora y yield
también es un operador. Este formulario se utiliza para implementar corrutinas.return
declaración, utilizada para devolver un valor de una función. import
instrucción, que se usa para importar módulos cuyas funciones o variables se pueden usar en el programa actual.La instrucción de asignación ( =
) opera mediante la unión de un nombre como una referencia a una separada, asignada dinámicamente objeto. Posteriormente, las variables pueden rebotar en cualquier momento a cualquier objeto. En Python, un nombre de variable es un titular de referencia genérico y no tiene un tipo de datos fijo asociado. Sin embargo, en un momento dado, una variable hará referencia a algún objeto, que tendrá un tipo. Esto se conoce como tipado dinámico y se contrasta con los lenguajes de programación de tipado estático, donde cada variable solo puede contener valores de un cierto tipo.
Python no admite la optimización de llamadas de cola ni las continuaciones de primera clase y, según Guido van Rossum, nunca lo hará. Sin embargo, se proporciona un mejor soporte para la funcionalidad similar a una corrutina, al extender los generadores de Python. Antes de la 2.5, los generadores eran iteradores perezosos ; la información se pasó unidireccionalmente fuera del generador. Desde Python 2.5, es posible devolver información a una función generadora, y desde Python 3.3, la información se puede pasar a través de múltiples niveles de pila.
Algunas expresiones de Python son similares a las que se encuentran en lenguajes como C y Java, mientras que otras no lo son:
//
y /
división de punto flotante. Python también usa el **
operador para exponenciación.@
se introdujo el nuevo operador infijo. Está destinado a ser utilizado por bibliotecas como NumPy para la multiplicación de matrices.:=
se introdujo la sintaxis, llamada 'operador de morsa'. Asigna valores a variables como parte de una expresión más grande.==
compara por valor, versus Java, que compara números por valor y objetos por referencia. (Las comparaciones de valores en Java en objetos se pueden realizar con el equals()
método). El is
operador de Python se puede usar para comparar identidades de objetos (comparación por referencia). En Python, las comparaciones pueden estar encadenadas, por ejemplo.a lt;= b lt;= c
and
, or
, not
por sus operadores booleanos en lugar de lo simbólico amp;amp;
, ||
, !
utilizado en Java y C.x if c else y
c ? x : y
[1, 2, 3]
(1, 2, 3)
+
t
(1, 2, 3)
t = t + (4, 5)
t + (4, 5)
(1, 2, 3, 4, 5)
t
t
%
. Esto funciona de manera análoga para printf
formatear cadenas en C, por ejemplo, evalúa a. En Python 3 y 2.6+, esto se complementó con el método de la clase, por ejemplo. Python 3.6 añadió "F-cuerdas":."spam=%s eggs=%d" % ("blah", 2)
"spam=blah eggs=2"
format()
str
"spam={0} eggs={1}".format("blah", 2)
blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'
"spam" + "eggs"
"spameggs"
"2" + "2"
"22"
\
) como carácter de escape. La interpolación de cadenas estuvo disponible en Python 3.6 como "literales de cadena formateados".r
. Las secuencias de escape no se interpretan; por lo tanto, las cadenas sin formato son útiles donde las barras invertidas literales son comunes, como las expresiones regulares y las rutas de estilo de Windows. Compare " @
-quoting" en C #.a[key]
, o. Los índices se basan en cero y los índices negativos son relativos al final. Los sectores toman elementos desde el índice de inicio hasta el índice de parada, pero sin incluirlo. El tercer parámetro de corte, llamado paso o paso, permite omitir e invertir elementos. Los índices de corte pueden omitirse, por ejemplo, devuelve una copia de la lista completa. Cada elemento de un sector es una copia superficial. a[start:stop]
a[start:stop:step]
a[:]
En Python, la distinción entre expresiones y declaraciones se aplica de forma rígida, en contraste con lenguajes como Common Lisp, Scheme o Ruby. Esto conduce a la duplicación de algunas funciones. Por ejemplo:
for
buclesif
bloqueseval()
vs. exec()
incorporadas (en Python 2, exec
es una declaración); el primero es para expresiones, el segundo es para declaraciones.Las declaraciones no pueden ser parte de una expresión, por lo que la lista y otras comprensiones o expresiones lambda, que son todas expresiones, no pueden contener declaraciones. Un caso particular de esto es que una declaración de asignación como no puede formar parte de la expresión condicional de una declaración condicional. Esto tiene la ventaja de evitar un error C clásico de confundir un operador de asignación con un operador de igualdad en condiciones: es un código C sintácticamente válido (pero probablemente no intencionado) pero causa un error de sintaxis en Python. a = 1
=
==
if (c = 1) {... }
if c = 1:...
Los métodos sobre objetos son funciones adjuntas a la clase del objeto; la sintaxis es, para métodos y funciones normales, azúcar sintáctico para. Los métodos de Python tienen un parámetro explícito para acceder a los datos de la instancia, en contraste con el self implícito (o) en algunos otros lenguajes de programación orientados a objetos (por ejemplo, C ++, Java, Objective-C o Ruby ). Aparte de esto, Python también proporciona métodos, a menudo denominados 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 cómo son manejadas por operaciones nativas como longitud, comparación, en aritmética. operaciones, conversión de tipos y muchos más. instance.method(argument)
Class.method(instance, argument)
self
this
Python usa la escritura pato y tiene objetos escritos pero nombres de variables sin escribir. Las restricciones de tipo no se comprueban en el momento de la compilación ; más bien, las operaciones sobre un objeto pueden fallar, lo que significa que el objeto dado no es de un tipo adecuado. A pesar de estar escrito dinámicamente, Python está fuertemente tipado, lo que prohíbe 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 utilizando 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, o), y las clases son instancias de la metaclase (en sí misma 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: de estilo antiguo y nuevo estilo. La sintaxis de ambos estilos es la misma, la diferencia es si la clase object
se hereda, directa o indirectamente (todas las clases de estilo nuevo heredan object
y son instancias de type
). En las versiones de Python 2 desde Python 2.2 en adelante, se pueden usar ambos tipos de clases. Las clases de estilo antiguo se eliminaron en Python 3.0.
El plan a largo plazo es admitir la escritura gradual y, desde Python 3.5, la sintaxis del lenguaje permite especificar tipos estáticos pero no se verifican en la implementación predeterminada, CPython. Un verificador de tipo estático opcional experimental llamado mypy admite la verificación de tipos en tiempo de compilación.
Escribe | Mutabilidad | Descripción | Ejemplos de sintaxis |
---|---|---|---|
bool | inmutable | Valor booleano | True False |
bytearray | mudable | 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 | mudable | Matriz asociativa (o diccionario) de pares clave y valor; puede contener tipos mixtos (claves y valores), las claves deben ser de tipo hash | {'key1': 1.0, 3: False} {} |
ellipsis | inmutable | Un marcador de posición de puntos suspensivos que se utilizará como índice en matrices NumPy | ... Ellipsis |
float | inmutable | Número de coma flotante de doble precisión. La precisión depende 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 | Conjunto desordenado, no contiene duplicados; puede contener tipos mixtos, si se puede mezclar | frozenset([4.0, 'string', True]) |
int | inmutable | Entero de magnitud ilimitada | 42 |
list | mudable | Lista, puede contener tipos mixtos | [4.0, 'string', True] [] |
NoneType | inmutable | Un objeto que representa la ausencia de un valor, a menudo llamado nulo en otros idiomas. | None |
NotImplementedType | inmutable | Un marcador de posición que puede ser devuelto por operadores sobrecargados para indicar tipos de operandos no admitidos. | NotImplemented |
range | inmutable | Una secuencia de números que se usa comúnmente para repetir un número específico de veces en for bucles | range(-1, 10) range(10, -5, -2) |
set | mudable | Conjunto desordenado, no contiene duplicados; puede contener tipos mixtos, si se puede mezclar | {4.0, 'string', True} set() |
str | inmutable | Una cadena de caracteres : secuencia de puntos de código Unicode | 'Wikipedia' "Wikipedia" """Spanning multiple lines""" |
tuple | inmutable | Puede contener tipos mixtos | (4.0, 'string', True) ('single element',) () |
^ a No se puede acceder directamente por su nombre
Python tiene los símbolos habituales para operadores aritméticos ( +
, -
, *
, /
), el operador de división baja //
y la operación de módulo %
(donde el resto puede ser negativo, por ejemplo 4 % -3 == -2
). También tiene **
por exponenciación, por ejemplo, 5**3 == 125
y 9**0.5 == 3.0
, y un operador de matriz-multiplicación @
. Estos operadores funcionan como en las matemáticas tradicionales; con las mismas reglas de precedencia, los operadores son infijos ( +
y -
también pueden ser unarios 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 ser siempre una división de punto flotante, por ejemplo.5/2 == 2.5
7/3 == 2
y -7/3 == -3
. Se //
presentó al operador de la división de piso. Por lo tanto 7//3 == 2
, -7//3 == -3
, 7.5//3 == 2.0
y -7.5//3 == -3.0
. Agregar hace que un módulo use las reglas de Python 3.0 para la división (ver a continuación).from __future__ import division
/
operador es la división de enteros si ambos operandos son enteros y la división de punto flotante en caso contrario. La división de enteros se redondea hacia 0, por ejemplo, y.7/3 == 2
-7/3 == -2
En términos de Python, /
es una verdadera división (o simplemente una división) y //
es una división de piso. /
antes de la versión 3.0 es la división clásica.
El redondeo hacia el infinito negativo, aunque es diferente a la mayoría de los idiomas, agrega consistencia. Por ejemplo, significa que la ecuación siempre es cierta. 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 mientras el resultado de está, como se esperaba, en el intervalo semiabierto [0, b), donde es un número entero positivo, tiene que estar en el intervalo ( b, 0] cuando es negativo. (a + b)//b == a//b + 1
b*(a//b) + a%b == a
a
a%b
b
b
Python proporciona una round
función para redondear un flotante al número 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 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 lt; b lt; c
prueba si a
es menor que b
y b
menor que c
. Los lenguajes derivados de C interpretan esta expresión de manera diferente: en C, la expresión primero se evaluaría a lt; 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 números enteros. El Decimal
tipo / clase en el decimal
módulo proporciona números de coma flotante decimal con una precisión arbitraria predefinida y varios modos de redondeo. La Fraction
clase del fractions
módulo 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 scripting científico para ayudar en problemas como el procesamiento y la manipulación de datos numéricos.
Programa Hola mundo :
print('Hello, world!')
Programa para calcular el factorial de un entero positivo:
n = int(input('Type a number, and its factorial will be printed: ')) if n lt; 0: raise ValueError('You must enter a non-negative integer') factorial = 1 for i in range(2, n + 1): factorial *= i print(factorial)
La gran biblioteca estándar de Python, comúnmente citada como una de sus mayores fortalezas, proporciona herramientas adecuadas para muchas tareas. 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 a PEP 333), pero la mayoría de los módulos no. Están especificados 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 algunos módulos necesitan ser modificados o reescritos para implementaciones variantes.
A partir de septiembre de 2021, el índice de paquetes de Python (PyPI), el repositorio oficial de software de Python de terceros, contiene más de 329,000 paquetes con una amplia gama de funcionalidades, que incluyen:
La mayoría de las implementaciones de Python (incluido CPython) incluyen un ciclo de lectura-evaluación-impresión (REPL), lo que les permite funcionar como un intérprete de línea de comandos para el cual el usuario ingresa declaraciones secuencialmente y recibe los 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.
Además de los entornos de desarrollo integrados de escritorio estándar, existen IDE basados en navegador web ; SageMath (destinado a desarrollar programas de Python relacionados con la ciencia y las matemáticas); PythonAnywhere, un entorno de alojamiento e IDE basado en navegador; y Canopy IDE, un IDE comercial de Python 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 con varias características seleccionadas de C99 (con versiones posteriores de C, se considera desactualizado; CPython incluye sus propias extensiones de C, pero las extensiones de terceros no se limitan a versiones de C anteriores, por ejemplo, se pueden implementar con C11 o C ++). Compila los programas de Python en un bytecode 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. Está disponible para muchas plataformas, incluida Windows (a partir de Python 3.9, el instalador de Python no se instala deliberadamente en Windows 7 y 8; Windows XP fue compatible hasta Python 3.5) y la mayoría de los sistemas modernos similares a Unix, incluidos macOS (y Apple M1 Mac, desde Python 3.9.1, con instalador experimental) y soporte no oficial para, por ejemplo, VMS. La portabilidad de la plataforma fue una de sus primeras prioridades, durante el período de tiempo de Python 1 y Python 2, incluso se admitieron OS / 2 y Solaris ; Desde entonces, el soporte se ha eliminado para muchas plataformas.
Se han desarrollado otros compiladores de Python justo a tiempo, pero ahora no son compatibles:
Hay varios compiladores de lenguajes de objetos de alto nivel, ya sea con Python sin restricciones, un subconjunto restringido de Python o un lenguaje similar a Python como idioma de origen:
En EuroSciPy '13 se presentó una comparación de rendimiento de varias implementaciones de Python en una carga de trabajo no numérica (combinatoria). El rendimiento de Python en comparación con otros lenguajes de programación también está evaluado por The Computer Language Benchmarks Game.
El desarrollo de Python se lleva a cabo en gran parte a través del proceso de Propuesta de mejora de Python (PEP), el mecanismo principal para proponer nuevas funciones importantes, recopilar la opinión de la comunidad sobre problemas y documentar las decisiones de diseño de Python. El estilo de codificación de Python se trata en PEP 8. La comunidad de Python y el consejo directivo revisan y comentan los PEP sobresalientes.
La mejora del lenguaje corresponde al desarrollo de la implementación de referencia CPython. La lista de correo python-dev es el foro principal para el desarrollo del lenguaje. Los problemas específicos se discuten en el rastreador de errores de Roundup alojado en bugs.python.org. Desarrollo tuvo lugar originalmente en un auto-organizada repositorio de código de origen que ejecuta Mercurial, hasta que se trasladó a Python 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 publican como vistas previas y para probar antes de los lanzamientos finales. Aunque existe un cronograma aproximado para cada versión, 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 gran conjunto de pruebas unitarias 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 está obsoleto wstr
(se eliminará en Python 3.12; lo que significa que las extensiones de Python deben modificarse para entonces), y también planea agregar coincidencia de patrones al 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 utilizan a menudo en la literatura de Python son spam y huevos en lugar del tradicional 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. 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 TIOBE, donde, a partir de octubre de 2021, es el lenguaje más popular (por delante de Java y C). Fue seleccionado Lenguaje de programación del año (por "el mayor aumento en calificaciones en un año") en 2007, 2010, 2018 y 2020 (el único idioma que lo hizo cuatro veces).
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 era a menudo "mejor que Java y no mucho peor que C o C ++ ".
Las grandes organizaciones que utilizan 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 de noticias sociales Reddit se escribió principalmente en Python.
Python puede servir como lenguaje de programación para aplicaciones web, por ejemplo, a través de mod_wsgi para el servidor web Apache. Con la Interfaz de puerta de enlace del servidor web, se ha desarrollado una API estándar para facilitar estas aplicaciones. Los frameworks web como Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle y Zope apoyan a los desarrolladores en el diseño y mantenimiento de aplicaciones complejas. Pyjs e IronPython se pueden utilizar para desarrollar el lado del cliente de aplicaciones basadas en Ajax. SQLAlchemy se puede utilizar como un mapeador de datos para una base de datos relacional. Twisted es un marco para programar comunicaciones entre computadoras y es utilizado (por ejemplo) por Dropbox.
Bibliotecas como NumPy, SciPy y Matplotlib permiten el uso eficaz de Python en la informática científica, con bibliotecas especializadas como Biopython y Astropy que brindan funcionalidad específica de dominio. SageMath es un sistema de álgebra de computadora con una interfaz de cuaderno programable en Python: su biblioteca cubre muchos aspectos de las matemáticas, incluyendo álgebra, combinatoria, matemáticas numéricas, teoría de números y cálculo. OpenCV tiene enlaces de Python con un rico 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 arquitectura modular, sintaxis simple y herramientas de procesamiento de texto enriquecido, Python se usa a menudo para el procesamiento del lenguaje natural.
Python se ha integrado con éxito en muchos productos de software como lenguaje de scripting, incluso en software de método de elementos finitos como Abaqus, modelador paramétrico 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 de 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 (usando Python 2.7), FreeBSD (como paquete), NetBSD, OpenBSD (como paquete) y macOS y se puede usar desde la línea de comandos (terminal). Muchas distribuciones de Linux usan instaladores escritos en Python: Ubuntu usa el instalador de Ubiquity, mientras que Red Hat Linux y Fedora usan el instalador de Anaconda. Gentoo Linux usa Python en su sistema de administración de paquetes, Portage.
Python se utiliza ampliamente en la industria de la seguridad de la información, incluido el desarrollo de exploits.
La mayor parte del software de Sugar para One Laptop per Child XO, ahora desarrollado en Sugar Labs, está escrito en Python. El proyecto de computadora de placa única Raspberry Pi ha adoptado Python como su principal lenguaje de programación de usuario.
LibreOffice incluye Python y tiene la intención de reemplazar Java con Python. Su proveedor de secuencias de comandos de Python es una característica principal 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 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 usa en Tcl, Erlang y Swift.