| Python | |
|---|---|
| Archivo:Text-x-python.svg | |
| Paradigma | Multiparadigma: orientada a objeto, imperativa, funcional |
| Surgido en | 1991[1] |
| Última versión | 3.1.2 (21 de marzo de 2010 ) |
| Versión en prueba | {{{versao_beta}}} () |
| Creado por | Guido van Rossum[1] |
| Estilo de tipagem: | Dinámica, fuerte |
| Compiladores | |
| Dialectos: | CPython, IronPython, Jython, PyPy |
| Influenciada por | ABC[2], C[2], Haskell, Icon, Lisp, Modula-3[2], Perl, Smalltalk, Tcl |
| Influenció | Boo, Cobra, D, Fantom, Groovy, Nimrod, Py, Ruby, Squirrel |
| Licencia: | {{{licencia}}} |
| Página oficial | {{{website}}} |
Python es un lenguaje de programación de alto nivel[3], interpretada, imperativa, orientada a objetos, de tipagem dinámica y fuerte. Fue lanzada por Guido van Rossum en 1991.[1] Actualmente posee una plantilla de desarrollo comunitario, abierto y gestionado por la organización sin fines lucrativos Python Software Foundation. A pesar de varias partes del lenguaje posean patrones y especificaciones formales, el lenguaje como uno todo no es formalmente especificada. El patrón de hecho es la implementación CPython.
El lenguaje fue proyectado con la filosofía de enfatizar la importancia del esfuerzo del programador sobre el esfuerzo computacional. Prioriza la legibilidade del código sobre la velocidad o expressividade. Combina una sintaxis concisa y clara con los recursos poderosos de su biblioteca normalizada y por módulos y frameworks desarrollados por terceros.
El nombre Python tuvo su origen en el grupo humorístico británico Monty Python[4], creador del programa Monty Python's Flying Circus, aunque muchas personas hagan asociación con el réptil del mismo nombre (en portugués, píton o pitão ).
Python fue concebido a finales de 1989 [3][4] por Guido van Rossum en el Instituto de Investigación Nacional para Matemática y Ciencia de la Computación (CWI), en los Países Bajos, como un sucesor de la ABC capaz de tratar excepciones y prover interfaz con el sistema operativo Amoeba[5] a través de scripts . También de la CWI, el lenguaje ABC era más productiva que C, aunque con el coste del desempeño en tiempo de ejecución. Pero ella no poseía funcionalidades importantes para la interacción con el sistema operativo, una necesidad del grupo. Uno de los focos primordiales de Python era aumentar la productividad del programador.[4]
En 1991, Guido publicó el código (nombrado versión 0.9.0) en el grupo de discusión alt.sources.[1] En esa versión ya estaban presentes clases con herencia, tratamiento de excepciones, funciones y los tipos de dato nativos list, dict, str, y así por delante. También estaba presente en esa versión un sistema de módulos prestado del Modula-3. La plantilla de excepciones también acordaba muy lo del Modula-3, con la adición de la opción else clause.[5] En 1994 fue formado el principal fórum de discusión del Python, comp.lang.python, un marco para el crecimiento de la base de usuarios del lenguaje.
La versión 1.0 fue lanzada en enero de 1994. Nuevas funcionalidades incluían herramientas para programación funcional como lambda, map, filter y reduce . La última versión mientras Guido estaba en la CWI fue el Python 1.2. En 1995, él continuó el trabajo en el CNRI en Reston, Estados Unidos, de donde lanzó diversas versiones. En la versión 1.4 el lenguaje ganó parâmetros nombrados (la capacidad de pasar parâmetro por el nombre y no por la posición en la lista de parâmetros) y soporte nativo a números complejos, así como una forma de encapsulamento .[6]
Aún en la CNRI, Guido lanzó la iniciativa Computer Programming sea Everybody (CP4Y; literalmente, "Programación de Ordenadores para Todos"), que visaba hacer la programación más accesible, un proyecto financiado por la DARPA .[7] Actualmente el CP4Y se encuentra inactivo.
En 2000, el equipo de desarrollo del lenguaje se cambió para la BeOpen afim de formar el equipo PythonLabs. La CNRI pidió que la versión 1.6 fuera lanzada, para marcar el fin de desarrollo del lenguaje en aquel local. El único lanzamiento en la BeOpen fue el Python 2.0, y después del lanzamiento el grupo de desenvolvedores de la PythonLabs se agrupó en la Digital Creations.
Python 2.0 implementó list comprehension, una relevante funcionalidad de lenguajes funcionales como SETL y Haskell . La sintaxis del lenguaje para esa construcción es bastante similar a de Haskell, excepto por la preferencia del Haskell por caracteres de puntuación y de la preferencia del python por palabras reservadas alfabéticas. Esa versión 2.0 también introdujo un sistema coletor de basura capaz de identificar y tratar ciclos de referencias.[8]
Ya lo 1.6 incluyó una licencia CNRI substancialmente más larga que la licencia CWI que estaban usando en las versiones anteriores. Entre otros cambios, esa licencia incluía una cláusula atestando que la licencia era gobernada por las leyes de la Virgínia. La Free Software Foundation alegó que eso era incompatible con la GNU GPL. Tanto BeOpen cuánto CNRI y FSF negociaron un cambio en la licencia libre del Python que lo haría compatible con la GPL. Python 1.6.1 es idéntico al 1.6.0, excepto por pequeñas correcciones de fallos y una licencia nueva, compatible con la GPL.[9]
Python 2.1 era parecido con las versiones 1.6.1 y 2.0. Su licencia fue renombrada para Python Software Foundation License. Todo código, documentación y especificación desde el lanzamiento de la versión alfa de la 2.1 es propiedad de la Python Software Foundation (PSF), una organización sin fines lucrativos fundada en 2001, una plantilla tal cual de la Apache Software Foundation.[9] El lanzamiento incluyó el cambio en la especificación para soportar escopo anidado, así como otros lenguajes con escopo estático.[10] Esta funcionalidad estaba desactivada por patrón, y solamente fue requerida en la versión 2.2.
Una gran innovación de la versión 2.2 fue la unificación de los tipos Python (escritos en C ) y clases (escrituras en Python) en solamente una jerarquía. Esto hizo la plantilla de objetos del Python consistentemente orientado a objeto.[11] También fue añadido generator, inspirado en Icon.[12]
El incremento de la biblioteca normalizada y las elecciones sintáticas fueron fuertemente influenciadas por Java en algunos casos: el paquete logging[13] introducido en la versión 2.3[14], el analisador sintático SAX, introducido en la versión 2.0 y la sintaxis de decoradores que usa @[15], añadidas en la versión 2.4.[16]
En 1 de octubre de 2008 fue lanzada la versión 2.6, ya visando la transición para la versión 3.0 del lenguaje. Entre otras modificaciones, fueron incluidas bibliotecas para multiprocessamento, JSON y Y/S , además de una nueva forma de formatação de cadenas de caracteres.[17]
Actualmente el lenguaje es usado en diversas áreas, como servidores de aplicación y computación gráfica. Está disponible como lenguaje de script en aplicaciones como OpenOffice (Python UNO Bridge), Blender y puede ser utilizada en procedimientos almacenados en el sistema gerenciador de banco de datos PostgreSQL (PL/Python).
La tercera versión del lenguaje fue lanzado en diciembre de 2008.[18], llamada Python 3.0 o Python 3000. Con informado desde antes de su lanzamiento[19], hube quiebra de compatibilidad con la familia 2.x para corregir fallos que fueron descubiertas en este patrón, y para limpiar los excesos de las versiones anteriores.[4] La primera versión alfa fue lanzada en 31 de agosto de 2007 , la segunda en 7 de diciembre del mismo año.
Cambios de la versión incluyen la alteración de la palabra reservada print, que pasa a ser una función, haciendo más fácil la utilización de una versión alternativa de la rutina. En Python 2.6, eso ya está disponible al añadir el código from __future__ import print_function.[20] También, el cambio para Unicode de todas las cadenas de caracteres.
Parte de la cultura del lenguaje gira alrededor de The Zen of Python ,un poema (excepto la traducción) que forma parte del documento "PEP 20 (The Zen of Python)",[21] escrito por el programador en Python de larga fecha Tim Peters, describiendo sumariamente la filosofía del Python. Se puede verlo a través de un easter egg del Python por el mando:
GeSHi Error: GeSHi could not find the language python (using path /home/admin/wikitranslation/commons/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source>
Lenguajes soportados en el realce de sintaxis:
(error al cargar la lista de lenguajes soportados)
Construcciones de Python incluyen: estructura de selección (if, else, elif); estructura de repetición (sea, while), que itera por un container, capturando cada elemento en una variable local dada; construcción de clases (class); construcción de subrotinas (def); construcción de escopo (with), como por ejemplo para adquirir un recurso.
La tipagem de Python es fuerte, pues los valores y objetos tienen tipos bien definidos y no sufren coerções como en C o Perl . Son disponibilizados diversos tipos de datos nativos:
| Tipo de dato | Descripción | Ejemplo de la sintaxis |
|---|---|---|
str, unicode |
Una cadena de caracteres imutável | 'Wikipedia', u'Wikipedia' |
list |
Lista heterogênea mutável | [4.0, 'string', True] |
tuple |
Tupla imutável | (4.0, 'string', True) |
set, frozenset |
Conjunto no ordenado, no contiene elementos duplicados | set([4.0, 'string', True])frozenset([4.0, 'string', True]) |
dict |
conjunto asociativo | {'key1': 1.0, 'key2': False} |
int |
Número de precisión fija, es transparentemente convertido para long si no quepa en un int. |
422147483648L |
float |
Punto flotante | 3.1415927 |
complex |
Número complejo | 3+2j |
bool |
Booleano | True o False. |
Python también permite la definición de los tipos de datos propios, a través de clases . Ejemplares son construidos invocando la clase (FooClass()), y las clases son ejemplar de la clase type, lo que permite metaprogramação y reflexión . Métodos son definidos como funciones anexionadas a la clase, y la sintaxis ejemplar.método(argumento) es un atajo para Clase.método(ejemplar, argumento). Los métodos deben referenciar explícitamente la referencia para el objeto incluyendo el parâmetro self como el primer argumento del método.[22]
Antes de la versión 3.0, Python possuia dos tipos de clases: "old-style" y "new-style". Clases old-style fueron eliminadas en el Python 3.0, y todas son new-style. En versiones entre 2.2 y 3.0, ambos tipos de clases podían ser usadas. La sintaxis de ambos estilos es la misma, la diferencia acaba siendo de donde objeto de la clase es heredado, directa o indirectamente (todas clases new-style heredan de object y son instancias de type). Las clases new-styles nada más son que tipos definidos por el usuario.
El Python 2.5.2 define las siguientes 31 palabras reservadas:[23]
and del from not while las elif global or with assert else if pass yield break except import print class exec in raise continúe finally is return def sea lambda try
Los operadores básicos de comparación como ==, <, >=, entre otros son usados en todos los tipos de datos, como números, cadenas de texto, listas y mapeamentos. Comparaciones en cadena como < a b < c poseen el mismo significado básico que en la matemática: los términos son comparadas en la orden. ES garantizado que el procesamiento de la expresión lógica irá a terminar tan cedo el veredito es claro, el principio de la evaluación mínima. Usando la expresión anterior, si a b < es falsa, c no es evaluado.
En cuanto a los operadores lógicos, hasta Python 2.2 no había el tipo de dato booleano. En todas las versiones del lenguaje los operadores lógicos tratan "", 0, None, 0.0, [] y como {} falso, mientras el restante es tratado como verdadero de modo general. En la versión 2.2.1 las constantes True y False fueron añadidas (subclasses de 1 y 0 respectivamente). La comparación binaria retorna una de las dos constantes arriba.
Los operadores booleanos and y or también siguen la evaluación mínima. Por ejemplo, y == 0 or x/y > 100 nunca lanzará la excepción de división por cero.
El interpretador interactivo es una característica diferencial del lenguaje, porque hay la posibilidad de probar y modificar el código de un programa antes de iniciar la compilación o las incluya en los programas, por ejemplo:
Al incluir una función, el interpretador ya nos genera el resultado:
GeSHi Error: GeSHi could not find the language python (using path /home/admin/wikitranslation/commons/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source>
Lenguajes soportados en el realce de sintaxis:
(error al cargar la lista de lenguajes soportados)
En el segundo capítulo del Manual de Referencia del Lenguaje Python es citado que el análisis léxica es un análisis del interpretador en sí, los programas son leídos por un analisador sintático que divide el código en tokens.
Todo programa es dividido en líneas lógicas que son separadas por el token NEWLINE o NUEVA LÍNEA, las líneas físicas son tramos de código hendidos por el caractere ENTER. Líneas lógicas no pueden ultrapasar líneas físicas con la salvedad de junção de líneas, por ejemplo:
GeSHi Error: GeSHi could not find the language python (using path /home/admin/wikitranslation/commons/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source>
Lenguajes soportados en el realce de sintaxis:
(error al cargar la lista de lenguajes soportados)
o
GeSHi Error: GeSHi could not find the language python (using path /home/admin/wikitranslation/commons/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source>
Lenguajes soportados en el realce de sintaxis:
(error al cargar la lista de lenguajes soportados)
Para la delimitación de bloques de códigos los delimitadores son colocados en una pila y diferenciados por su indentação. Iniciando la pila con valor 0 (cero) y colocando valores mayores que los anteriores en la pila. Para cada comienzo de línea, el nivel de indentação es comparado con el valor del tope de la pila. Si el número de la línea sea igual al tope de la pila, la pila no es alterada. Si el valor sea mayor la pila recibe el nivel de indentação de la línea y el nombre INDENT (apilamiento) si el nivel de indentação sea más pequeño, entonces es desempilhado hasta llegar a un nivel de indentação recibiendo el nombre DEDENT (desempilhamento) y si no encontrar ningún valor es generado un error de indentação.
Abajo un ejemplo de permutação, retirado del capítulo 2.1 sobre Estructura de líneas en el Análisis léxica del Manual de Referencia del lenguaje (Language Reference Manual):
def perm(l): NUEVA LÍNEA
INDENT if len(l) <= 1: NUEVA LÍNEA
INDENT return[1] NUEVA LÍNEA
DEDENT r = [ ] NUEVA LÍNEA
sea i in range(len(l)): NUEVA LÍNEA
INDENT s = l[:i] + l[i+1:] NUEVA LÍNEA
p = perm(s) NUEVA LÍNEA
DEDENT sea x in p: NUEVA LÍNEA
INDENT r.append(l[i:i+1]+x) NUEVA LÍNEA
DEDENT return r
Python fue desarrollado para ser un lenguaje de fácil lectura, con un visual agradable, frecuentemente usando palabras y no puntuaciones como en otros lenguajes. Para la criba de bloques de código, el lenguaje usa espacios en blanco e indentação en vez de delimitadores visuales como llaves (C, Java) o palabras (BASIC, Fortran, Pascal). Diferente de lenguajes con delimitadores visuales de bloques, en Python la indentação es obligatoria. El aumento de la indentação indica el inicio de un nuevo bloque, que termina de la disminución de la indentação.
Usando un editor de texto común es muy fácil existir errores de indentação, el recomendado es configurar el editor conforme el análisis léxica del Python o utilizar una IDE. Todas las IDE que soportan el lenguaje hacen indentação automáticamente.
Ejemplo:
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source> Lenguajes soportados en el realce de sintaxis: (error al cargar la lista de lenguajes soportados) |
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source> Lenguajes soportados en el realce de sintaxis: (error al cargar la lista de lenguajes soportados) |
El código está correcto para los dos ejemplos, pero el analisador léxico verificará si la indentação está coherente. El analisador reconocerá las palabras reservadas while, def, try, except, return, print y las cadenas de caracteres entre aspas simples y la indentação, y si no hubiera problemas el programa ejecutará normalmente, sino presentará la excepción: "Su programa está con error en el bloque de indentação".
El lenguaje es de altíssimo nivel, como ya dicho, pero ella también puede compilar sus programas para que la próxima vez que ejecutarlo no necesite compilar nuevamente el programa, reduciendo el tiempo de carga en la ejecución.
Utilizando el interpretador interactivo no es necesario la creación del archivo de Python compilado, los mandos son ejecutados interactivamente. Sin embargo cuando un programa o un módulo es evocado, el interpretador realiza el análisis léxica y sintática, compila el código de alto nivel se necesario y lo ejecuta en la máquina virtual del lenguaje.
El bytecode es almacenado en archivos con extensión .pyc o .pyo , este último en el caso de bytecode optimizado. Interesante notar que el bytecode del lenguaje también es de alto nivel, o sea, es más legible a los seres humanos que el código de byte de la C, por ejemplo. Para descompilar un código de byte es utilizado el módulo dis de la biblioteca normalizada del lenguaje y existen módulos de terceros que hacen el bytecode más confuso, haciendo la descompilação ineficaz.
Normalmente, el Python trabaja con dos grupos de archivos:
El concepto de polimorfismo describe como objetos pueden ser manipulados y acessados usando atributos y comportamientos en común sin considerar su clase específica e indica la presencia de late binding, permitiendo sobrecarga y determinación de tipos en tiempo de ejecución y verificación.
Muchos lenguajes orientados a objeto utilizan firmas de función para determinar cual versión de un método sobrecarregado llamar. Sin embargo, las llamadas de función en Python son universales o genéricas sin determinación de tipo. Por eso, sobrecarga no es soportada en el lenguaje.
Python soporta la mayoría de las técnicas de la programación orientada a objeto. Cualquier objeto puede ser usado para cualquier tipo, y el código funcionará mientras haya métodos y atributos adecuados. El concepto de objeto en el lenguaje es bastante abrangente: clases, funciones, números y módulos son todos consideradosobjetos. También hay soporte para metaclasses, polimorfismo, y herencia (inclusive herencia múltiple). Hay uno soporte limitado para variables privadas.
En la versión 2.2 de Python fue introducido un nuevo estilo de clases en que objetos y tipos fueron unificados, permitiendo la especialización de tipos. Ya a partir de la versión 2.3 fue introducido un nuevo método de resolución de ambiguidades para herencias múltiples[24].
Una clase es definida con class nombre:, y el código siguiente es la composición de los atributos. Todos los métodos de la clase reciben una referencia a un ejemplar de la propia clase como su primer argumento, y la convención es que se llame este argumento self. Así los métodos son llamados objeto.método(argumento1, argumento2, ...) y son definidos iguales a una función, como método(self, argumento1, argumento2, ...). Vea que el parâmetro self contendrá una referencia para el ejemplar de la clase definida en objeto cuando sea efectuada esta llamada. Los atributos de la clase pueden ser acessados en cualquier lugar de la clase, y los atributos de ejemplar (o variable de ejemplar) deben ser declarados dentro de los métodos utilizando la referencia al ejemplar actual (self). (Ver un código contextualizado en adjunto.)
En Python no existe protección de los miembros de una clase o ejemplar por el interpretador, el llamado encapsulamento. Convenciona-si que atributos con el nombre comenzando con uno _ son de uso privado de la clase, pero no hay un policiamento del interpretador contra acceso a estos atributos. Una excepción son nombres comenzando con __, en el caso en que el interpretador modifica el nombre del atributo. (Ver un código contextualizado en adjunto.)
Python permite polimorfismo, que condiz con la reutilización de código. ES hecho que funciones semejantes en varias partes del software sean utilizadas varias veces, entonces definimos esta función como una biblioteca y todas las otras funciones que necesiten de esta a llaman sin la necesidad de reescrevê-la. (Ver un código contextualizado en adjunto.)
Una de las construcciones funcionales de Python es compreensão de listas, una forma de construir listas. Por ejemplo, se puede usar la técnica para calcular las cinco primeras potencias de dos. El algoritmo quicksort también puede ser expresado usando la misma técnica. (Ver códigos contextualizados para ambos casos en adjunto.)
En Python, funciones son objetos de primera clase que pueden ser creados y almacenados dinámicamente. Lo soporte a la funciones anónimas está en la construcción lambda (cálculo Lambda). No hay disponibilidad de funciones anónimas de hecho, pues los lambdas contienen solamente expresiones y no bloques de código.
Python también soporta closure léxico desde la versión 2.2. (Ver códigos contextualizados para ambos casos en adjunto.) Ya generadores fueron introducidos en la versión 2.2 y finalizados en la versión 2.3, y representan el mecanismo de Python para la evaluación perezosa de funciones. (Ver códigos contextualizados para ambos casos en adjunto.)
Python soporta y hace uso constante de tratamiento de excepciones como una forma de probar condiciones de error y otros eventos inesperados en el programa. ES inclusive posible capturar una excepción causada por un error de sintaxis. El estilo del lenguaje apóia el uso de excepciones siempre que una condición de error puede aparecer. Por ejemplo, en vez de probar la disponibilidad de acceso a un recurso, la convención es simplemente intentar usar el recurso y capturar la excepción si el acceso sea rechazado (recurso inexistente, permiso de acceso insuficiente, recurso ya en uso, ...).
Excepciones son usadas frecuentemente como una estructura de selección, sustituyendo bloques if-else, especialmente en situaciones que envuelven threads. Una convención de codificación es el EAFP, del inglés, "es más fácil pedir perdón que permiso". Eso significa que en términos de desempeño es preferible capturar excepciones del que probar atributos antes de los usar. Sigue abajo ejemplos de código que prueban atributos ("piden permiso") y que capturan excepciones ("piden perdón"):
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source> Lenguajes soportados en el realce de sintaxis: (error al cargar la lista de lenguajes soportados) |
Usted necesita especificar un lenguaje, tal como: <source lang="html4strict">...</source> Lenguajes soportados en el realce de sintaxis: (error al cargar la lista de lenguajes soportados) |
Ambos códigos producen el mismo efecto, pero hay diferencias de desempeño. Cuando spam posee el atributo eggs, el código que captura excepciones es más rápido. De lo contrario, la captura de la excepción representa una pérdida considerable de desempeño, y el código que prueba el atributo es más rápido. En la mayoría de los casos el paradigma de la captura de excepciones es más rápido, y también puede evitar problemas de competencia [25]. Por ejemplo, en un ambiente multitarefa, el espacio de tiempo entre la prueba del atributo y su uso de hecho puede invalidar el atributo, problema que no acontece en el caso de la captura de excepciones.
Python posee una gran biblioteca normalizada, generalmente citada como uno de los mayores triunfos del lenguaje,[26] suministrando herramientas para diversas tareas. Recientemente, la biblioteca Boost de la C++ incluyó una biblioteca para permitir la interoperabilidad entre los dos lenguajes. Por cuenta de la gran variedad de herramientas suministrada por la biblioteca normalizada, quedada con a la habilidad de usar lenguajes de nivel más bajo como C y C++, Python puede ser poderosa para conectar componentes diversos de software.
La biblioteca normalizada cuenta con facilidades para escribir aplicaciones para internet, contando con diversos formatos y protocolos como MIME y HTTP . También hay módulos para crear interfaces gráficas, conectar en bancos y datos relacionáis y manipular expresiones regulares.
Algunas partes de la biblioteca son cubiertas por especificaciones (por ejemplo, la implementación WSGI de la wsgiref sigue el PEP 333[27]), pero la mayoría de los módulos no sigue.
Python suministra dos alternativas para documentar el código. La primera es el uso de comentarios para indicar lo que cierto código hace. Comentarios comienzan con # y son terminados por la quiebra de la línea. No hay soporte para comentarios que se extienden por más de una línea; cada línea consecutiva de comentario debe indicar #. La segunda alternativa es el uso de cadenas de caractere, literales de texto insertados en el código sin atribución. Cadenas de caracteres en Python son delimitadas por " o ' para única línea y por """ o ''' para múltiples líneas. Sin embargo, es convención usar el métodos de múltiples líneas en ambos casos.
Diferente de comentarios, la cadenas de caracteres usadas como documentación son objetos Python y forman parte del código interpretado. Eso significa que un programa puede acessar su propia documentación y manipular la información. Hay herramientas que extraen automáticamente esa documentación para la generación de la documentación de API a partir del código. Documentación a través de cadenas de caracteres también puede ser acessada a partir del interpretador a través de la función help().
El lenguaje y su interpretador están disponibles para las más diversas plataformas, desde Unix (Linux, FreeBSD, Solaris, MacOS X, etc.), Windows, .NET, versiones antiguas de MacOS hasta consoles de juegos electrónicos o aún algunos celulares, como la serie 60 , N8xx(PyMaemo) de la Nokia y palmtops .
Para algún sistema operativo no soportado, basta que exista un compilador C disponible y generar el Python a partir del fuente. El código fuente es traducido por el interpretador para el formato bytecode, que es multiplataforma y puede ser ejecutado y distribuido sin fuente original.
La implementación original y más conocida del Python es el CPython, escritura en C y compatible con la normalizada C89,[28] siendo distribuida con una gran biblioteca normalizada escritura en un mixto de Python y C. Esta implementación es soportada en diversas plataformas, incluyendo Microsoft Windows y sistemas Unix-like modernos.
Stackless Python es una variación del CPython que implementa microthreads (permitiendo multitarefa sin el uso de threads ), siendo soportada en casi todas las plataformas que la implementación original.
Existen también implementaciones para plataformas ya existentes: Jython para la Plataforma Java e IronPython para .NET.
En 2005 a Nokia lanzó un interpretador Python para los teléfonos celulares S60, llamado PyS60. Esa versión incluye varios módulos de las implementaciones tradicionales, pero también algunos módulos adicionales para la integración con el sistema operativo Symbian. Una implementación para Palm puede ser encontrada en el Pippy. Ya el PyPy, es el lenguaje Python totalmente escritura en Python.
Diversas implementaciones, como CPython, puede funcionar como un interpretador de mandos en que el usuario ejecuta las instrucciones secuencialmente, recibiendo el resultado automáticamente. La ejecución compilada del código ofrece una ganancia sustancial en velocidad, con el coste de la pérdida de la interatividade.
Python posee una licencia libre aprobada por la OSI y compatible con la GPL, sin embargo menos restritiva. Ella prevé (entre otras cosas) que binarios del lenguaje sean distribuidos sin la necesidad de suministrar el código fuente junto[29].
Al largo del tiempo han sido desarrollados por la comunidad de programadores muchas bibliotecas de funciones especializadas (módulos) que permiten expandir las capacidades base del lenguaje. Entre estos módulos especializados se destacan:
| Descripción | Campos de actuación | |
|---|---|---|
| Django | Framework para desarrollo ágil de aplicaciones web; | desarrollo web |
| Pylons | Framework para desarrollo de aplicaciones web; | desarrollo web |
| TurboGears | Framework basado en varias otras tecnologías existentes en el mundo que gira en torno al lenguaje Python; | desarrollo web |
| Matplotlib - Matplotlib / Pylab | biblioteca para manipulación de gráficos 2D; | procesamiento de imagen |
| Python Imaging Library | biblioteca para manipulación de imágenes digitales; | procesamiento de imagen |
| PyOpenGL - Python OpenGL Binding | soporte multiplataforma al OpenGL; | computación gráfica |
| Pygame | Conjunto de módulos para el desarrollo de juegos electrónicos, incluyendo gráficos SDL; | desarrollo de juegos electrónicos; computación gráfica |
| Twisted | Framework para el desarrollo de aplicaciones de red. Incluye módulos para servidor web, de aplicación, SSH y diversos otros protocolos; | desarrollo de software; desarrollo web |
| PYRO - Python Remote Objects | Framework para el desarrollo de sistemas distribuidos; | computación distribuida |
| ZODB | Sistema de persistencia y banco de datos orientado a objetos; | banco de datos |
| Plone | SGC - Sistema de gestión de contenido; | desarrollo web |
| CherryPy | Framework para aplicaciones web; | desarrollo web |
| Visual Python | Framework 3D de alto nivel; | computación gráfica |
| SQLObject | Asignador objeto-relacional: traduce estructuras relacionáis para objetos Python y manipula el banco de datos de forma transparente; | banco de datos |
| Numarray | Módulo para manipulación de vectores y computación científica. | computación científica |
Ejemplos de bibliotecas de GUI disponibles para Python incluyen:
| Descripción | |
|---|---|
| Etk | interfaz para la biblioteca EFL |
| PyGTK | interfaz para la biblioteca GTK |
| PyQT | interfaz para la biblioteca QT |
| Tkinter | Módulo normalizado para GUI en el Python |
| wxPython | interfaz para la biblioteca wxWidgets |
| Wax | Construido para simplificar el uso del wxPython |
Existen varios ambientes de desarrollo integrado (IDE) disponibles para Python:
| Desenvolvedor | Última versión | Platforma | Toolkit | Licencia | |
|---|---|---|---|---|---|
| Buena Constructor | Team | 0.6.1 | Independiente | wxPython | GPL |
| Eric Python IDE | Detlev Offenbach | 4.1.2 | Independiente | Qt | GPL |
| Geany | Team | 0.13 | Independiente | GTK2 | GPL |
| IDLE | Guido van Rossum et al. | 3.0 / 2008 | Independiente | Tkinter | |
| IronPython Studio | Clarius Labs | 1.0 / 10 de diciembre de 2007 | Windows | VS2008 Shell Runtime | Microsoft Public License |
| Komodo | ActiveState | 4.1.1 / junio de 2007 | multiplataforma | Plataforma Mozilla | Propretário |
| PyDev (Eclipse) | Fabio Zadrozny | 1.3.13 | multiplataforma | EPL | |
| PythonCard | Alex Tweedly | 0.8.2 | multiplataforma | wxPython | Licencia BSD |
| PyScripter | mmm-experts | 1.7.2 / octubre de 2006 | Windows | MIT | |
| Stani's Python Editor | Stani | 0.8.4c / 14 de febrero de 2008 | Independiente | wxPython | GPL |
| Wing IDE | Wingware | 3.0.2-1 / 27 de noviembre de 2007 | Windows, Linux, Los X | PyGTK | Propretário |
Algunos de los mayores proyectos que utilizan Python son el servidor de aplicación Zope, el compartilhador de archivos Mnet, la casa de campo YouTube y el cliente original del BitTorrent. Grandes organizaciones que usan el lenguaje incluyen Google[30] (parte de los crawlers), Yahoo! (para la casa de campo de grupos de usuarios) y NASA .[31] El sistema de gestión de reservas de la Air Canada también usa Python en algunos de sus componentes.[32] El lenguaje también tiene bastante uso en la industria de la seguridad de la información.
El lenguaje ha sido embarcada como lenguaje de script en diversos softwares, como en programas de edición tridimensional como Maya[33], Autodesk Softimage, TrueSpace y Blender [34]. Programas de edición de imagen también a usan para scripts, como el GIMP[35]. Para diversos sistema operacionales el lenguaje ya es un componente normalizado, estando disponible en diversas distribuciones Linux. El Red Hat Linux usa Python para instalación, configuración y gestión de paquetes.
Otros ejemplos incluyen el Plone, sistema de gestión de contenido desarrollado en Python y Zope y la Industrial Light & Magic[36], que produce películas de la serie Star Wars usando extensivamente Python para la computación gráfica en los procesos de producción de las películas.