Pitón | ||
Fecha de la primera versión | 20 de febrero de 1991 | |
---|---|---|
Paradigmas | Propósito , imperativo y funcional | |
Autor | Guido van Rossum | |
Desarrolladores | Fundación de software Python | |
Última versión | 3.9.6 (28 de junio de 2021) | |
Versión en desarrollo | 3.10.0b4 (10 de julio de 2021) | |
Mecanografía | Fuerte , dinámico , duck typing | |
Influenciado por | ABC , C , Eiffel , ICON , Modula-3 , Java , Perl , Smalltalk , Tcl | |
Influenciado | Ruby , Groovy , Boo , Julia | |
Implementaciones | CPython , Jython , IronPython , PyPy | |
Escrito en | C para CPython, Java para Jython, C # para IronPython y en el propio Python para PyPy | |
Sistema de explotación | Multiplataforma | |
Licencia |
Licencia gratuita : Licencia Python Software Foundation |
|
Sitio web | www.python.org | |
Extensión de archivo | py, pyc, pyd, pyo, pyw, pyz y pyi | |
Python (pronunciado / p i . T ɔ / ) es un lenguaje de programación interpretado , multi- paradigma y multiplataforma . Promueve la programación imperativa estructurada , funcional y orientada a objetos . Tiene una fuerte escritura dinámica , administración automática de memoria mediante recolección de basura y un sistema de administración de excepciones ; por tanto, es similar a Perl , Ruby , Scheme , Smalltalk y Tcl .
El lenguaje Python se coloca bajo una licencia gratuita cercana a la licencia BSD y funciona en la mayoría de las plataformas informáticas , desde teléfonos inteligentes hasta computadoras mainframe , desde Windows a Unix, en particular GNU / Linux a través de macOS , o incluso Android , iOS , y también puede ser traducido a Java o .NET . Está diseñado para optimizar la productividad de los programadores al ofrecer herramientas de alto nivel y una sintaxis fácil de usar.
También es apreciado por algunos pedagogos que encuentran en él un lenguaje donde la sintaxis, claramente separada de los mecanismos de bajo nivel , permite una fácil iniciación a los conceptos básicos de programación.
Python es un lenguaje de programación que se puede utilizar en muchos contextos y adaptarse a cualquier tipo de uso gracias a bibliotecas especializadas. Sin embargo, se utiliza particularmente como lenguaje de programación para automatizar tareas simples pero tediosas, como una secuencia de comandos que recuperaría el clima de Internet o que se integraría en un software de diseño asistido por computadora para automatizar ciertas secuencias de acciones repetitivas (ver la sección Adopción ). También se utiliza como lenguaje de desarrollo de prototipos cuando se necesita una aplicación funcional antes de optimizarla con un lenguaje de nivel inferior. Está particularmente extendido en el mundo científico y tiene muchas bibliotecas optimizadas para el cálculo numérico .
A finales de la década de 1980 , el programador Guido van Rossum participó en el desarrollo del lenguaje de programación ABC en Centrum voor Wiskunde en Informatica (CWI) en Ámsterdam , Países Bajos . Luego trabajó en el equipo del sistema operativo Amoeba , cuyas llamadas al sistema eran difíciles de interactuar con el shell Bourne utilizado como interfaz de usuario . Luego cree que un lenguaje de programación inspirado en ABC podría ser interesante como intérprete de comandos para Amoeba.
En 1989 , aprovechando una semana de vacaciones durante las vacaciones de Navidad , utilizó su computadora personal para escribir la primera versión del idioma. Fanático de la serie de televisión Monty Python's Flying Circus , decide bautizar este proyecto como Python. Se inspiró principalmente en ABC, por ejemplo para sangrías como sintaxis o tipos de alto nivel, pero también en Modula-3 para el manejo de excepciones , lenguaje C y herramientas UNIX .
Durante el año siguiente, el equipo del proyecto Amoeba comenzó a adoptar el lenguaje, y Guido continuó desarrollándose principalmente en su tiempo libre. EnFebrero de 1991, la primera versión pública, numerada 0.9.0, se publica en el foro Usenet alt.sources. La última versión lanzada en CWI es Python 1.2.
En 1995 , Van Rossum continuó su trabajo en Python en CNRI (en) en Reston , Estados Unidos , donde lanzó varias versiones del software.
De'Agosto de 1995, el equipo de Python está trabajando en el NCRI en Grail, un navegador web que usa Tk . Es el equivalente en Python del navegador HotJava , lo que le permite ejecutar applets en un entorno seguro. La primera versión pública, disponible en noviembre, es la 0.2. Impulsa el desarrollo de módulos para la biblioteca estándar como rexec , htmllib o urllib . La versión 0.6 será la última de Grail ; está publicado enAbril de 1999.
En 1999 , el proyecto Computer Programming for Everybody (CP4E) fue lanzado conjuntamente entre el CNRI y DARPA . Se trata de utilizar Python como una enseñanza de programación de lenguaje . Esta iniciativa conducirá a la creación del entorno de desarrollo IDLE . Sin embargo, debido a la falta de financiación para el proyecto por parte de DARPA, y la salida de muchos desarrolladores de Python del NCRI (incluido Guido van Rossum), el proyecto se extinguió en 2000. Python 1.6 fue la última versión lanzada en el NCRI.
En 2000 , el equipo principal de desarrollo de Python se trasladó a BeOpen.com para formar el equipo de BeOpen PythonLabs . Python 2.0 es la única versión lanzada en BeOpen.com. Después de este lanzamiento, Guido Van Rossum y los otros desarrolladores de PythonLabs se unieron a Digital Creations (ahora conocido como Zope Corporation ).
Andrew M. Kuchling publica en Diciembre de 1999un texto llamado Python Warts , que sintetiza los agravios más frecuentes expresados contra el lenguaje. Este documento tendrá una influencia definitiva en los desarrollos futuros del idioma.
Python 2.1 es una versión derivada de Python 1.6.1 y Python 2.0. Su licencia pasa a llamarse Python Software Foundation License . Cualquier código , documentación y especificación agregados desde el lanzamiento de Python 2.1 alpha es propiedad de Python Software Foundation (PSF), una organización sin fines de lucro fundada en 2001, siguiendo el modelo de Apache Software Foundation .
Para corregir algunas fallas del lenguaje (por ejemplo, orientado a objetos con dos tipos de clases ) y limpiar la biblioteca estándar de sus elementos obsoletos y redundantes, Python eligió romper la compatibilidad con versiones anteriores en la nueva versión principal, Python 3.0, publicada endiciembre de 2008. Esta versión es seguida rápidamente por una versión 3.1 que corrige los primeros errores de la versión 3.0.
Python fue diseñado para ser un lenguaje legible. Tiene como objetivo ser visualmente limpio. Por ejemplo, tiene menos construcciones sintácticas que muchos lenguajes estructurados como C , Perl o Pascal . Los comentarios se indican con el carácter de cruz (#).
Los bloques se identifican por la sangría en lugar de llaves como C o C ++ ; o begin ... endcomo en Pascal o Ruby . Aumentar la sangría marca el inicio de un bloque y reducir la sangría marca el final del bloque actual. Por convención (actualmente PEP8), la sangría suele ser de cuatro espacios en Python.
Función factorial en C | Función factorial en Python |
---|---|
int factorielle(int n) { if (n < 2) { return 1; } else { return n * factorielle(n - 1); } } | def factorielle(n): if n < 2: return 1 else: return n * factorielle(n - 1) |
Nota: La sangría se puede cambiar o eliminar en la versión C sin cambiar su comportamiento. Asimismo, la función de Python se puede escribir con una expresión condicional. Sin embargo, una sangría correcta facilita la detección de errores cuando se anidan varios bloques y, por lo tanto, facilita la eliminación de estos errores. Por eso es preferible aplicar sangría a los programas en C. La versión corta se escribiría de la siguiente manera:
Función factorial en C | Función factorial en Python |
---|---|
int factorielle(int n) { return n < 2 ? 1 : n * factorielle(n - 1); } | def factorielle(n): return n * factorielle(n - 1) if n > 1 else 1 |
Las palabras clave reservadas del lenguaje Python se proporcionan en la lista de keyword.kwlistmódulos keyword.
Las palabras clave de Python 2.7.5 son: and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield.
A partir de Python 3.0, printya execno son palabras clave de lenguaje, sino funciones de módulo builtins. Se añaden a las palabras clave: True, False, Noney nonlocal. Los tres primeros ya estaban presentes en versiones anteriores, pero ya no son editables (anteriormente True = 1era posible la asignación ). nonlocalfue introducido por el PEP 3104, y permite, en una función definida dentro de otra función, modificar una variable de mayor alcance . Antes de eso, solo las variables locales a la función y globales (nivel de módulo) eran modificables. Sin embargo, fue posible, y aún lo es sin la palabra clave nonlocal, modificar un objeto asignado a una variable de un nivel superior de alcance, por ejemplo, una lista con el método append; esto es obviamente imposible para un objeto que no cambia .
Tipos basicosLos tipos básicos de Python son relativamente completos y potentes. Hay, entre otros:
Los objetos iterables se recorren de la forsiguiente manera:
for element in objet_iterable: traiter(element)Para una cadena de caracteres, la iteración procede carácter por carácter.
Es posible derivar clases de tipos base para crear sus propios tipos. También puede crear sus propios tipos de objetos iterables sin heredar los iterables base utilizando el protocolo de iteración del lenguaje.
Programación funcionalPython permite programar en un estilo funcional . También tiene comprensiones de listas y, de manera más general, las comprensiones pueden producir generadores, diccionarios o conjuntos . Por ejemplo, para construir la lista de cuadrados de números naturales menores que 10, podemos usar la expresión:
liste = [x**2 for x in range(10)] # liste = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]La lista de números pares :
liste = [entier for entier in range(10) if entier % 2 == 0] # liste = [0, 2, 4, 6, 8]Una tabla de paso de las letras del alfabeto a su código ASCII :
{chr(n): n for n in range(65, 91)}El conjunto de letras de una palabra (produce el conjunto {'r', 'c', 'd', 'b', 'a'}):
s = "abracadabra" {c for c in s}Una comprensión puede constar de varios bucles y filtros, y existe una correspondencia con el código que realiza el mismo cálculo utilizando instrucciones fory if :
Comprensión | Código equivalente |
---|---|
[ i + j if i != j else 0 for i in range(n) if i % 2 != 0 for j in range(n) if j % 3 != 0 ] | a = [] for i in range(n): if i % 2 != 0: for j in range(n): if j % 3 != 0: a.append(i + j if i != j else 0) |
Es posible una forma limitada de función anónima :
lambda x: x + 2Las funciones Lambda se pueden definir en línea y usar como argumentos en expresiones funcionales:
filter(lambda x: x < 5, une_liste)devolverá una lista formada por los elementos de a_list menor que 5. El mismo resultado se puede obtener con
[x for x in une_liste if x < 5]Las lambdas de Python solo admiten expresiones y no se pueden utilizar como funciones anónimas generalizadas; pero en Python, todas las funciones son objetos, por lo que pueden pasarse como argumentos a otras funciones y llamarse cuando sea necesario. De hecho, una función definida con def se puede crear dentro de otra función y así obtenemos una definición de función en una variable local, por ejemplo:
def filtre_inferieur_a_5(une_liste): def mon_filtre(x): # variable locale mon_filtre return x < 5 return filter(mon_filtre, une_liste)Una función local puede modificar el entorno de la función que la creó, gracias a la palabra clave nonlocal(ver Shutdown (IT) ):
def accum(pas): total = 0 def ajoute(n): nonlocal total total += n * pas return total return ajoutePor tanto, es posible crear varios acumuladores, cada uno de los cuales se refiere a su propio total. Es posible acceder al entorno de una función local utilizando el atributo __closure__.
Programación de objetosTodos los tipos básicos, funciones, instancias de clases (los objetos "clásicos" de los lenguajes C ++ y Java ) y las clases mismas (que son instancias de metaclases) son objetos.
Una clase se define con la palabra clave class. Las clases Python admiten la herencia múltiple ; no hay sobrecarga estática como en C ++, ni restricciones de herencia como es el caso en Java (una clase implementa varias interfaces y hereda de una sola clase) pero el mecanismo de los argumentos opcionales y por palabra clave es más general y más flexible . En Python, el atributo de un objeto puede hacer referencia a una instancia o variable de clase (generalmente un método). Es posible leer o modificar un atributo dinámicamente con las funciones:
Ejemplo de dos clases simples:
class Personne: def __init__(self, nom, prenom): self.nom = nom self.prenom = prenom def presenter(self): return self.nom + " " + self.prenom class Etudiant(Personne): def __init__(self, niveau, nom, prenom): Personne.__init__(self, nom, prenom) self.niveau = niveau def presenter(self): return self.niveau + " " + Personne.presenter(self) e = Etudiant("Licence INFO", "Dupontel", "Albert") assert e.nom == "Dupontel" Métodos especiales y definición de operadores.Python proporciona un mecanismo elegante y orientado a objetos para definir un conjunto predefinido de operadores: cualquier objeto de Python puede recibir los llamados métodos especiales.
Estos métodos, que comienzan y terminan con dos guiones bajos , se llaman cuando se usa un operador en el objeto: +(método __add__), +=(método __iadd__), [](método __getitem__), ()(método __call__), etc. Los métodos como __repr__y le __str__permiten definir la representación de un objeto en el intérprete interactivo y su representación con la función de impresión .
Las posibilidades son numerosas y se describen en la documentación del idioma.
Por ejemplo, podemos definir la suma de dos vectores bidimensionales con la siguiente clase:
class Vector2D: def __init__(self, x, y): # On utilise un tuple pour stocker les coordonnées self.coords = (x, y) def __add__(self, other): # L'instruction a+b sera résolue comme a.__add__(b) # On construit un objet Vector2D à partir des coordonnées propres à l'objet, et à l'autre opérande return Vector2D(self.coords[0]+other.coords[0], self.coords[1]+other.coords[1]) def __repr__(self): # L'affichage de l'objet dans l'interpréteur return "Vector2D(%s, %s)" %self.coords a = Vector2D(1, 2) b = Vector2D(3, 4) print(a + b) # Vector2D(4, 6) GeneradoresLa palabra clave yieldutilizada en una función permite hacer de esta función un generador. Llamar a esta función devuelve un objeto de tipo generador , que se puede utilizar en un bucle for, por ejemplo.
En cada llamada, el generador realiza su procesamiento hasta que encuentra la palabra clave yield, devuelve el valor de la expresión yieldy, en la siguiente llamada, reanuda su flujo justo después de yield. Por ejemplo, para calcular la secuencia de Fibonacci , podemos escribir:
def gen_fibonacci(): """Générateur de la suite de Fibonacci""" a, b = 0, 1 while True: yield a # Renvoie la valeur de "a", résultat de l'itération en cours a, b = b, a + b fi = gen_fibonacci() for i in range(20): print(next(fi))El módulo le itertoolspermite manipular los generadores. Por ejemplo, para extraer los primeros 10 elementos del generador anterior:
import itertools list(itertools.islice(gen_fibonacci(), 10)) # renvoie [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]Desde Python 3.3, es posible producir un generador a partir de una función recursiva, gracias a la sintaxis yield from, que apareció en el PEP 380 y que “delega” el cálculo a un subgenerador. El siguiente ejemplo calcula las permutaciones de las reinas correspondientes a las soluciones del problema de las ocho reinas extendidas a un tablero de ajedrez de tamaño n × n.
def queens(n): a = list(range(n)) up = [True] * (2 * n - 1) down = [True] * (2 * n - 1) def sub(i): for k in range(i, n): j = a[k] p = i + j q = i - j + n - 1 if up[p] and down[q]: if i == n - 1: yield tuple(a) else: up[p] = down[q] = False a[i], a[k] = a[k], a[i] yield from sub(i + 1) up[p] = down[q] = True a[i], a[k] = a[k], a[i] yield from sub(0) sum(1 for a in queens(8)) # Nombre de solutions, renvoie 92Un constructor puede tener el mismo aspecto que una función que devuelve una lista, pero a diferencia de una lista que contiene todos sus elementos, un constructor calcula sus elementos uno por uno .
Así, la prueba 36 in [n * n for n in range(10)]se realizará sobre la lista calculada en su totalidad, mientras que en 36 in (n * n for n in range(10)), que utiliza un generador, el cálculo de los cuadrados se detiene en cuanto se encuentra 36. Podemos convencernos de esto reemplazándolo n * ncon una llamada de función que produzca un efecto de borde , por ejemplo, una visualización en la pantalla.
Gracias a un uso intensivo de diccionarios (contenedor asociativo desarrollado con tablas hash ), Python permite explorar los distintos objetos del lenguaje ( introspección ) y en ciertos casos modificarlos ( intercesión ).
La escritura no se comprueba en la compilación. Python usa el tipo pato : en tiempo de ejecución, si un método invocado en un objeto tiene la misma firma que un método declarado en este objeto, entonces se ejecuta el último método. Por lo tanto, la invocación de un método que no existe en un objeto fallará, lo que significa que el objeto en cuestión no es del tipo correcto. A pesar de la falta de tipado estático, Python está fuertemente tipado, lo que prohíbe operaciones sin sentido (por ejemplo, agregar un número a una cadena) en lugar de intentar convertirlo silenciosamente a una forma significativa. Python proporciona funciones para transformar variables en otro tipo:
points = 3.2 # points est du type float print("Tu as " + points + " points !") # Génère une erreur de typage points = int(points) # points est maintenant du type int (entier), sa valeur est arrondie à l'unité inférieure (ici 3) print("Tu as " + points + " points !") # Génère une erreur de typage points = str(points) # points est maintenant du type str (chaîne de caractères) print("Tu as " + points + " points !") # Plus d'erreur de typage, affiche 'Tu as 3 points !'Python también proporciona un mecanismo de escritura estático para los atributos de clase utilizando la API de rasgos o el patrón de diseño de los decoradores .
AnotacionesDesde la versión 3.0, Python ofrece anotaciones de variables en funciones (introducido en PEP 3107). Esto permite hacer que el código sea más legible sin actuar como una solución de tipado estático ya que nada obliga a seguir estas anotaciones.
def hello(name: str) -> str: return "Hello {} !".format(name) hello("Alice") # Appel suggéré par les annotations hello(True) # Appel non conforme mais tout à fait fonctionnelAdemás, desde la versión 3.5, Python ofrece el módulo de mecanografía (introducido en PEP 484).
from typing import List def split_string(string: str) -> List[str]: return string.split(" ") CompilacionEs posible realizar un análisis estático de los módulos de Python con herramientas como Pylint, mypy o PyChecker. Sin requerir ejecución, estas herramientas detectan fallas o construcciones obsoletas. Por ejemplo, una clase que hereda de una clase abstracta y que no redefine métodos abstractos, o variables utilizadas antes de ser declaradas, o atributos de instancia declarados fuera del método __init__.
También es posible generar un código intermedio de Python (código de bytes ).
Herramientas como PyInstaller u otras más específicas como cx_Freeze en Unix , Windows y macOS , py2app en macOS y py2exe en Windows permiten "compilar" un programa de Python en forma de ejecutable compuesto por el programa y un intérprete de Python.
El programa no se ejecuta más rápido (no está compilado como código de máquina) pero esto simplifica enormemente su distribución, especialmente en máquinas donde el intérprete de Python no está instalado.
En Python todo es un objeto , en el sentido de que una variable puede contener una referencia a todos los elementos que maneja el lenguaje: números, métodos, módulos, etc. . Sin embargo, antes de la versión 2.2, las clases y las instancias de clase eran un tipo especial de objeto, lo que significaba que, por ejemplo, era imposible derivar su propia subclase del objeto de lista .
MétodosEl modelo de objetos de Python está inspirado en el de Modula-3. Entre estos préstamos está la obligación de declarar la instancia del objeto actual, convencionalmente llamado self , como el primer argumento de los métodos, y cada vez que deseamos acceder a un dato de esta instancia en el cuerpo de este método. Esta práctica no es natural para los programadores que provienen, por ejemplo, de C ++ o Java, ya que la profusión del yo es a menudo criticada por ser una contaminación visual que dificulta la lectura del código. Por el contrario, los promotores del yo explícito creen que evita el uso de convenciones de nomenclatura para los datos de los miembros y que simplifica tareas como llamar a un método de superclase o resolver la desambiguación entre los datos de los miembros.
Python reconoce tres tipos de métodos:
El lenguaje tiene un soporte muy limitado para la encapsulación . No existe, como en Java, por ejemplo, control de accesibilidad mediante palabras clave como protectedo private.
La filosofía de Python es diferenciar conceptualmente la encapsulación de la ocultación de información. El enmascaramiento de información tiene como objetivo prevenir el uso fraudulento, es una preocupación de seguridad informática . El módulo bastión de la biblioteca estándar, que ya no se mantiene en las últimas versiones del lenguaje, permitió controlar el acceso a los atributos de un objeto en el marco de un entorno de ejecución restringido.
La encapsulación es un problema de desarrollo de software. El lema de los desarrolladores de Python es que todos somos adultos que consienten aquí . Consideran que basta con indicar, mediante convenciones por escrito, las partes públicas de las interfaces y que corresponde a los usuarios de los objetos ajustarse a estas convenciones o asumir sus responsabilidades. La costumbre es prefijar a los miembros privados con un guión bajo. El lenguaje también permite el uso de un doble subrayado para evitar colisiones de nombres, prefijando automáticamente el nombre de los datos con el de la clase donde está definido.
El uso de la función property()permite definir propiedades que pretenden interceptar, mediante métodos, los accesos a un miembro de datos. Esto hace que sea innecesario definir de forma sistemática los descriptores de acceso y ocultar los datos, como es común en C ++, por ejemplo.
HerenciaPython admite herencia múltiple . Desde la versión 2.3, utiliza el algoritmo C3 (en) , derivado del lenguaje Dylan , para resolver el orden de resolución del método ( MRO ). Las versiones anteriores usaban un algoritmo de recorrido profundo que causaba problemas en el caso de una reliquia de diamantes .
Python tiene una gran biblioteca estándar , que proporciona herramientas adecuadas para muchas tareas diversas. La cantidad de módulos en la biblioteca estándar se puede aumentar con módulos específicos escritos en C o Python.
La biblioteca estándar está particularmente bien diseñada para escribir aplicaciones que utilizan Internet, con una gran cantidad de formatos y protocolos estándar compatibles (como MIME y HTTP ). También se proporcionan módulos para crear interfaces gráficas y manipular expresiones regulares . Python también incluye un marco para pruebas unitarias ( unittestanteriormente PyUnit antes de la versión 2.1) para crear conjuntos de pruebas integrales.
Aunque cada programador puede adoptar sus propias convenciones para escribir código Python, Guido van Rossum ha puesto a disposición una guía, denominada "PEP 8". Publicado en 2001, aún se mantiene para adaptarlo a los cambios en el idioma. Google también ofrece una guía.
Python tiene varios módulos disponibles para crear software con una interfaz gráfica . El más común es Tkinter . Este módulo es adecuado para muchas aplicaciones y puede considerarse suficiente en la mayoría de los casos. Sin embargo, se han creado otros módulos para poder vincular Python a otras librerías de software (" toolkit "), para más funcionalidades, para una mejor integración con el sistema operativo utilizado, o simplemente para poder utilizar Python con su librería favorita. De hecho, algunos programadores encuentran el uso de Tkinter más doloroso que otras bibliotecas. Estos otros módulos no forman parte de la biblioteca estándar y, por lo tanto, deben obtenerse por separado.
Los módulos principales que brindan acceso a las bibliotecas GUI son Tkinter y Pmw (megawidgets de Python) para Tk , wxPython para wxWidgets , PyGTK para GTK + , PyQt y PySide para Qt , y finalmente FxPy para FOX Toolkit . También hay una adaptación de la biblioteca SDL : Pygame , un enlace de SFML : PySFML, así como una biblioteca escrita especialmente para Python: Pyglet (en) .
También es posible crear aplicaciones Silverlight en Python en la plataforma IronPython .
Guido van Rossum es el autor principal de Python, y su papel como el tomador de decisiones central permanente de Python es reconocido con humor con el título de “ Dictador benévolo de por vida ” ( BDFL). Desdejulio 2018, Guido van Rossum se declaró en vacaciones permanentes de su rol de BDFL. También canceló su candidatura al consejo directivo de idiomas ennoviembre de 2019.
Cuenta con la asistencia de un equipo de desarrolladores centrales que tienen acceso de escritura al repositorio de CPython y se coordinan en la lista de correo python-dev. Trabajan principalmente en el lenguaje básico y la biblioteca. Ocasionalmente reciben contribuciones de otros desarrolladores de Python a través de la plataforma de gestión de errores Roundup , que reemplazó a SourceForge .
Los usuarios o desarrolladores de bibliotecas de terceros utilizan una variedad de otros recursos. El principal medio generalista en torno a Python es el foro de Usenet de habla inglesa comp.lang.python.
Las alusiones a Monty Python son bastante comunes. Los tutoriales de Python a menudo usan las palabras spam y huevos como una variable de metasintaxis . Esta es una referencia a la Monty Python spam boceto , donde dos clientes intentan pedir una comida usando una tarjeta que tiene el Spam marca de jamón enlatado en prácticamente todos los platos. Este boceto también se tomó como referencia para denotar correo electrónico no solicitado .
Varias empresas u organizaciones mencionan en su sitio web oficial que utilizan Python:
Python también es el lenguaje de comandos para una gran cantidad de software gratuito:
Y comercial:
Python se utiliza como lenguaje de programación en la educación secundaria y superior, especialmente en Francia. Desde 2013, se imparte allí, al mismo tiempo que Scilab , a todos los estudiantes en las clases de ciencias preparatorias como parte del núcleo común (informática para todos). Anteriormente, la educación en ciencias de la computación se limitaba a una opción en MP, con instrucción en el idioma Caml o Pascal . Esta opción aún existe, pero Pascal fue abandonada de la sesión de 2015 de las competencias, por lo que solo Caml permanece en esta enseñanza. Las primeras pruebas de competición en el lenguaje Python son también las de la sesión de 2015.
Además de la versión de referencia, denominada CPython (porque está escrita en lenguaje C ), existen otros sistemas que implementan el lenguaje Python:
Estas otras versiones no se benefician necesariamente de toda la biblioteca de funciones escritas en C para la versión de referencia, ni de las últimas evoluciones del lenguaje.
Hay diferentes distribuciones disponibles, que a veces incluyen muchos paquetes dedicados a un dominio determinado:
Estas no son implementaciones diferentes del lenguaje Python: están basadas en CPython, pero vienen con varias bibliotecas preinstaladas.
Versión | Fecha de lanzamiento | Fin del soporte | Los recién llegados |
---|---|---|---|
1,5 (0,2) | 3 de enero de 1998 | 13 de abril de 1999 |
|
1,6 | 5 de septiembre de 2000 | Septiembre de 2000 |
|
2.0 | 16 de octubre de 2000 | 22 de junio de 2001 |
|
2.1 | 15 de abril de 2001 | 9 de abril de 2002 |
|
2.2 | 21 de diciembre de 2001 | 30 de mayo de 2003 |
|
2.3 | 29 de junio de 2003 | 11 de marzo de 2008 | |
2.4 | 30 de noviembre de 2004 | 19 de diciembre de 2008 |
|
2.5 | 19 de septiembre de 2006 | 26 de mayo de 2011 |
|
2.6 | 1 er de octubre de 2008 | 24 de agosto de 2010 (actualizaciones de seguridad hasta 29 de octubre de 2013) |
|
2,7 | 3 de julio de 2010 | 1 st de enero de 2,02 mil |
|
3,0 | 3 de diciembre de 2008 | 13 de febrero de 2009 |
Consulte PEP 3100 para obtener más detalles. |
3.1 | 27 de junio de 2009 | 12 de junio de 2011 (actualizaciones de seguridad hasta Junio de 2012) |
|
3.2 | 20 de febrero de 2011 | 13 de mayo de 2013 (actualizaciones de seguridad hasta 20 de febrero de 2016) |
|
3.3 | 29 de septiembre de 2012 | 8 de marzo de 2014 (actualizaciones de seguridad hasta 29 de septiembre de 2017) |
|
3.4 | 16 de marzo de 2014 | 9 de agosto de 2017 (actualizaciones de seguridad hasta 18 de marzo de 2019) |
|
3,5 | 13 de septiembre de 2015 | 8 de agosto de 2017 (actualizaciones de seguridad hasta 13 de septiembre de 2020) |
|
3.6 | 23 de diciembre de 2016 | 24 de diciembre de 2018 (actualizaciones de seguridad hasta diciembre 2021) |
|
3,7 | 31 de enero de 2018 | 27 de junio de 2020 (actualizaciones de seguridad hasta Junio 2023) |
|
3.8 | 14 de octubre de 2019 | Abril de 2021 (actualizaciones de seguridad hasta Octubre 2024) |
|
3.9 | 5 de octubre de 2020 | Mayo de 2022 (actualizaciones de seguridad hasta Octubre de 2025) |
|
Las propuestas de mejora de Python (o PEP: propuesta de mejora de Python ) son documentos textuales destinados a ser el camino para mejorar Python y preceder a todas sus modificaciones. Un PEP es una propuesta de orientación al desarrollo (proceso PEP) , una propuesta técnica (Standard Track PEP) o una simple recomendación ( PEP informativo ). El PEP más conocido es PEP 8 por su guía de estilo de código.
En 2009, es la versión 3 de Python, que reemplaza cada vez más a la versión 2 (el proyecto originalmente se llamaba "Python 3000" o "Py3K"), sin compatibilidad retroactiva con la serie de versiones 2.x, con el fin de eliminar las debilidades de el idioma. La directriz del proyecto era "reducir la redundancia de Python eliminando métodos obsoletos". Python 3.0a1, la primera versión alfa, se lanzó el31 de agosto de 2007, y hay un PEP que detalla los cambios planeados, así como una página para guiar a los programadores en su elección de Python 2 o 3.
Calculadoras destinadas a estudiantes de secundaria (incluidos Casio , NumWorks , Texas Instruments ...) y que admiten el trabajo de Python en Python 3. Estas calculadoras pueden intercambiar programas con computadoras personales .
FilosofíaPython 3 se desarrolló con la misma filosofía que en sus versiones anteriores, por lo que cualquier referencia a la filosofía de Python se aplicaría también a la versión 3. Sin embargo, el lenguaje había terminado acumulando una serie de métodos redundantes. Al buscar eliminar la redundancia en el lenguaje y sus módulos, Python 3 sigue la directriz de Python "Debe haber un solo método que sea óptimo y natural para todo".
Python 3 sigue siendo un lenguaje de paradigmas múltiples. Los programadores aún podrán elegir entre orientación a objetos, programación estructurada, programación funcional y otros paradigmas; Python 3 está diseñado para usarse de forma más natural que en las versiones 2.x, aunque printrequiere el uso de paréntesis a diferencia de Python 2.
Planificación y compatibilidadPython 3.0a1, la primera versión alfa de Python 3.0, se lanzó el 31 de agosto de 2007. Las versiones 2.xy 3.x de Python se lanzarán en paralelo durante varios ciclos de desarrollo, durante los cuales la serie 2.x permanecerá principalmente por compatibilidad, incluidas algunas características importadas de Python 3.x. El PEP 3000 contiene más información sobre el proceso de lanzamiento de una versión.
Al igual que Perl 6 , Python 3.0 rompe la compatibilidad con versiones anteriores (compatibilidad con versiones anteriores). El uso de código escrito para la serie 2.x no está garantizado con Python 3.0. Este último trae cambios fundamentales, como el cambio completo a Unicode y por esta razón una distinción necesaria entre cadenas y objetos "bytes". La escritura dinámica asociada con ciertos métodos en objetos similares a los diccionarios hace que una transición perfecta de Python 2.xa Python 3.0 sea muy complicada. Una herramienta llamada "2to3" traduce la mayor parte de las versiones 2.xa versiones 3.xy indica las áreas del código que requieren finalización con comentarios y advertencias especiales. En su versión preliminar, 2to3 parece tener éxito francamente en lograr una traducción correcta. Como parte de una migración de Python 2.xa Python 3.x, el PEP 3000 recomienda mantener el código original como base para las modificaciones y traducirlo para la plataforma 3.x usando 2to3.
Python 2.6 proporciona un comienzo para la compatibilidad con versiones anteriores, así como un modo de "advertencia" que debería crear conciencia sobre posibles problemas de transición para el cambio a Python 3.
Existen versiones de Python adecuadas para Android y iPhone en la versión 2.5 o 2.6. Disponible en iOS Jailbreak en iOS gracias a las "herramientas de configuración", y en Android gracias a SL4A que incluso da la posibilidad de realizar pequeñas interfaces gráficas gracias al módulo "android" y que permite enviar SMS , encender la cámara, o para hacer vibrar el teléfono. Las siguientes líneas muestran cómo hacer esto:
droid = android.Android() # client lié au serveur local lancé par l'application SL4A # pour contrôler un téléphone distant à l'adresse 192.168.0.5, avec SL4A lancé sur le port 9887 # il suffit de faire : android.Android('192.168.0.5', 9887) droid.vibrate(2.5) # fait vibrer le téléphone (local ou distant) pendant 2.5 secondesSe lanzó un puerto de Python en terminales Blackberry enJunio de 2012, para el sistema BlackBerry OS 10. Se lanzó una versión más ligera enseptiembre 2012, llamado "BlackBerry-Tart", debido a un juego de palabras en inglés: " una" tarta "es más liviana que una" tarta " ", en referencia a la tradicional " tarta de manzana ". Está basado en Python 3.2.2.