Visita Encydia-Wikilingue.con

Python

python - Wikilingue - Encydia

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 ).

Tabla de contenido

Historia

Guido van Rossum, Son Francisco, California

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.

Filosofía

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)

Características

Construcciones

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.

Tipos de dato

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. 42
2147483648L
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.

Palabras reservadas

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

Operadores

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.

Interpretador interactivo

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)

Análisis léxica

Archivo:Python script.svg
Ejemplo de script

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

Indentação

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:

Indentação correcta


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)

Indentação incorrecta


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)

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".

Compilador de bytecode

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:

  1. Los módulos del núcleo del lenguaje, su biblioteca normalizada y los módulos independientes, creados por el usuario.
  2. En el núcleo del interpretador existe el analisador léxico, el analisador sintático que utiliza Estructuras de Objetos (tiempo de ejecución), el Compilador que aloca memoria (tiempo de ejecución) y tras el Avaliador de código que modifica el estado actual del programa (tiempo de ejecución), mostrando resultado para el usuario.

Polimorfismo

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.

Orientación a objeto

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.)

Programación funcional

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.)

Tratamiento de excepciones

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"):

Prueba de atributo


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)

Captura de excepción


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)

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.

Biblioteca normalizada

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.

Comentarios

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().

Plataformas disponibles

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.

Implementaciones

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.

Licencia

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].

Módulos y frameworks.

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

Interfaces gráficas

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

Ambientes de desarrollo integrado

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

Aplicaciones

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.

Referencias

  1. a b c d HISTORY (en inglés). Python Software Foundation Fuente del Python. Página visitada en 2008-06-05.
  2. a b c Guido van Rossum (Mayo de 1996). Foreword sea "Programming Python" (1st ed.) (en inglés). Python Software Foundation. Página visitada en 12 de junio de 2008.
  3. a b The Making of Python (en inglés). Artima Developer. Página visitada en 2007-03-22.
  4. a b c d Naomi Hamilton (5 de agosto de 2008). The A-Z of Programming Languages: Python (en inglés). Computerworld. Página visitada en 17 de agosto de 2008.
  5. a b Why was Python created in the first place? (en inglés). Python FAQ. Página visitada en 2007-03-22.
  6. LJ #37: Python 1.4 Update (en inglés). Página visitada en 2007-04-29.
  7. Guido van Rossum. Computer Programming sea Everybody (en inglés). Página visitada en 2007-03-22.
  8. A.m. Kuchling and Moshe Zadka. What's New in Python 2.0 (en inglés). Página visitada en 2007-03-22.
  9. a b History of the software (en inglés) Referencia de la Biblioteca Python.
  10. Jeremy Hylton. Statically Nested Scopes (en inglés). Página visitada en 2007-03-22.
  11. 2 PEPs 252 and 253: Type and Class Changes (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  12. 4 PEP 255: Simple Generators (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  13. PEP 282 - A Logging System (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  14. 8 PEP 282: The logging Package (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  15. PEP 318 - Decorators sea Functions and Methods (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  16. 5 PEP 318: Decorators sea Functions and Methods (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  17. A.m. Kuchling (1 de octubre de 2008). What’s New in Python 2.6 (en inglés). Python Software Foundation. Página visitada en 3 de octubre de 2008.
  18. Python 3.0 Release (en inglés). Python Software Foundation. Página visitada en 3 de diciembre de 2008.
  19. Sarah Stokely (1 de febrero de 2008). Python 3.0 te lo be backwards incompatible (en inglés). iTnews. Página visitada en 11 de junio de 2008.
  20. Georg Brandl. Make print la function (en inglés). Página visitada en 3 de octubre de 2008.
  21. PEP 20 - The Zen of Python (en inglés). Python - Núcleo de Desarrollo. Página visitada en 2010-01-15.
  22. Clases — Random Remarks (en inglés). Python Software Foundation Python Documentation.
  23. Keywords (en inglés). Manual de Referencia del Python. Python Software Foundation (21 de febrero de 2008). Página visitada en 12 de septiembre de 2008.
  24. Michele Simionato. The Python 2.3 Method Resolution Order (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  25. [conexión inactiva]
  26. Przemyslaw Piotrowski (Julio de 2006). Build la Rapid Web Development Environment sea Python Server Pages and Oracle (en inglés). Oracle. Página visitada en 11 de junio de 2008.
  27. Phillip J. Eby (7 de diciembre de 2003). PEP 333 -- Python Web Server Gateway Interfaz v1.0 (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  28. Guido van Rossum (5 de julio de 2001). PEP 7 -- Style Guide sea C Code (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  29. Python License (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  30. Quotes about Python (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  31. Daniel G. Shafer (17 de enero de 2003). Python Streamlines Space Shuttle Mission Design (en inglés). Python Software Foundation. Página visitada en 11 de junio de 2008.
  32. Darryl K. Taft (5 de marzo de 2005). Python Slithers into Systems (en inglés). eWEEK. Página visitada en 11 de junio de 2008.
  33. Introduction te lo Maya Python API (en inglés). Documentación del Maya. Autodesk. Página visitada en 18 de julio de 2008.
  34. Python Scripts (en inglés). Blender. Página visitada en 18 de julio de 2008.
  35. James Henstridge (16 de mayo de 2006). GIMP Python Documentation (en inglés). Documentación del GIMP. GIMP. Página visitada en 18 de julio de 2008.
  36. Robin Rowe (1 de julio de 2002). Industrial Light & Magic (en inglés). Linux Journal. Página visitada en 18 de julio de 2008.

Referencias bibliográficas

Ver también

Conexiones externas

Otros proyectos Wikimedia también contienen material sobre este tema:
Wikilivros Libros y manuales en el Wikilivros
Wikiquote Citações en el Wikiquote
Commons Categoría en el Commons