Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Curso de Introducción a Python                           Clase 4         Defossé Nahuel, Pecile Lautaro                   ...
Slices         Podemos obtener una rebanada de cualquier secuencia iterable         (cadenas, listas, tuplas, archivos...)...
Persistencia - Pickle       Python posee varios módulos que proveen serialización y       persistencia.       Los clásicos...
caballeros = {’gallahad’: ’el puro’,                 ’robin’: ’el valiente’}import pickle# guardamos los datosarchivo_caba...
Persistencia - Shelve       Problema: si guardamos más de un objeto en un archivo con       Pickle, sólamente podemos acce...
caballeros = {’gallahad’: ’el puro’,                ’robin’: ’el valiente’}cosas = [’spam’, ’eggs’]pajaro = ’albatros’impo...
Iteradores       Los iteradores son objetos que definen un protocolo para       recorrer una secuencia.       Un iterador d...
Un objeto iterable debe poseer definido el método __iter__()que devuelve un iterador para esa estructura de datos.Obtenemos...
class UnnesterIterator(object):    def __init__(self, nested_list):        self.it = iter(nested_list)        self.rlst = ...
Generadores      Son objetos iterables (funciones generalmente) que generan      valores sucesivamente en cada llamada.   ...
def fibonacci():    a = b = 1    while True:        yield a        a, b = b, a+b         Defossé Nahuel, Pecile Lautaro   ...
Decoradores      Podemos crear objetos que agregan una capa más de      funcionalidad a otras objetos, sin alterarlos sino...
def print_name(f):    def wrapper(*largs, **kwargs):        print "Entramos en ", f.__name__        f(*largs, **kwargs)   ...
Manejadores de Contexto      Un Manejador de Contexto (“context manager”) es      responsable por un recurso dentro de un ...
Manejadores de Contexto      La API manejador de contexto posee dos métodos. El método      __enter__() se ejecuta cuando ...
class Context(object):    def __init__(self):        print ’Creamos el contexto’    def __enter__(self):        print ’Ent...
Upcoming SlideShare
Loading in …5
×

Clase 4/4 Curso Introducción a Python 2012

784 views

Published on

Curso de Introducción a Python de la UNPSJB

  • Be the first to comment

Clase 4/4 Curso Introducción a Python 2012

  1. 1. Curso de Introducción a Python Clase 4 Defossé Nahuel, Pecile Lautaro UNPSJB Septiembre 2012Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  2. 2. Slices Podemos obtener una rebanada de cualquier secuencia iterable (cadenas, listas, tuplas, archivos...). El formato es secuencia[inicio:fin:salto]. El slice es una secuencia nueva y podemos modificarlo sin alterar el original. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  3. 3. Persistencia - Pickle Python posee varios módulos que proveen serialización y persistencia. Los clásicos son son pickle y shelve. Pickle permite serializar casi cualquier objeto, incluso los definidos por el usuario. Existe una versión implementada en C llamada cPickle que provee la misma funcionalidad e interfaces, pero con mucha más velocidad. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  4. 4. caballeros = {’gallahad’: ’el puro’, ’robin’: ’el valiente’}import pickle# guardamos los datosarchivo_caballeros = open(’caballeros.dat’, ’w’)pickle.dump(caballeros, archivo_caballeros)archivo_caballeros.close()caballeros = None# cargamos los datosarchivo_caballeros = open(’caballeros.dat’, ’r’)caballeros = pickle.load(archivo_caballeros)archivo_caballeros.close()print caballeros Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  5. 5. Persistencia - Shelve Problema: si guardamos más de un objeto en un archivo con Pickle, sólamente podemos accederlos de manera secuencial. Solución: Shelve provee una interfase de trabajo estilo diccionario, de manera que tenemos acceso por clave a los objetos serializados. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  6. 6. caballeros = {’gallahad’: ’el puro’, ’robin’: ’el valiente’}cosas = [’spam’, ’eggs’]pajaro = ’albatros’import shelvedatos = shelve.open(’datos.dat’)datos[’caballeros’] = caballerosdatos[’cosas’] = cosasdatos[’pajaro’] = pajarodatos.close()datos = shelve.open(’datos.dat’)print datos[’caballeros’] Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  7. 7. Iteradores Los iteradores son objetos que definen un protocolo para recorrer una secuencia. Un iterador debe poseer un método next() que es llamado automáticamente por Python para obtener el siguiente elemento de la secuencia. En caso de que no existan más elementos en la secuencia, el método debe elevar una excepción StopIteration. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  8. 8. Un objeto iterable debe poseer definido el método __iter__()que devuelve un iterador para esa estructura de datos.Obtenemos un iterable de una secuencia con la función builtiniter().El iterador no necesariamente es el mismo objeto que eliterable. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  9. 9. class UnnesterIterator(object): def __init__(self, nested_list): self.it = iter(nested_list) self.rlst = [] def __iter__(self): return self def append(self, obj): try: for el in obj: self.append(el) except TypeError: self.rlst.append(obj) def next(self): if not self.rlst: self.append(next(self.it)) return self.rlst.pop(0) Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  10. 10. Generadores Son objetos iterables (funciones generalmente) que generan valores sucesivamente en cada llamada. Su característica es el uso de la palabra reservada yield en lugar de return. Cuando un generador devuelve un valor, no finaliza como una función común sino que queda en un estado detenido, para continuar luego la ejecución en el punto en donde había quedado. Dos ventajas importantes de los generadores ante las secuencias comunes es el menor consumo de memoria, y la posibilidad de crear secuencias potencialmente infinitas. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  11. 11. def fibonacci(): a = b = 1 while True: yield a a, b = b, a+b Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  12. 12. Decoradores Podemos crear objetos que agregan una capa más de funcionalidad a otras objetos, sin alterarlos sino envolviéndolos o decorándolos. Este es el concepto detrás de los decoradores, que están basados en el patrón “Decorator” del GoF. Un decorador es un callable que envuelve a otro, alterando el comportamiento final. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  13. 13. def print_name(f): def wrapper(*largs, **kwargs): print "Entramos en ", f.__name__ f(*largs, **kwargs) return wrapper@print_namedef foo(): print "Hola mundo!" Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  14. 14. Manejadores de Contexto Un Manejador de Contexto (“context manager”) es responsable por un recurso dentro de un bloque de código, posiblemente creándolo cuando se entre al bloque, y liberándolo luego de que se abandona el bloque. Un manejador de contexto se habilita con la sentencia with. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  15. 15. Manejadores de Contexto La API manejador de contexto posee dos métodos. El método __enter__() se ejecuta cuando el flujo de ejecución entra en bloque de código, y retorna un objeto para ser usado en ese contexto. Cuando el flujo de ejecución deja el bloque with, el método __exit__() del manejador de contexto se llama para limpiar cualquier recurso usado. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  16. 16. class Context(object): def __init__(self): print ’Creamos el contexto’ def __enter__(self): print ’Entramos al contexto’ return self def __exit__(self, exc_type, exc_val, exc_tb): print ’Salimos del contexto’with Context(): print ’Estoy haciendo cosas en el contexto’ Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

×