Download python - Departamento de Ingeniería Telemática

Document related concepts
no text concepts found
Transcript
PYTHON
David García Sánchez
Javier García Zurdo
Paloma Vaquero Quintana
Daniel Ángel Rodríguez Plaza
100029739
100029577
100032948
100025251
Departamento de Ingeniería Telemática
Universidad Carlos III de Madrid
Software de
Comunicaciones
2007-2008
Contenido
• Introducción
• Descripción
• Desarrollo
• Uso
• Conclusiones
• Referencias
Software de
Comunicaciones
2007-2008
2
Introducción
• Python fue creado por Guido van Rossum en 1980 como
un sucesor del lenguaje de programación ABC.
– Da este nombre al lenguaje inspirado por el popular grupo
cómico británico Monty Python
• Guido creó Python durante unas vacaciones de navidad
en las que (al parecer) se estaba aburriendo
• El principal objetivo que persigue este lenguaje es la
facilidad, tanto de lectura, como de diseño.
Software de
Comunicaciones
2007-2008
3
Historia
• En 1991, van Rossum publicó el código. En esta etapa
del desarrollo ya estaban presente clases con herencia,
manejo de excepciones, funciones, y algunos tipos
medulares así como un sistema de módulos adoptado
de Modula-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. Se
incluyeron un gran conjunto de características como las
herramientas de la programación funcional: lambda,
map, filter y reduce, cortesía de un hacker “Amrit Prem”.
Software de
Comunicaciones
2007-2008
4
Historia
• 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 la estancia de van Rossum en CNRI, lanzó la
iniciativa Computer Programming for Everybody, con el
fin de hacer la programación accesible a más gente.
• En 2000, el equipo de desarrolladores principal de
Python se cambió a BeOpen.com. Python 2.0 fue el
único lanzamiento de BeOpen.com
Software de
Comunicaciones
2007-2008
5
Historia
• Python 2.0 tomó una característica mayor del lenguaje
de programación funcional Haskell: list comprenhensions
• Python 2.0 introdujo además un sistema de recolección
de basura capaz de recolectar ciclos de referencias.
• Se van sucediendo una serie de versiones que hacen
pequeños cambios.
• 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
Software de
Comunicaciones
2007-2008
• A abril de 2007, la última versión de producción de
Python es la 2.5.1
6
CARACTERÍSTICAS DEL
LENGUAJE (I)
• PROPÓSITO GENERAL:
– No es específico para la Web, aunque el desarrollo de
páginas es una posibilidad .
– Con Python se puede hacer lo mismo que con Java o C.
• LENGUAJE MULTIPARADIGMA:
– No fuerza a los programadores a adoptar un estilo
particular de programación, sino que permite varios estilos.
• MULTIPLATAFORMA:
– Unix originalmente.
– Disponibilidad en cualquier sistema a través de intérpretes:
Windows, Mac, Palm, PlayStation2…
Software de
Comunicaciones
2007-2008
7
CARACTERÍSTICAS DEL
LENGUAJE (II)
• INTERACTIVO:
– Posee intérprete por línea de comandos.
– Cada sentencia se ejecuta y produce resultado visible.
• INTERPRETADO:
– No se debe compilar/linkar el código antes de su
ejecución.
– La primera vez que se ejecuta un script de Python se
compila y genera bytecode que es luego interpretado.
– Alta velocidad de desarrollo y buen rendimiento.
• ORIENTADO A OBJETOS:
– Ofrece modo sencillo de
componentes reutilizables.
Software de
Comunicaciones
2007-2008
crear
programas
con
8
CARACTERÍSTICAS DEL
LENGUAJE (III)
• OPEN SOURCE:
– Al ser gratuito y libre, Python Library continúa creciendo.
• FUNCIONES Y LIBRERÍAS:
– Ofrece posibilidad: programación en ventanas o sistemaen
red, crear archivos comprimidos en .zip.
Software de
Comunicaciones
2007-2008
9
CARACTERÍSTICAS DEL
LENGUAJE (IV)
• SINTAXIS CLARA:
– Muy legible y elegante.
– Notación identada obligatoria, en lugar de {} o
palabras
clave como “Begin” “End”.
– Tabulación hacia dentro escalonada con un margen dentro
de funciones o bucles.
Código en C/Java
if (x) {
if (y) {
f1();
}
Software de
Comunicaciones
2007-2008
Código en Python
if x:
if y:
f1()
f2()
f2();
}
10
CARACTERÍSTICAS DEL
LENGUAJE (V)
• SIMPLE Y PODEROSO:
– Muy denso: poco código hace mucho
– Soporta objetos y estructuras de datos de alto nivel:
strings, listas, diccionarios, etc.
– Múltiples niveles de organizar código: funciones, clases,
módulos, y paquetes
– Si hay áreas que son lentas se pueden reemplazar por
plugins en C o C++, siguiendo la API para extender o
empotrar Python en una aplicación, o a través de
herramientas como SWIG, sip o Pyrex.
Software de
Comunicaciones
2007-2008
11
NIVELES EN LENGUAJES
VS PRODUCTIVIDAD
Software de
Comunicaciones
2007-2008
Fuente: Scripting: Higher Level Programming for the 21st
Century. John K.Ousterhout.
12
Python vs. Perl
• Los dos están basados en un buen entendimiento de las
herramientas necesarias para resolver problemas
– Perl está basado en awk, sed, and shell scripting y su
misión es hacer las tareas de administradores de sistemas
más sencillas
– Python está basado e inspirando en OOP (Object-oriented
programming)
• Guido van Rossum diseñó un lenguaje simple, poderoso, y
elegante orientado a la creación de sistemas a partir de
componentes
Software de
Comunicaciones
2007-2008
13
Python vs. Java
• Java es un lenguaje de programación muy completo que
ofrece:
–
–
–
–
Amplio abanico de tipos de datos
Soporte para threads
Strong typing
Y mucho más ...
• Python es un lenguaje de scripting:
– No ofrece strong typing
• Bueno para prototipos pero malo para grandes sistemas
– Puede cascar en tiempo de ejecución
– Todo lo que puedes hacer con Java también lo puedes
hacer con Python
• Incluso puedes acceder a través de Python a las API de Java
si usas Jython
Software de
Comunicaciones
2007-2008
14
Python vs. Jython
• Python
– También llamado Cpython
– Implementación del lenguaje Python en C
– Python C API permite extender Python con librerías
realizadas en C
– Partes que requieren mayor rendimiento en Python están
implementadas en C o C++ y tan sólo contienen una
pequeña capa de Python encima
• Jython
– Implementación de Python en Java
– Permite acceder a todas las APIs de Java
• P.E. Podemos producir Swing GUIs desde Python
Software de
Comunicaciones
2007-2008
15
Python vs. PHP
• PHP y Python son:
–
–
–
–
Interpretados, lenguajes de alto nivel con tipos dinámicos.
OpenSource.
Fáciles de eprender en comparación com Java y Perl.
Extremadamente portables.
• Qué posee Python y no PHP?:
– Lenguaje de programación de propósito general (no sólo
para la web).
– Herencia múltiple.
– Argumentos sencillos para funciones y métodos (vs. PHP:
http://uk2.php.net/manual/en/functions.arguments.php )
Software de
Comunicaciones
2007-2008
16
Python vs. Ruby
• Semejanzas:
– Son lenguajes de alto nivel con tipos dinámicos.
– Proporcionan línea de comandos interactiva y librerías
estándar.
• Qué posee Ruby y no Python?:
– Se pueden definir constantes.
– Sólo hay un tipocontenedor de listas: Array.
– No hay acceso directo a a atributos, todo se realiza con
llamadas a métodos.
Software de
Comunicaciones
2007-2008
17
¿PARA QUÉ NO ES ÚTIL?
• Python no es el lenguaje perfecto, no es bueno para:
– Programación de bajo nivel (system-programming),
programación de drivers y kernels
como
• Python es de demasiado alto nivel, no hay control directo sobre
memoria y otras tareas de bajo nivel
– Aplicaciones que requieren alta capacidad de computo
• No hay nada mejor para este tipo de aplicaciones que el viejo C
• Python es ideal:
– Como lenguaje "pegamento" para combinar varios componentes
juntos
– Para llevar a cabo prototipos de sistema
– Para la elaboración de aplicaciones cliente
– Para desarrollo web y de sistemas distribuidos
– Para el desarrollo de tareas científicas, en los que hay que
simular y prototipar rápidamente
Software de
Comunicaciones
2007-2008
18
VENTAJAS:
• Desarrollo rápido:
Escritura
y ejecución del programa, saltándose el
proceso de compilación.
Permite hacer mejoras y debugging de manera rápida y
simple.
• Documentación amplia y detallada.
• Los lenguajes ágiles son más productivos
• El código Python es más legible y es mantenible.
Software de
Comunicaciones
2007-2008
19
INCONVENIENTES:
• LENTITUD:
- Los programas interpretados son más lentos que
los compilados.
- A pesar de esto, dada la simpleza del lenguaje, es
fundamental a la hora de desarrollar aplicaciones
rápidamente.
Software de
Comunicaciones
2007-2008
20
EJEMPLOS PYTHON
• EJEMPLO I:
Código encargado de obtener el cuadrado con los números
del 0 al 9.
Software de
Comunicaciones
2007-2008
21
EJEMPLOS PYTHON
– EJEMPLO II: Código que saludará al usuario si se conoce su
plato preferido, o le preguntará cuál es en caso contrario:
Software de
Comunicaciones
2007-2008
22
EJEMPLOS PYTHON
• EJEMPLO III: Código que busca y encuentra palabras
palíndromas en un archivo de texto indicado.
Software de
Comunicaciones
2007-2008
23
CASOS DE USO
• Programación de páginas Web (.psp .py CGI's) a través
del modulo mod_python para Apache
• Interfaces Gráficas (Tkinter, WxPtython)
• Programación mono -.NET (IronPython)
• Programación Java (Jython)
• Programación de juegos (Pygame)
• Programación de dispositivos móviles (sistemas S60
sobre Nokia)
Software de
Comunicaciones
2007-2008
24
Instalar Python
• Bajar la última versión de Python
http://www.python.org/download/
(2.4)
de
– Para Windows ejecutar instalador
• Opcionalmente bajarse extensiones Python para Windows32
de: http://starship.python.net/crew/mhammond/
• Podemos editar nuestro código Python con Notepad2 (Alt-H):
http://www.flos-freeware.ch/notepad2.html
– Para Linux:
• En Debian Sarge: apt-get install python2.4
• Para Fedora y Mandrake se pueden obtener los rpms de:
http://www.python.org/2.4/rpms.html
– rpm -iv python2.4-2.4-1pydotorg.i386.rpm
Software de
Comunicaciones
2007-2008
25
25
Usando Python desde línea de
comando
• Para arrancar el intérprete (Python interactivo) ejecutar:
C:\>python
Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC
v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license"
for more information.
• Un comando simple:
>>> print "Hola Mundo"
Hola Mundo
• Para salir del intérprete Ctrl-D (en Linux) o Ctrl-Z (en
Windows) o:
Software de
Comunicaciones
2007-2008
>>> import sys
>>> sys.exit()
$
26
26
Sentencias y bloques
„
„
Las sentencias acaban en nueva línea, no en ;
Los bloques son indicados por tabulación que sigue a
una sentencia acabada en ':'. E.j. (bloque.py):
# comentarios de línea se indican con carácter '#'
name = "Diego1" # asignación de valor a variable
if name == "Diego":
print "Aupa Diego"
else:
print "¿Quién eres?"
print "¡No eres Diego!"
$ python bloque.py
¿Quién eres?
¡No eres Diego!
Software de
Comunicaciones
2007-2008
27
27
Identificadores
• Los identificadores sirven para nombrar variables,
funciones y módulos
– Deben empezar con un carácter no numérico y contener letras, números
y '_'
– Python es case sensitive (sensible a la capitalización)
• Palabras reservadas:
– and elif global or assert else if pass break except
import print class exec in raise continue finally is
return def for lambda try del from not while
Software de
Comunicaciones
2007-2008
28
28
Tipos de datos I
• Numéricos (integer, long integer, floating-point, and complex)
>>> x = 4
>>> int (x)
4
>>> long(x)
4L
>>> float(x)
4.0
>>> complex (4, .2)
(4+0.2j)
Software de
Comunicaciones
2007-2008
29
29
Tipos de datos II
• Strings, delimitados por un par de (', " ,""")
– Dos string juntos sin delimitador se unen
>>> print "Hi" "there"
Hithere
– Los códigos de escape se expresan a través de '\':
– Algunos de los métodos que se pueden aplicar a un string son:
>>> len('La vida es mucho mejor con Python.')
34
>>> 'La vida es mucho mejor con Python.'.upper()
'LA VIDA ES MUCHO MEJOR CON PYTHON'
>>>"La vida es mucho mejor con Python".find("Python")
27
Software de
Comunicaciones
2007-2008
30
30
Tipos de datos III
• El módulo string de la Python library define
métodos para manipulación de strings:
>>> import string
>>> s1 = 'La vida es mejor con Python'
• '%' es el operador de formateo de cadenas:
>>> pais = ‘España'
>>> "La capital de %s es %s"
“madrid")
'La capital de España es Madrid'
%
(pais,
– Los caracteres de formateo son los mismos que en C
Software de
Comunicaciones
2007-2008
31
31
Tipos de datos V
• Listas []
– Indexadas por un entero comienzan en 0:
>>> meses = ["Enero", "Febrero"]
>>> print meses[0]
Enero
Dos puntos (:), permite trabajar con una porción de la lista,
el elemento indicado por el segundo parámetro no se
incluye:
>>> print meses[1:2]
['Febrero']
– Para concatenar lista se usa el operador (+)
Software de
Comunicaciones
2007-2008
>>> print meses+meses
32
32
Tipos de datos VI
– Las listas pueden contener cualquier tipo de
objetos Python:
– Para añadir un elemento a una lista:
>>> items = [4, 6]
>>> items.insert(0, -1)
>>> items
[-1, 4, 6]
– Para usar una lista como una pila, se pueden
usar append y pop:
Software de
Comunicaciones
2007-2008
>>> items.append(555)
>>> items [-1, 4, 6, 555]
>>> items.pop()
555
>>> items [-1, 4, 6]
33
33
Tipos de datos VII
• Tuplas (), lo mismo que listas, pero no se pueden
modificar
>>> mitupla = ('a', 1, "hola")
>>> mitupla[2]
'hola‘
• Diccionarios {} arrays asociativos o mapas, indexados
por una clave, la cual puede ser cualquier objeto Python,
aunque normalmente es una tupla:
>>> mydict = {"altura" : "media", "habilidad"
: "intermedia", "salario" : 1000 }
>>> print mydict["habilidad"]
intermedia
Software de
Comunicaciones
2007-2008
34
34
Control de flujo: condicionales
• E.j. (condicional.py)
q = 4
h = 5
if q < h :
print "primer test pasado"
elif q == 4:
print “q tiene valor 4”
else:
print "segundo test pasado"
>>> python condicional.py
primer test pasado
Software de
Comunicaciones
2007-2008
• Operadores booleanos: "or," "and," "not"
• Operadores relacionales: ==, >, <, !=
35
35
Control de flujo: bucles
• for se utiliza para iterar sobre los miembros de una
secuencia
– Se puede usar sobre cualquier tipo de datos que sea una
secuencia (lista, tupla, diccionario)
• Ej. bucle.py
for x in range(1,5):
print x
$ python bucle.py
1 2 3 4
Software de
Comunicaciones
2007-2008
36
36
Control de flujo: bucles
• while es otra sentencia de repetición.
– Ejecuta un bloque de código hasta que una condición es
falsa.
• break nos sirve para salir de un bucle
Software de
Comunicaciones
2007-2008
37
37
Funciones
• Las funciones se declaran utilizando la palabra
clave def
# funcionsimple.py
def myfunc(a,b):
sum = a + b
return sum
print myfunc (5,6)
$ python funcionsimple.py
11
Software de
Comunicaciones
2007-2008
• A una función se le pueden asignar parámetros
por defecto: def myfunc(a=4,b=6):
38
38
Clases
• Una clase contiene una colección de métodos.
Cada método contiene como primer parámetro
(self) que hace referencia a un objeto
– self equivalente a this en C++
• En Python se soporta la herencia múltiple
Software de
Comunicaciones
2007-2008
39
39
USO: Parsear un fichero XML
– Mediante los Parsers SAX (Secuenciales, consumen poca
memoria, no permiten acceder de forma sencilla a
elementos anteriores). En Python es ofrecido por el
módulo xml.sax de la Python Library
– Parsers DOM (Construye una representación (un árbol) en
memoria del documento, máximo consumo de memoria,
permite acceder fácilmente a todos los detalles del
documento).
Python
provee
el
módulo
xml.dom.minidom que es una implementación sencilla
de DOM
Software de
Comunicaciones
2007-2008
40
Extensible Style Language
Transformations (XSLT) (1)
• ¿Qué es?
– Un lenguaje de programación
• ¿De qué sirve?
– De transformar el árbol de un fichero XML a otro formato.
– Mas frecuente – a otro fichero XML.
• Herramientas
Python:
para
procesamiento
XSLT
tools
en
– http://uche.ogbuji.net/tech/akara/nodes/2003-0101/python-xslt
Software de
Comunicaciones
2007-2008
41
Programación de GUIs: Tkinter (1)
• Tkinter: Es la interfaz estándar de Python, o tambien
llamada caja de herramientas GUI del Tk.
Software de
Comunicaciones
2007-2008
42
Programación de GUIs: Tkinter, Pmw
– Pmw (Python meta widgets) (http://pmw.sourceforge.net/)
• Componentes más elaborados encima de Tkinter
Software de
Comunicaciones
2007-2008
43
Programación de GUIs: wxPython
Software de
Comunicaciones
2007-2008
44
Python Server Pages
• Se pueden insertar sentencias Python en documentos
HTML o XML
– Similar a PHP, JSP o ASP
• ¿Es buena práctica mezclar marcado y código?
– Patrón de diseño MVC
• Sintaxis muy similar a JSP, 4 tipos de entidades:
Software de
Comunicaciones
2007-2008
45
LAMP con Python
• Python se utiliza en las tecnologías LAMP (configurar
sitios web o Servidores dinámicos con un esfuerzo
reducido.)
Software de
Comunicaciones
2007-2008
46
Otras aplicaciones
• Servicios Web: Desde Python se puede usar tanto
CORBA (omniORBpy) como servicios web (SOAPpy)
• Programa eXtrans: permite traducir fácilmente
documentos XML a cualquier otro formato o
representación
• Jython es una implementación de Python que se integra
de manera transparente con la plataforma Java.
Software de
Comunicaciones
2007-2008
47
Conclusiones (1)
• Es fácil
• Se escribe y se lee rápido
• Es práctico, rápido y potente
• Es Software Libre
• Tiene una gran comunidad
http://python.com.ar
Software de
Comunicaciones
2007-2008
48
Conclusiones (2)
Software de
Comunicaciones
2007-2008
49
Referencias
• Dive into Python:
http://diveintopython.org/http://diveintopython.org/
• http://es.wikipedia.org/wiki/Python
• Mark Lutz & David Ascher. Learning Python. 1999.
• http://wiki.python.org/moin/LanguageComparisons
• Jóse Félix Ontañón Carmona. Introducción a Python.
http://www.xinug.org/drupal/files/charlas/intro-python.pdf
Software de
Comunicaciones
2007-2008
50