SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
Curso de Introducción a Python
                           Clase 4


         Defossé Nahuel, Pecile Lautaro

                           UNPSJB


                    Septiembre 2012




Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
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
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
caballeros = {’gallahad’: ’el puro’,
                 ’robin’: ’el valiente’}
import pickle
# guardamos los datos
archivo_caballeros = open(’caballeros.dat’, ’w’)
pickle.dump(caballeros, archivo_caballeros)
archivo_caballeros.close()
caballeros = None
# cargamos los datos
archivo_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
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
caballeros = {’gallahad’: ’el puro’,
                ’robin’: ’el valiente’}
cosas = [’spam’, ’eggs’]
pajaro = ’albatros’
import shelve
datos = shelve.open(’datos.dat’)
datos[’caballeros’] = caballeros
datos[’cosas’] = cosas
datos[’pajaro’] = pajaro
datos.close()
datos = shelve.open(’datos.dat’)
print datos[’caballeros’]




         Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
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
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 builtin
iter().
El iterador no necesariamente es el mismo objeto que el
iterable.




      Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
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
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
def fibonacci():
    a = b = 1
    while True:
        yield a
        a, b = b, a+b




         Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
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
def print_name(f):
    def wrapper(*largs, **kwargs):
        print "Entramos en ", f.__name__
        f(*largs, **kwargs)
    return wrapper

@print_name
def foo():
    print "Hola mundo!"




         Defossé Nahuel, Pecile Lautaro   Curso de Introducción a Python
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
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
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

Más contenido relacionado

La actualidad más candente

Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a Objetos
Pablo Sepulveda P.
 
Sesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en PythonSesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en Python
maluacsa
 
Intro Python
Intro PythonIntro Python
Intro Python
MoreLab
 

La actualidad más candente (20)

Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a Objetos
 
01 el lenguaje Python
01 el lenguaje Python01 el lenguaje Python
01 el lenguaje Python
 
Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Python (Lenguaje de Programación)
Python (Lenguaje de Programación)
 
Sesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en PythonSesión 2: Ejemplos y prácticas en Python
Sesión 2: Ejemplos y prácticas en Python
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
Python básico I
Python básico IPython básico I
Python básico I
 
Intro Python
Intro PythonIntro Python
Intro Python
 
Cap%c3%8 dtulo+1+programacion+orientada+a+objetos
Cap%c3%8 dtulo+1+programacion+orientada+a+objetosCap%c3%8 dtulo+1+programacion+orientada+a+objetos
Cap%c3%8 dtulo+1+programacion+orientada+a+objetos
 
Python 4
Python 4Python 4
Python 4
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Argentina Programa Apendix parte 3.pdf
Argentina Programa Apendix parte 3.pdfArgentina Programa Apendix parte 3.pdf
Argentina Programa Apendix parte 3.pdf
 
Argentina Programa Apendix parte 2.pdf
Argentina Programa Apendix parte 2.pdfArgentina Programa Apendix parte 2.pdf
Argentina Programa Apendix parte 2.pdf
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Python i
Python iPython i
Python i
 
Argentina Programa Apendix parte 1.pdf
Argentina Programa Apendix parte 1.pdfArgentina Programa Apendix parte 1.pdf
Argentina Programa Apendix parte 1.pdf
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Taller I Coreis Python 10112009
Taller I Coreis Python 10112009Taller I Coreis Python 10112009
Taller I Coreis Python 10112009
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)
 
Python
PythonPython
Python
 

Similar a Clase 4/4 Curso Introducción a Python 2012

Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
GaloGabriel
 

Similar a Clase 4/4 Curso Introducción a Python 2012 (20)

Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para Visuse
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
 
Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014
 
02 introduccion a python
02 introduccion a python02 introduccion a python
02 introduccion a python
 
Investigacion de Python.pptx
Investigacion de Python.pptxInvestigacion de Python.pptx
Investigacion de Python.pptx
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
Curso python
Curso pythonCurso python
Curso python
 
Software para el aprendizaje de la programación EC 2. Presentación 3: Python
 Software para el aprendizaje de la programación EC 2. Presentación 3: Python Software para el aprendizaje de la programación EC 2. Presentación 3: Python
Software para el aprendizaje de la programación EC 2. Presentación 3: Python
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
S6-Contenedores
S6-ContenedoresS6-Contenedores
S6-Contenedores
 
INTRODUCCIÓN A LA PROGRAMACIÓN - PYTHON.pptx
INTRODUCCIÓN A LA PROGRAMACIÓN - PYTHON.pptxINTRODUCCIÓN A LA PROGRAMACIÓN - PYTHON.pptx
INTRODUCCIÓN A LA PROGRAMACIÓN - PYTHON.pptx
 
S6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores EspecialesS6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores Especiales
 
Trabajo de desarrollo de software(java)yanina y yenny
Trabajo de desarrollo de software(java)yanina y yennyTrabajo de desarrollo de software(java)yanina y yenny
Trabajo de desarrollo de software(java)yanina y yenny
 
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesUsando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
 
Lenguaje de programación java. Detalles
Lenguaje de programación java. DetallesLenguaje de programación java. Detalles
Lenguaje de programación java. Detalles
 
introducción a herencia programación orientada a objetos
introducción a herencia programación orientada a objetosintroducción a herencia programación orientada a objetos
introducción a herencia programación orientada a objetos
 
Clase 4 JAVA 2012
Clase 4 JAVA 2012Clase 4 JAVA 2012
Clase 4 JAVA 2012
 
Clase 4 java 2011
Clase 4 java 2011Clase 4 java 2011
Clase 4 java 2011
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 

Clase 4/4 Curso Introducción a Python 2012

  • 1. Curso de Introducción a Python Clase 4 Defossé Nahuel, Pecile Lautaro UNPSJB Septiembre 2012 Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 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. 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. caballeros = {’gallahad’: ’el puro’, ’robin’: ’el valiente’} import pickle # guardamos los datos archivo_caballeros = open(’caballeros.dat’, ’w’) pickle.dump(caballeros, archivo_caballeros) archivo_caballeros.close() caballeros = None # cargamos los datos archivo_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. 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. caballeros = {’gallahad’: ’el puro’, ’robin’: ’el valiente’} cosas = [’spam’, ’eggs’] pajaro = ’albatros’ import shelve datos = shelve.open(’datos.dat’) datos[’caballeros’] = caballeros datos[’cosas’] = cosas datos[’pajaro’] = pajaro datos.close() datos = shelve.open(’datos.dat’) print datos[’caballeros’] Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 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. 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 builtin iter(). El iterador no necesariamente es el mismo objeto que el iterable. Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 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. 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. 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. 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. def print_name(f): def wrapper(*largs, **kwargs): print "Entramos en ", f.__name__ f(*largs, **kwargs) return wrapper @print_name def foo(): print "Hola mundo!" Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
  • 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. 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. 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