Programacion en Python
Jesus Espino Garca
Grupo de usuarios de Linux
Universidad Carlos III de Madrid.
18 de Noviembre de 2004
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 1 / 55
Introduccion.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 2 / 55
Por que Python?
Python es facil de aprender.
Python es sencillo de usar.
Python es potente.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 3 / 55
Que es Python?
Es un lenguaje de programacion.
Fue creado en las navidades de 1989.
Su autor es Guido van Rossum.
En su origen era un lenguaje para la gestion de Amoeba.
Basado en ABC y Modula-3
En febrero de 1991 pasa a USENET
A partir de ah el lenguaje no ha dejado de crecer.
Actualmente tenemos la version 2.3.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 4 / 55
Por que es especial?
Es libre (y gratis).
Es facil de escribir.
Es facil de leer.
Es facil de mantener.
Es de proposito general.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 5 / 55
Por que es especial?
Alto nivel.
Orientado a objetos.
Interpretado
Introspectivo
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 6 / 55
Por que es especial?
Extensible.
Completo.
Dinamico.
Robusto.
Multiples plataformas.
Colaborativo.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 7 / 55
Por que es especial?
Herencia multiple.
Funciones sobre listas.
Funciones lambda
...
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 8 / 55
Quien lo usa?
Bea Systems
Walt Disney Company
GE Aircraft Engines
Google
Hewlett-Packard
IBM
Microsoft
NASA
Nacional Center for Atmosferic Research
Red Hat
U.S. National Weather Service
U.S. Navy
Xerox
Yahoo!
Zope Corporation
...
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 9 / 55
Python.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 10 / 55
El interprete
$ python
Python 2.3.4 (#2, Sep 24 2004, 08:39:09)
[GCC 3.3.4 (Debian 1:3.3.4-12)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 11 / 55
Definicion de variables
No hace falta definir variables.
Los tipos de datos son dinamicos.
Es sensible mayusculas y minusculas.
>>> a=1
>>> b=1.0
>>> c="1.0"
>>> d=hola
>>> e=5j
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 12 / 55
Tipos de datos basicos
Enteros.
Coma flotante.
Numeros complejos.
Numeros de precision arbitraria.
Cadenas de caracteres.
Tuplas.
Listas.
Diccionarios.
Son dinamicos.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 13 / 55
Listas
Se identifica por []
Lista vaca: []
Elementos separados por comas
[1,2,3,4]
Elementos heterogeneos
[1,(2,4),"avion",["gul","linux","python"]]
Acceso a un elemento
lista[posicion]
Listas dentro de listas
lista[indice1][indice2]..[indiceN]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 14 / 55
Listas
Los ndices pueden contar tambien desde el final
0 1 2 3 4
-5 -4 -3 -2 -1
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 15 / 55
Listas
Tambien se pueden seleccionar fragmentos
>>> lista = range(5)
>>> lista
[0, 1, 2, 3, 4]
>>> lista[1:-2]
[1, 2]
Devuelve una lista.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 16 / 55
Tuplas
Similares a las estructuras de C.
No hace falta definirlas.
Se crean usando ().
Sus elementos pueden ser heterogeneos.
Se accede a sus elementos igual que una lista.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 17 / 55
Ejemplos con tuplas
>>> tupla1=(1,2,3)
>>> tupla1
(1, 2, 3)
>>> tupla2=(tupla1,["gul","linux"])
>>> tupla2
((1, 2, 3), [gul, linux])
>>> tupla1[2]
3
>>> tupla2[1]
[gul, linux]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 18 / 55
Diccionarios
Como las tablas hash en Java.
Se identifican con {}.
Sus elementos estan asociados a una clave.
Para acceder a un elemento:
diccionario[clave]
Las claves deben ser unicas.
Los elementos complejos no pueden ser claves.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 19 / 55
Diccionarios
Algunos metodos:
has_key(clave): Devuelve 1 si existe la clave.
items(): Devuelve una lista con el contenido.
iteritems(): Itera sobre la tupla (clave:elemento)
iterkeys(): Itera sobre las claves.
keys(): Devuelve una lista con las claves.
Mas informacion help(dict).
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 20 / 55
Buceando dentro de Python
Lenguaje introspectivo.
dir() muestra los objetos que hay en la memoria.
Los metodos tambien son objetos.
>>> dir()
[__builtins__, __doc__, __name__, a, b, c, d, e]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 21 / 55
Buceando dentro de Python
Es muy util cuando tienes mala memoria.
>>> dir([])
[__add__, __class__, __contains__, __delattr__, __delitem__,
__delslice__, __doc__, __eq__, __ge__, __getattribute__, __ge
titem__, __getslice__, __gt__, __hash__, __iadd__, __imul__,
__init__, __iter__, __le__, __len__, __lt__, __mul__, __ne
__, __new__, __reduce__, __reduce_ex__, __repr__, __rmul__,
__setattr__, __setitem__, __setslice__, __str__, append, cou
nt, extend, index, insert, pop, remove, reverse, sort]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 22 / 55
Un poquito de ayuda
>>> help([].append)
Help on built-in function append:
append(...)
[Link](object) -- append object to end
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 23 / 55
Indentado
El lenguaje es sensible al indentado.
Despues de : hay un bloque.
Bloque 1
Bloque 2
Bloque 1
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 24 / 55
Condiciones
if condicion1:
bloque si se cumple la condicion
elif condicion2:
bloque si no se cumple la condicion 1 y si la 2
else:
bloque si no se cumple ninguna condicion anterior.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 25 / 55
Bucles
while condicion:
Lo que se hace en el bucle
break sale del bucle.
continue pasa a la siguiente iteracion.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 26 / 55
Iteraciones
for variable in lista:
Lo que esta dentro de la iteracion
Se basa en las listas.
Funcion range().
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 27 / 55
Rangos
range(x) devuelve una lista con un intervalo
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5,7)
[5, 6]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 28 / 55
Definicion de funciones
def funcion(argumento1,argumento2...):
Documentacion de la funcion
Contenido de la funcion
[Opcion: return salida]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 29 / 55
Parametros de las funciones
Puede tener cero, uno o varios.
Puedo llamarla con menos parametros.
Puedo indicar los parametros con los que llamo.
Puedo poner valores por defecto.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 30 / 55
Veamos un ejemplo
def diHolaMundo(mensaje="Hola Mundo!",numVeces=1):
Mi funcion hola mundo pesado de ejemplo.
for i in range(numVeces):
print mensaje
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 31 / 55
Usando mi funcion de ejemplo
>>> diHolaMundo()
Hola Mundo!
>>> diHolaMundo("Hola a todos")
Hola a todos
>>> diHolaMundo("Hola a todos",3)
Hola a todos
Hola a todos
Hola a todos
>>> diHolaMundo(3)
3
>>> diHolaMundo(numVeces=3)
Hola Mundo!
Hola Mundo!
Hola Mundo!
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 32 / 55
Creando nuestra propia ayuda
>>> help(diHolaMundo)
Help on function diHolaMundo in module __main__:
diHolaMundo(mensaje=Hola Mundo!, numVeces=1)
Mi funcion hola mundo pesado de ejemplo.
>>> diHolaMundo.__doc__
Mi funcion hola mundo pesado de ejemplo.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 33 / 55
Escribiendo programas
En archivos .py.
Primera linea de un script de Unix.
#!/usr/bin/python
Ficheros .pyc son bibliotecas precompiladas.
Podemos llamarlo desde la linea de comandos.
python [Link]
./[Link]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 34 / 55
Entrada por teclado
input("cadena"): Muestra la cadena y obtiene un entero.
>>> x=input("Obtener valor: ")
Obtener valor: 5
>>> x
5
raw_input("cadena"): Muestra la cadena y obtiene una cadena.
>>> y=raw_input("Obtener valor: ")
Obtener valor: 5
>>> y
5
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 35 / 55
Parametros de entrada
[Link] es una lista con los parametros.
Utilizacion:
import sys
nombre = [Link][0]
primer_parametro = [Link][1]
...
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 36 / 55
Consejos para los programas
Es bueno dividir el codigo en funciones.
Podemos incluir codigo de prueba en un archivo.
Se ejecuta muy facil con:
if __name__==__main__:
testme()
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 37 / 55
Un poco sobre ficheros
Crear un objeto fichero:
file = open(nombre,modo)
Cerrar un fichero:
[Link]()
Leer un fichero:
[Link](),[Link](),[Link]()
Guardar en un fichero:
[Link](texto),[Link](texto)
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 38 / 55
Trabajar con modulos
Similar a las bibliotecas en C.
Agrupan archivos.
Se cargan con:
import modulo
Para llamar al contenido se antepone el nombre del modulo:
[Link]()
[Link]
Similar a los espacios de nombres.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 39 / 55
Trabajar con modulos
Puede cargar todos los contenidos de un modulo al espacio de nombre
actual:
from modulo import *
Similar al using namespace de C++.
Tambien se pueden importar los ficheros del usuario.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 40 / 55
Algunos modulos basicos
sys
Contiene funciones del sistema:
argv,exit,stderr,. . .
os
Permite llamadas al sistema operativo:
popen,fork,chdir,. . .
[Link]
Trabaja con las rutas de los archivos:
isfile,exists,join,. . .
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 41 / 55
Clases
class MiClase:
def setDato(self,dato):
[Link]=dato
def display(self):
print [Link]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 42 / 55
Clases
>>> x=MiClase()
>>> y=MiClase()
>>> [Link](4)
>>> [Link](Hola)
>>> [Link]()
4
>>> [Link]()
Hola
>>>
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 43 / 55
Herencia
class OtraClase(MiClase):
def display(self):
print El valor actual es, [Link]
>>> z=OtraClase()
>>> [Link](Herencia)
>>> [Link]()
El valor actual es Herencia
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 44 / 55
Sobrecarga de operadores
Existen metodos especiales dentro de las clases:
__init__: Constructor.
__del__: Destructor.
__add__: Operador de suma.
__or__: Operador O logico.
__getitem__: Indexacion.
__setitem__: Asignacion indexada.
__getslice__: Seleccionar una parte.
__repr__: Para salida por pantalla.
__len__: Longitud.
__cmp__: Comparacion.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 45 / 55
Ejemplo con suma
class MiClase2(MiClase):
def __init__(self, num=0):
[Link]=num
def __add__(self, other):
return MiClase2([Link] + [Link])
>>> x=MiClase2(3)
>>> y=MiClase2(6)
>>> (x+y).display()
9
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 46 / 55
Excepciones
Para manejo de errores, notificacion de eventos,. . .
try:
<Codigo...>
except:
Nombre_excepcion:
<Codigo para la excepcion>
else:
<Codigo a ejecutar si no se produce ninguna>
try:
<Codigo...>
finally:
<Codigo que se ejecuta siempre>
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 47 / 55
Excepciones
raise permite lanzar una excepcion de forma manual.
Puedes crear excepciones propias como una cadena de caracteres.
>>> ex1= Problema indeterminado
>>> raise ex1
Traceback (most recent call last):
File "<stdin>", line 1, in ?
Problema indeterminado
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 48 / 55
Ejemplo de excepciones
while True:
try:
x=int(raw_input("Introduzca un numero: "))
break
except ValueError:
print "Error: No ha introducido un numero entero."
while True:
try:
x=raw_input("Introduzca un 5: ")
if x!=5:
raise Excepcion de ejemplo
except Excepcion de ejemplo:
print "Error: El valor introducido no es un 5."
else:
print "Valor introducido correcto. Muchas gracias."
break
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 49 / 55
Que queda en el tintero?
Funciones lambda.
Programacion funcional.
Comprension de listas.
Funcionamiento interno.
Jython.
Profile.
Psyco.
Extension con C/C++.
Empotramiento en C/C++.
Mucho mas. . .
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 50 / 55
Para terminar.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 51 / 55
Referencias
[Link]
Usos:
[Link]
Tutoriales:
[Link]
[Link]
[Link]
Listas de correo en castellano:
[Link]
[Link]
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 52 / 55
Dudas
...
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 53 / 55
Agradecimientos
Gracias a Pablo Barrera por dejarme sus transparencias para hacer las
mas.
Gracias a todos los que me han ayudado para que estos cursos
puedan salir adelante.
Y gracias a ustedes por venir.
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 54 / 55
Fin
Jesus Espino Garca (GUL UC3M) Programacion en Python 18 de Noviembre de 2004 55 / 55