PYTHON
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una
sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de
programación multiparadigma, ya que
soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico,
es fuertemente tipado y multiplataforma.
Es administrado por la Python Software Foundation. Posee una
licencia de código
abierto, denominada Python Software Foundation License,1 que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e
incompatible en ciertas versiones anteriores.
Historia
Guido van
Rossum, creador de Python,
en la convención OSCON 2006
Python fue creado a finales de
los ochenta2 por Guido van
Rossum en el Centro
para las Matemáticas y la Informática (CWI, Centrum Wiskunde &
Informatica), en losPaíses Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba.3 El nombre del lenguaje
proviene de la afición de su creador original, Guido van Rossum, por los
humoristas británicos Monty Python.4 Van Rossum es el principal
autor de Python, y su continuo rol central en decidir la dirección de Python es
reconocido, refiriéndose a él como Benevolente Dictador Vitalicio (en inglés: Benevolent Dictator for Life,
BDFL). En 1991, van Rossum publicó el
código de la versión 0.9.0 en alt.sources.5 En esta etapa del desarrollo ya
estaban presentes clases con herencia, manejo de excepciones, funciones y los tipos modulares, como:
str
, list
, dict
, entre otros. Además en este lanzamiento inicial
aparecía un sistema de módulos adoptado deModula-3;
van Rossum describe el módulo como “una de las mayores unidades de programación
de Python”.2 El modelo de excepciones en Python es
parecido al de Modula-3, con la adición de una cláusula else
.3 En el año 1994 se formó comp.lang.python,
el foro de discusión principal de Python, marcando un hito en el crecimiento
del grupo de usuarios de este lenguaje.
Python alcanzó la versión 1.0
en enero de 1994. Una característica de este lanzamiento fueron las
herramientas de la programación funcional:
lambda
, reduce
,filter
y map
. Van Rossum explicó que “hace 12 años, Python
adquirió lambda, reduce(), filter() y map(), cortesía de un hacker de Lisp que las extrañaba y que envió
parches”.6 El donante fue Amrit Prem; no se hace
ninguna mención específica de cualquier herencia de Lisp en las notas de
lanzamiento.
La última versión liberada
proveniente de CWI fue Python 1.2. En 1995, van Rossum continuó su trabajo en
Python en la Corporation
for National Research Initiatives (CNRI)
en Reston, Virginia,
donde lanzó varias versiones del software.
Durante su estancia en CNRI,
van Rossum lanzó la iniciativa Computer
Programming for Everybody (CP4E),
con el fin de hacer la programación más accesible a más gente, con un nivel de
'alfabetización' básico en lenguajes de programación, similar a la
alfabetización básica en inglés y habilidades matemáticas necesarias por muchos
trabajadores. Python tuvo un papel crucial en este proceso: debido a su
orientación hacia una sintaxis limpia, ya era idóneo, y las metas de CP4E
presentaban similitudes con su predecesor, ABC. El proyecto fue patrocinado por DARPA.7En el año 2007, el
proyecto CP4E está inactivo, y mientras Python intenta ser fácil de aprender y
no muy arcano en su sintaxis y semántica, alcanzando a los no-programadores, no
es una preocupación activa.8
En el año 2000, el equipo
principal de desarrolladores de Python se cambió a BeOpen.com para formar el equipo BeOpen PythonLabs. CNRI pidió que la versión 1.6
fuera pública, continuando su desarrollo hasta que el equipo de desarrollo
abandonó CNRI; su programa de lanzamiento y el de la versión 2.0 tenían una
significativa cantidad de traslapo.9 Python 2.0 fue el primer y único
lanzamiento de BeOpen.com. Después que Python 2.0 fuera publicado por
BeOpen.com, Guido van Rossum y los otros desarrolladores de PythonLabs se
unieron en Digital Creations.
Python 2.0 tomó una
característica mayor del lenguaje de programación funcional Haskell:
listas por comprensión. La sintaxis de Python para esta construcción es muy
similar a la de Haskell, salvo por la preferencia de los caracteres de
puntuación en Haskell, y la preferencia de Python por palabras claves
alfabéticas. Python 2.0 introdujo además un sistema de recolección de basuracapaz de recolectar
referencias cíclicas.9
Posterior a este doble
lanzamiento, y después que van Rossum dejó CNRI para trabajar con
desarrolladores de software comercial, quedó claro que la opción de usar Python
con software disponible bajo GNU GPL era
muy deseable. La licencia usada entonces, la Python
License, incluía una cláusula estipulando que la licencia estaba
gobernada por el estado de Virginia,
por lo que, bajo la óptica de los abogados de Free Software Foundation (FSF), se hacía incompatible con GPL.
CNRI y FSF se relacionaron para cambiar la licencia de software libre de Python
para hacerla compatible con GPL. En el año 2001, van Rossum fue premiado con FSF Award for the Advancement of Free Software.
Python 1.6.1 es esencialmente
el mismo que Python 1.6, con unos pocos arreglos de bugs,
y con una nueva licencia compatible con GPL.1
Python 2.1 fue un trabajo
derivado de Python 1.6.1, así como también de Python 2.0. Su licencia fue
renombrada a: Python Software Foundation License.
Todo el código, documentación y especificaciones añadidas, desde la fecha del
lanzamiento de la versión alfa de Python 2.1, tiene como dueño a Python Software Foundation (PSF), una organización sin ánimo de
lucro fundada en el año 2001, tomando como modelo la Apache Software Foundation.1 Incluido en este lanzamiento fue una
implementación del scoping más parecida a las reglas de static scoping (del cual Scheme es el originador).10
Una innovación mayor en Python
2.2 fue la unificación de los tipos en Python (tipos escritos en C), y clases
(tipos escritos en Python) dentro de una jerarquía. Esa unificación logró un
modelo de objetos de Python puro y consistente.11 También fueron agregados los generadores que fueron inspirados por el lenguaje Icon.12
Las adiciones a la biblioteca
estándar de Python y las decisiones sintácticas fueron influenciadas
fuertemente por Java en
algunos casos: el package
logging
,13 introducido en la versión 2.3, está
basado en log4j; el parser SAX, introducido en 2.0;
el package threading
,14 cuya clase Thread expone un subconjunto de la interfaz
de la clase homónima en Java.
Características
y paradigmas
Python es un lenguaje de
programación multiparadigma. Esto
significa que más que forzar a los programadores a adoptar un estilo particular
de programación, permite varios estilos: programación orientada a objetos, programación imperativa yprogramación funcional. Otros paradigmas
están soportados mediante el uso de extensiones.
Python usa tipado
dinámico y conteo de referencias para la administración de memoria.
Una característica importante
de Python es la resolución dinámica de nombres; es decir, lo que enlaza un
método y un nombre de variable durante la ejecución del programa (también
llamado ligadura dinámica de métodos).
Otro objetivo del diseño del
lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos
fácilmente en C o C++. Python
puede incluirse en aplicaciones que necesitan una interfaz programable.
Aunque la programación en
Python podría considerarse en algunas situaciones hostil a la programación
funcional tradicional del Lisp, existen bastantes
analogías entre Python y los lenguajes minimalistas de la familia Lisp como
puede ser Scheme.
Filosofía
Los usuarios de Python se
refieren a menudo a la Filosofía
Python que es bastante
análoga a la filosofía de Unix. El código que sigue
los principios de Python de legibilidad y transparencia se dice que es
"pythonico". Contrariamente, el código opaco u ofuscado es bautizado
como "no pythonico" ("unpythonic" en inglés). Estos
principios fueron famosamente descritos por el desarrollador de Python Tim Peters en El
Zen de Python
§
Bello es mejor que feo.
§
Explícito es mejor que implícito.
§
Simple es mejor que complejo.
§
Complejo es mejor que complicado.
§
Plano es mejor que anidado.
§
Disperso es mejor que denso.
§
La legibilidad cuenta.
§
Los casos especiales no son tan especiales como para quebrantar las reglas.
§
Aunque lo práctico gana a la pureza.
§
Los errores nunca deberían dejarse pasar silenciosamente.
§
A menos que hayan sido silenciados explícitamente.
§
Frente a la ambigüedad, rechaza la tentación de adivinar.
§
Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
§
Aunque esa manera puede no ser obvia al principio a menos que usted sea
holandés.15
§
Ahora es mejor que nunca.
§
Aunque nunca es a menudo mejor que ya mismo.
§
Si la implementación es difícil de explicar, es una mala idea.
§
Si la implementación es fácil de explicar, puede que sea una buena idea.
§
Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más
de esas cosas!
Tim Peters, El Zen de Python
Desde la versión 2.1.2, Python
incluye estos puntos (en su versión original en inglés) como un huevo de pascua que se muestra al ejecutar
import this
.
Python
|
|
|
|
Desarrollador(es)
|
|
Python
Software Foundation
http://www.python.org/ |
|
Información
general
|
|
Extensiones comunes
|
.py,
.pyc, .pyd, .pyo, .pyw
|
Paradigma
|
multiparadigma: orientado a objetos, imperativo, funcional,reflexivo
|
Apareció en
|
1991
|
Diseñado por
|
Guido van
Rossum
|
Última versión estable
|
3.3.0 / 2.7.3 (29 de septiembre de 2012 /
11 de abril de 2012 )
|
Última versión en pruebas
|
3.3.0rc3 (24 de septiembre de 2012 )
|
Tipo de
dato
|
fuertemente tipado, dinámico
|
Implementaciones
|
CPython, IronPython, Jython, Python for S60, PyPy, PyGame , Unladen Swallow
|
Dialectos
|
Stackless Python, RPython
|
Influido por
|
ABC, ALGOL 68, C, Haskell, Icon,Lisp, Modula-3, Perl, Smalltalk,Java
|
Ha influido a
|
Boo, Cobra, D, Falcon, Genie,Groovy, Ruby, JavaScript, Cython
|
Sistema operativo
|
Multiplataforma
|
Licencia
|
Python Software Foundation License
|
No hay comentarios:
Publicar un comentario