8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
1/32
Introduccin a PythonLibrera Estndar
Frameworks
Jos Flix Ontan [email protected]
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
2/32
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
3/32
Python
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
4/32
Introduccin
Historia Su desarrollo comineza con Guido Van Rossum en 1990 El nombre 'Python' proviene del grupo cmico Monthy Python
Caractersticas Lenguaje Interpretado/'Compilado' de Muy Alto Nivel De propsito general Programacin en paradigmas Procedimental y Orientado a Objeto Dbilmente tipado Multi plataforma (Cross platform)
Estructura del cdigo Fin de lnea marca fin de sentencia El sangrado expresa la estructura de bloque
foo = 'bar'iffoo == 'bar':
print 'ok'else:
iffoo == 'rab':print 'it's rab'
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
5/32
Modo Interactivo
El modo interactivo python muestra la shell python, a travs de la cual
podemos ejecutar ordenes python como si de una consola se tratase.
Accedemos a l con solo ejecutar el comando 'python' Mejor manera de aprender y familiarizarse con el lenguaje Contiene un modo de ayuda Prueba y depura tus ideas aqu
Alternativas:Idle, PyCrust, Spe ...
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
6/32
Tipos y Estructuras de Datos (I)
Numericos:
a=132 i=2L f=756.123 x=1+0j
b=34*75 j=1000L**3 g=55.3*23 y=12.070j*13
c=45/34 k=4L/2L h=45.0/34.0 z=1+1j/11ja+b i+a f+j x+f
(integer) (long) (float) (complex)
Cadenas:
>>> cad='foobar' >>> cad[:3] >>> cad[-4] >>> cad+' raboof'
>>> cad[0] 'foo' 'b' 'foobar raboof''f' >>> cad[3:] >>> cad[:-1] >>> cad.capitalize()>>> len(cad) 'bar' 'fooba' 'Foobar'6 >>> cad[1:5] >>> cad[-4:] >>> cad.upper()
'ooba' 'obar' 'FOOBAR'
Notas: La divisin con
enteros trunca
decimales Python soporta
enteros largos con
longitud ilimitada
Nota:
| H | e | l | p |
0 1 2 3 4
4 3 2 1
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
7/32
Tipos y Estructuras de Datos (II)
Listas: Conjunto de elementos indexados
separados por comas
>> list = ['casa'] >> list.count(123)>> list.append[123] 2>> list.insert[0,'boca'] >> list.pop()['boca','casa',123] 123>> list.sort() >> nest = [12,'a']>> list >> list.append(nest)[123,'boca','casa'] >> list>> list[0:2] [123,'boca','casa',[12,'a']][123,'boca'] >> len(list)>> list[-1] 4'casa'>> list.append(123)
Disponemos en Python de varios Tipos (estructuras) de Datos Compuestos de forma
nativa. Los ms comunes, tiles y verstiles son las Listas y los Diccionarios. Pueden
agrupar elementos de distintos Tipos para realizar operaciones sobre ellos.
Diccionarios: Conjunto de pares clave valor
>> dic = {'nombre':'Juan','edad':23,'sexo':'M'}>> dic['nombre']'Juan'>> dic.keys()['nombre','edad','sexo']>> dic.values()['Juan',23,'M']>> dic[144] = 'Euros'
>> dic{'nombre':'Juan','edad':23,'sexo':'M',144:'Euros'}>> dic>> len(dic)4
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
8/32
Sentencias de Control de Flujo
if :
elif :
else:
for in :
while :
>> lista1 = [1,2,3]>> lista2 = [3,4,5]>> iflista1 == [1,2,3]:... print 'si'si>> iflista1 > lista2:
... print 'Mayor'
... eliflista1 < lista2:
... print 'Menor'
... else:print 'Igual'
Mayor
>> for numero in range(1,3):.... print numero123>> coord = [(1,1),(1,2),(3,4)]>> for x,y in coord:... print x,y1 11 23 4>> alpha = {1:'a',3:'c',2:'b'}
>> numeros = alpha.keys()>> numeros.sort()>> for numero in numeros:... print alpha[numero]abc
>> x = 5>> while x < 0:... print x,... x = x -1
5 4 3 2 1>> x = 5>> while True:... x = x -1... ifx == 3:... continue... ifx == 0:
break... print x,4 2 1
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
9/32
Entrada y Salida
Clasica
Podemos solicitar valores por teclado con
raw_input y presentar valores por pantalla con
print. Python es capaz de representar
cualquier estructura de datos en formato
legible 'para humanos'
>> nombre = raw_input('Nombre: ')Nombre: Jose
>> edad = 24>> print '%s tiene %d' % (nombre,edad)Jose tiene 24>> file = open('foo.txt','w')>> file.write(datos[0])>> file.close()
Mejoras/Comodidades
Modulo cPickle: Guardar y recupera
desde archivos cualquier tipo de dato, e
incluso instancias de clases.
>> import cPickle>> datos = {'Nombre':'Jose','Edad':24}>> file = open('foo.txt','w')>> cPickle.dump(f, datos)>> file.close()>> file = open('foo.txt','r')>> copia = cPickle.load(file)>> copia['Nombre']Jose
Como en todo lenguaje, podemos trabajar con la E/S de la aplicacin a travs de teclado y
pantalla o a travs de ficheros. Python aade algunas comodidades al respecto.
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
10/32
Definicin de Funciones (I)
Todos los argumentos se pasan por referencia. Los
argumentos pueden pasarse de forma posicional o
nombrada y con valores por defecto
Se crean con la palabra reservada 'def'>> defholamundo():... print 'hola mundo'>> holamundo()hola mundo
No se distingue explcitamente entre funciones
(devuelven valor) y procedimientos (no
devuelven valor)
>> defsumados(numero):... return numero + 2>> print sumados(3)
5
Cada funcin define su propio espacio de nombres
(namespace)
>> x=5>> defdameUnaX(x):.. print x>> dameUnaX(4)4
>> defpunto(x=0,y=0):... print '('+x+','+y+')'>> punto()(0,0)>> punto(y=3)(0,3)
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
11/32
Definicin de Funciones (II)
Una funcin puede devolver cualquier tipo
o estructura de datos Python
Una funcin puede recibir como parmetro
otra funcin. As podemos crear funcionesque encapsulen el comportamiento de otras
o crear funciones genricas modificables
por el comportamiento de la funcin que le
suministremos como parmetro.
Con *argen la cabecera de la funcin se
reciben todos los argumentos como una
lista. Podemos, as, construir funciones con
nmero variable de argumentos
>> defdameHora():... return (15,10)>> hora,minuto = dameHora()>> print '%d:%d' % (hora,minuto)15:10
>> defcalculadora(operacion, op1,op2):.. return operacion(op1,op2)
>> defsuma(sum1,sum2):... return sum1+sum2>> defresta (res1,res2):... return res1-res2>> print calculadora(suma, 5, 3)8>> print calculadora(resta, 5, 3)2
>> defcarrito(dueo, *articulos):... print dueo+' Ha comprado:',... for articulo in articulos:... print articulo,>> carrito('Pedro','Champ','Leche')Pedro Ha comprado: Champ Leche
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
12/32
Excepciones
Se usan las excepciones para el manejo de errores y notificacin de eventos en el flujo deuna aplicacin. Python lanza, por defecto, mltiples interrupciones ante comportamientos
inesperados, cerrando la aplicacin y devolviendo una traza del programa. Es labor del
programador capturar y tratar dichas interrupciones. Se utilizan bloques try ... except
>> try:... print 2/0... except:... print 'Salto una Excepcin'Salto una Excepcin>> try:... print 2/0... except ZeroDivisionError:
print 'No se divide por 0'... except:... print 'Salto una Excepcin'No se divide por 0
>> letras=['a','b,'c']>> defdameLetra(pos):... try:... letra = letras[pos]... file = open('letra.txt')... file.write(letra)... file.close()... except (IOError, IndexError):
... print 'No se pudo'>> dameLetras(4)No se pudo
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
13/32
Mdulos y Paquetes
Mdulo: Coleccin de clases, funciones y variables salvadas en un archivo .py Se importan con la palabra reservada
importseguida del nombre del mdulo (sin
incluir la extensin)
Podemos importar un modulo completo o
clases y funciones independientes con fromPaquete: Coleccin de mdulos situados en un mismo directorio. Para que un
directorio sea reconocido como paquete es necesario que ste contenga un archivo
llamado __init__.py que puede estar vaco. Un paquete puede contener subpaquetes
(subdirectorios, cada uno con su __init__.py)
Anlogamente podemos importar paquetes
enteros o mdulos y subpaquetes
independientes
>> import math>> math.cos(0)1.0
>> from string import upper, lower>> print upper('big'), lower('LITTLE')
BIG little
>> import mates.algebra>> mates.algebra.seno(0)0.0
Nota: Puede observarse el contenido de un mdulo o paquete con la funcin dir()
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
14/32
Orientacin a Objeto (I)
Python implementa la orientacin a objeto soportando clases e instancias. En Python, una clase es tratada como una plantilla a travs de la cual crear instancias. Un objeto creado a partir de una clase es una instancia de la clase El primer argumento en todo mtodo de una clase es una referencia al objeto. Por
convencin se usa self
import math
class vector:p1=(0,0)p2=(0,0)
defdameDireccion(self):return ( self.p2[0] - self.p1[0],
self.p2[1] - self.p1[1])
defdameModulo(self):return math.sqrt((self.p1[0]+self.p2[0])**2 +
(self.p1[1]+self.p2[1])**2)
>> vec = vector()>> vec.p1 = (1,2)>> vec.p2 = (2,1)>> print vec.dameDireccion()(1, -1)>> print vec.dameModulo()4.2426406871192848
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
15/32
Orientacin a Objeto (II)
class pub:a='publico'b='tambien'
defnuevo(self, s):self.c = s
defdame(self):print self.a, self.b
class priv:
_a = 'no debes'__b = 'no puedes'
defdame(self):print self._a, self.__b
>> foo=pub()>> foo.nuevo('new')>> foo.c'new'
>> foo.dame()publico tambien>> bar=priv()>> bar._a'no debes'>> bar.__bTraceback (most recent call last):
File "", line 1, in ?AttributeError: a instance has noattribute '__b'>> bar.dame()no debes no puedes
Cada instancia hereda el comportamiento y atributos definido en la clase y define su
propio espacio de nombres. Los atributos de una clase pueden ser creadosdinmicamente. Todos los atributos y mtodos de una clase son pblicos.
Por convencin:
Atributo/Mtodo quecomienza con _ (guin
bajo) no debe ser
usado externamente
Atributo/Mtodo que
comienza con __ (dobleguin bajo) no es
exportado
directamente.
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
16/32
Orientacin a Objeto (III)
Python dispone, en el paradigma orientado a objeto, de los llamados m
todos especialesmediante los cuales podemos sobreescribir el comportamiento de los mtodos internos
(buil in methods). Todo m todo especial sigue la nomenclatura__nombremetodo__()
class punto3D: def__init__(self,x=0,y=0,z=0):
self.x = x
self.y = yself.z = z
def__add__(self, other):x = self.x + other.xy = self.y + other.yz = self.z + other.z
return punto3D(x,y,z)
def__str__(self): return '(%d,%d%d)' %
(self.x,self.y,self.z)
>> a = punto3D(1,1,1)>> print a(1,1,1)
>> a = punto3D(y=2)>> b = punto3D(1,0,1)>> print a, b(1,0,1) (0,2,0)>> c = a + b>> print c(1,2,1)
Algunos mtodos especiales
__len__ : definir el tamao
que se devuelve al lamar
len(objeto)
__sub__: restar dos objetos
__cmp__: comparar dos
objetos con , ==, etc...
__getitem__: soportar
indexado, ej: objeto[0]
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
17/32
Orientacin a Objeto (IV)Una subclase hereda los mtodos y atributos de otra que llamamos clase base. A esto se
le llama herencia. El polimorfismo (mtodos que son capaces de operar con distintos tiposy nmeros de argumentos) no est implementado en Python pero se puede programar.
class punto2D(punto3D): def__init__(self, x=0, y=0):
vector3D._init_(x,y,0)
def__add__(self, other):x = self.x + other.xy = self.y + other.y
return punto2D(x,y)
def__sub__(self, other):return self.__add__(not other)
def__not__(self):return punto2D(-self.x, -self.y)
def__str__(self):return '(%d,%d)' %
(self.x,self.y)
class recta: def__init__(self, p1, p2): iftype(p1)==type(p2)=='tuple':
self.p1 = punto2D(p1[0],p1[1])self.p2 = punto2D(p2[0],p2[1])
else:self.p1 = p1self.p2 = p2
defdireccion(self): return self.p2-self.p1
>> m = recta(punto2D(1,1),punto2D(3,1))>> m.direccion()'(2, 0)'>> m = recta((2,2),(3,1))>> print m.p1+m.p2(5,3)
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
18/32
Librera EstndarUna aproximacin prctica
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
19/32
Introduccin
Segn se lee en O'Reilly Python Standar Library:
As pues, en la librera estndar de python encontramos mdulos y paquetes
para realizar:
Manejo de cadenas, fechas, etc... Administracin y Servicios del Sistema Operativo Expresiones regulares Protocolos de red Programacin Distribuida ...
La librera estndar de Python cubre un amplio rango de mdulos.
Incluye todos los mdulos que son parte del propio lenguaje Python,
como los tipos de datos y sentencias definidas en la especificacin
del lenguaje, a mdulos que son probablementetiles solo a un
n
mero reducido de programas
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
20/32
Datetime
El mdulo datetime engloba las clases, funciones y variables necesarias para el manejo
de fechas y horas. Esta implementacin soporta operaciones de fechas (sumar, restar, etc...)
y diversas transformaciones (a calendario, timestamp, fecha iso ...)
import datetime
people = {'Manuel': '20-03-1999', 'Pedro': '18-12-1981'}
anyos = 0for cadenaFecha in people.values():
campos = cadenaFecha.split('-')fecha = datetime.date(int(campos[2]), int(campos[1]), int(campos[0]))diferencia = datetime.date.today() - fechaanyos = anyos + (diferencia.days / 360)
nombres = str(people.keys())[2:-2].replace("'","")print 'Las edades de: %s suman %d' % (nombres, anyos)
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
21/32
Administracin y Servicios del SO (I)
Provee de una interfaz unificada de acceso a los servicios de diversos sistemas
operativos (Posix, nt, mac, dos ...). Programas que hagan un uso correcto del paquete
os tienen ms oportunidades de ser multiplataforma.
Paquete os
Mdulo sys
Variables y funciones que pueden ser usadas para manipular el entorno de ejecucin
A destacar: Mdulo os.path: Funciones para la gestin de rutas y archivos
M
dulo os.walk: Capaz de caminar a trav
s de un
rbol de directorios Llamadas al Sistema Operativo: os.kill, os.execv, os.fork, os.pipe
A destacar: sys.argv: Lista de cadenas que contiene el nombre del script en ejecucin
seguido de los parmetros con los que fue invocado dicho script. sys.exit: Funcin para forzar la salida del programa que la invoca. sys.stdin, sys.stdout, sys.stderr: Ficheros de acceso a la entrada,salida y salida
de errores estndar respectivamente
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
22/32
Administracin y Servicios del SO (II)
import sysimport osimport datetime
ifnot os.path.isdir('log'):os.mkdir('log')
log = open('log'+os.sep+'log'+datetime.datetime.now().isoformat(),'w')
for root, dir, files in os.walk(sys.argv[1]): for name in files:
ruta = os.path.join(root,name)tamano = os.path.getsize(ruta)if tamano > int(sys.argv[2]):
log.write('El archivo: %s ocupa mas de %s bytes\n' % (ruta, sys.argv[2]))
log.close()
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
23/32
Expresiones RegularesAlguna gente, al confrontar un problema, piensa: 'Ya se!, Usare expresiones
regulares'. Ahora tienen dos problemasJamie Zawinski, en comp.lang.emacs
Python provee del mdulo 're' para la aplicacin de expresiones regulares. La
sintaxis para la definicin de expresiones regulares es similar a la usada en Perl.
Con 're' podemos ver si una cadena se ajusta a un patrn, si contiene dicho patrn,
etc...
Las peculiaridad que aade Python en este sentido es la posibilidad de 'compilar'
una expresin regular para despus poder aplicarla a mltiples cadenas
>> import re
>> emails = re.compile('^[0-9a-zA-Z\.\-\_]+@[[0-9a-zA-Z\.\-\_]+\.[a-zA-Z]{2,3}$')>> ifemails.match('[email protected]'):
>> print 'valido'valido>> ifemails.match('[email protected]'):>> print 'valido'..>>
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
24/32
Protocolos de Red (I)En su librera estndar, Python provee de mdulos para trabajar con ftp, web,
sockets, pop ... a muy alto nivel, actuando tanto de cliente como de servidor
import ftplib
ftp = ftplib.FTP("ftp.host.com")ftp.login(username, password)ftp.cwd(directory)ftp.retrbinary('RETR '+filename, open(filename,'wb').write)ftp.storbinary('STOR '+filename, open(filename,'rb'))
import urllib, re
url = 'http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA= '
defbuscon(busqueda):datos = urllib.urlopen(url+busqueda).read()print re.sub("",'',datos)
Basado en el bash script draepor Javier Carranza
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
25/32
Protocolos de Red (II)
import SocketServer
class MyHandler(SocketServer.BaseRequestHandler): defhandle(self): while 1:
dataReceived = self.request.recv(1024)self.request.send(dataReceived)
myServer = SocketServer.ThreadingTCPServer(('',8881), MyHandler)myServer.serve_forever( )
Extraido de O'Reilly Python Cookbook
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
26/32
Programacin DistribuidaPara las llamadas a procedimiento remoto, usadas para comunicar procesos que
corren en distintas mquinas, Python provee en su librera estndar de interfaz a
XMLRPC, aunque existen alternativas fuera de la librera como SOAP o CORBA
import SimpleXMLRPCServer
class holamundo:
defhola(self):return 'hola mundo!!'
server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost',8080))server.register_instance(archivoRemoto())server.serve_forever()
>> import xmlrpclib
>> server = xmlrpclib.ServerProxy('http://localhost:8080')>> print server.hola()hola mundo !!
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
27/32
Frameworks
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
28/32
Twisted
Twisted es un framework de desarrollo de aplicaciones de red.
Permite realizar operaciones tanto a bajo nivel con sockets como a alto nivel, hasta
tal punto que contiene servidores web, chat, de correo, etc... ya programados ylistos para user o adaptar a las necesidades de la aplicacin de red necesitada.
Con Twisted podeis tambin crear vuestros propios protocolos de red.
La programacin de estos es muy sencilla y todo ello en el paradigma orientado
a objeto en Python
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
29/32
TurboGears
TurboGears es un framework de desarrollo rpido de aplicaciones web.
Est basado en el patrn Model View Controller, y
hace uso de una serie de componentes
independientes para un desarrollo Front to Back
Mochikit: Limpia y potente librera Javascript Kid: Sistema de plantillas CherryPy: Hace que programar la entrada/salida
de la web sea tan fcil como crear funciones
python SqlObject: Transforma a clases las tablas de tu
base de datos.
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
30/32
Pygame
Pygame es un framework multiplataforma diseado para la fcil programacin de
software multimedia, como por ejemplo juegos, en Python. Pygame requiere la
biblioteca multimedia SDL para funcionar.
import sys, pygamepygame.init()
size = width, height = 640, 480speed = [2, 2]white = 255,255,255
screen = pygame.display.set_mode(size)ball = pygame.image.load("ball.bmp")ballrect = ball.get_rect()
while 1: for event in pygame.event.get(): ifevent.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed) ifballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0] ifballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(white)screen.blit(ball, ballrect)pygame.display.flip()
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
31/32
wxPython
Existen diversos wrappersde gui toolkits para Python, entre ellos python qt, python
gtk, o Tkinter. En esta presentacin nos centraremos en, quizs, el ms exitoso de
ellos: wxPython
Caractersticas:
Binding de wxWidgets Multiplataforma Utiliza el set de widget nativo de la plataforma sobre la que corra Sencillez de uso Fcil de crear tus propios widgets
8/6/2019 Introduccin a Pythona Librera Estndar Frameworks
32/32
Bibliografa
O'Reilly Python Cookbook O'Reilly Python Standard Library O'Reilly Python Advanced Programming Manning wxPython In Action Gua de Aprendizaje Python de Guido Van Rossum
www.python.org
www.pygame.org
www.turbogears.org
www.twistedmatrix.com
www.wxpython.org
Esta presentacin se distribuye con la licencia Creative Commons que sigue:
http://creativecommons.org/licenses/by nc sa/2.5/es/
http://creativecommons.org/licenses/by-nc-sa/2.5/es/http://creativecommons.org/licenses/by-nc-sa/2.5/es/Top Related