python avanzado - parte 1

56
Avanzado Parte I Wednesday, January 30, 13

Upload: coto

Post on 22-Jun-2015

213 views

Category:

Technology


0 download

DESCRIPTION

Primera parte de una serie de Charlas de Python Avanzado.

TRANSCRIPT

Page 1: Python avanzado - parte 1

AvanzadoParte I

Wednesday, January 30, 13

Page 2: Python avanzado - parte 1

El Charlista

Wednesday, January 30, 13

Page 3: Python avanzado - parte 1

@cotoWednesday, January 30, 13

Page 4: Python avanzado - parte 1

@cotoWednesday, January 30, 13

Page 5: Python avanzado - parte 1

Mobile FrameworkJavaScript (2010)

Wednesday, January 30, 13

Page 6: Python avanzado - parte 1

Mobile FrameworkJavaScript (2010)

Wednesday, January 30, 13

Page 7: Python avanzado - parte 1

Wednesday, January 30, 13

Page 8: Python avanzado - parte 1

Wednesday, January 30, 13

Page 9: Python avanzado - parte 1

Wednesday, January 30, 13

Page 10: Python avanzado - parte 1

Wednesday, January 30, 13

Page 11: Python avanzado - parte 1

coto@cotos-pro ~02:15 > pythonPython 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 01:25:11) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>>

Wednesday, January 30, 13

Page 12: Python avanzado - parte 1

Iniciar Python

coto@cotos-pro ~02:15 > pythonPython 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 01:25:11) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>>

Wednesday, January 30, 13

Page 13: Python avanzado - parte 1

• Los programas se ejecutan hasta que se alcanza EOF

• Con Control-D o Control-Z en el símbolo de sistema

• o escribe:raise SystemExit

Wednesday, January 30, 13

Page 14: Python avanzado - parte 1

Terminar Python

• Los programas se ejecutan hasta que se alcanza EOF

• Con Control-D o Control-Z en el símbolo de sistema

• o escribe:raise SystemExit

Wednesday, January 30, 13

Page 15: Python avanzado - parte 1

#!/usr/bin/env pythonprint "Hello World"

Wednesday, January 30, 13

Page 16: Python avanzado - parte 1

El truco del #!#!/usr/bin/env pythonprint "Hello World"

Wednesday, January 30, 13

Page 17: Python avanzado - parte 1

El truco del #!#!/usr/bin/env pythonprint "Hello World"

> python archivo.py

Wednesday, January 30, 13

Page 18: Python avanzado - parte 1

El truco del #!#!/usr/bin/env pythonprint "Hello World"

Wednesday, January 30, 13

Page 19: Python avanzado - parte 1

El truco del #!#!/usr/bin/env pythonprint "Hello World"

> chmod +x archivo.py> ./archivo.py

Wednesday, January 30, 13

Page 20: Python avanzado - parte 1

>>> # suma... 3+58 >>> # resta... 3-4-1

>>> # multiplicacion... 2.0*36.0

Wednesday, January 30, 13

Page 21: Python avanzado - parte 1

Operadores>>> # suma... 3+58 >>> # resta... 3-4-1

>>> # multiplicacion... 2.0*36.0

Wednesday, January 30, 13

Page 22: Python avanzado - parte 1

>>> # division... 3/21.5

>>> # cociente... 3//21

>>> # resto... 3%21

Wednesday, January 30, 13

Page 23: Python avanzado - parte 1

Operadores>>> # division... 3/21.5

>>> # cociente... 3//21

>>> # resto... 3%21

Wednesday, January 30, 13

Page 24: Python avanzado - parte 1

>>> # potencia... 3**29

>>> # left shift... 5<<220

>>> # right shift... 5>>21

Wednesday, January 30, 13

Page 25: Python avanzado - parte 1

Operadores>>> # potencia... 3**29

>>> # left shift... 5<<220

>>> # right shift... 5>>21

Wednesday, January 30, 13

Page 26: Python avanzado - parte 1

>>> # el operador ternario ?:... ( 5 > 2 ) and “a” or “b”

Wednesday, January 30, 13

Page 27: Python avanzado - parte 1

Operadores

>>> # el operador ternario ?:... ( 5 > 2 ) and “a” or “b”

Wednesday, January 30, 13

Page 28: Python avanzado - parte 1

Operadores

>>> # el operador ternario ?:... ( 5 > 2 ) and “a” or “b”

“a”

Wednesday, January 30, 13

Page 29: Python avanzado - parte 1

Operadores

>>> # el operador ternario ?:... ( 5 > 2 ) and “a” or “b”

“a”

>>> "a" if ( 5 > 2 ) else "b"“a”

Wednesday, January 30, 13

Page 30: Python avanzado - parte 1

a = [2, 3, 4] # list de enterosb = [2, 7, 3.5, "Hello"] # lista mixtac = [] # lista vaciad = [2, [a,b]] # Lista con otra listae = a + b # Unir dos listas

Manipulando Listas

x = a[1] # Obtén el 2º elementoy = b[1:3] # Obtén una sublistaz = d[1][0][2] # Listas anidadasb[0] = 42 # Cambiar un elemento

Wednesday, January 30, 13

Page 31: Python avanzado - parte 1

Listasa = [2, 3, 4] # list de enterosb = [2, 7, 3.5, "Hello"] # lista mixtac = [] # lista vaciad = [2, [a,b]] # Lista con otra listae = a + b # Unir dos listas

Manipulando Listas

x = a[1] # Obtén el 2º elementoy = b[1:3] # Obtén una sublistaz = d[1][0][2] # Listas anidadasb[0] = 42 # Cambiar un elemento

Wednesday, January 30, 13

Page 32: Python avanzado - parte 1

f = (2,3,4,5) # tupla de enterosg = (,) # tupla vaciah = (2, [3,4], (10,11,12)) # tupla mixta

Manipulando Tuplas

x = f[1] # Obtén el 2º elementoy = f[1:3] # Obtén una porciónz = h[1][1] # Agrupamiento

Wednesday, January 30, 13

Page 33: Python avanzado - parte 1

Tuplasf = (2,3,4,5) # tupla de enterosg = (,) # tupla vaciah = (2, [3,4], (10,11,12)) # tupla mixta

Manipulando Tuplas

x = f[1] # Obtén el 2º elementoy = f[1:3] # Obtén una porciónz = h[1][1] # Agrupamiento

Wednesday, January 30, 13

Page 34: Python avanzado - parte 1

Tuplasf = (2,3,4,5) # tupla de enterosg = (,) # tupla vaciah = (2, [3,4], (10,11,12)) # tupla mixta

Manipulando Tuplas

x = f[1] # Obtén el 2º elementoy = f[1:3] # Obtén una porciónz = h[1][1] # Agrupamiento

• Las tuplas son como las listas, pero con tamaño definido.

• No se pueden reemplazar miembros.

Wednesday, January 30, 13

Page 35: Python avanzado - parte 1

a = { }b = { ’x’: 3, ’y’: 4 } c = { ’uid’: 105, ’login’: ’beazley’, ’name’ : ’David Beazley’ }

Acceso a diccionarios

u = c[’uid’] # Acceso a un elementoc[’shell’] = "/bin/sh" # Crear elemento“name” in c # Chequear elementoc.get(“name”, “no value”) # Chequear elemento

Wednesday, January 30, 13

Page 36: Python avanzado - parte 1

Diccionariosa = { }b = { ’x’: 3, ’y’: 4 } c = { ’uid’: 105, ’login’: ’beazley’, ’name’ : ’David Beazley’ }

Acceso a diccionarios

u = c[’uid’] # Acceso a un elementoc[’shell’] = "/bin/sh" # Crear elemento“name” in c # Chequear elementoc.get(“name”, “no value”) # Chequear elemento

Wednesday, January 30, 13

Page 37: Python avanzado - parte 1

lambda arguments: expression

def name(arguments): return expression

> f = lambda x, y : x + y> f(1,1)2

Wednesday, January 30, 13

Page 38: Python avanzado - parte 1

Lambdas y Func. Prog.

lambda arguments: expression

def name(arguments): return expression

> f = lambda x, y : x + y> f(1,1)2

Wednesday, January 30, 13

Page 39: Python avanzado - parte 1

> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]> print map(lambda x: x * 2 + 10, foo)...[14, 46, 28, 54, 44, 58, 26, 34, 64]

> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>> print filter(lambda x: x % 3 == 0, foo)...[18, 9, 24, 12, 27]

> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>> print reduce(lambda x, y: x + y, foo)...139

Wednesday, January 30, 13

Page 40: Python avanzado - parte 1

Lambdas y Func. Prog.> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]> print map(lambda x: x * 2 + 10, foo)...[14, 46, 28, 54, 44, 58, 26, 34, 64]

> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>> print filter(lambda x: x % 3 == 0, foo)...[18, 9, 24, 12, 27]

> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>> print reduce(lambda x, y: x + y, foo)...139

Wednesday, January 30, 13

Page 41: Python avanzado - parte 1

#!/usr/bin/env pythondef makebold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped

def makeitalic(fn): def wrapped(): return "<i>" + fn() + "</i>" return wrapped

@makebold@makeitalicdef hello(): return "hello world"

print hello() ## returns <b><i>hello world</i></b>

Wednesday, January 30, 13

Page 42: Python avanzado - parte 1

Decorators#!/usr/bin/env pythondef makebold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped

def makeitalic(fn): def wrapped(): return "<i>" + fn() + "</i>" return wrapped

@makebold@makeitalicdef hello(): return "hello world"

print hello() ## returns <b><i>hello world</i></b>

Wednesday, January 30, 13

Page 43: Python avanzado - parte 1

class Account: def __init__(self, initial): self.balance = initial def deposit(self, amt): self.balance = self.balance + amt def withdraw(self,amt): self.balance = self.balance - amt def getbalance(self): return self.balance

Wednesday, January 30, 13

Page 44: Python avanzado - parte 1

Classesclass Account: def __init__(self, initial): self.balance = initial def deposit(self, amt): self.balance = self.balance + amt def withdraw(self,amt): self.balance = self.balance - amt def getbalance(self): return self.balance

Wednesday, January 30, 13

Page 45: Python avanzado - parte 1

a = Account(1000.00)a.deposit(550.23)a.deposit(100)a.withdraw(50)print a.getbalance()

Wednesday, January 30, 13

Page 46: Python avanzado - parte 1

Classes

a = Account(1000.00)a.deposit(550.23)a.deposit(100)a.withdraw(50)print a.getbalance()

Wednesday, January 30, 13

Page 47: Python avanzado - parte 1

Classes

a = Account(1000.00)a.deposit(550.23)a.deposit(100)a.withdraw(50)print a.getbalance()

Wednesday, January 30, 13

Page 48: Python avanzado - parte 1

class Electricity(object):! """Describe the electricity""" def __init__(self): # the self variable represents the instance of the object itself. # Constructor for instances, it will overwrite Class attributes # when it is called self._private = 'inside' self._voltage = 220  @property def voltage(self): return self._voltage  @voltage.setter def voltage(self, value): self._voltage = value/2  _private = 'outside' _another_private = 'boo' @voltage.deleter def voltage(self): del self._voltage  @staticmethod def metodo_estatico(val1, val2): return "Hello %s and %s" % (val1, val2)  @classmethod def metodo_class(cls, val2): return "Hello %s and %s" % (cls, val2)

Wednesday, January 30, 13

Page 49: Python avanzado - parte 1

Classesclass Electricity(object):! """Describe the electricity""" def __init__(self): # the self variable represents the instance of the object itself. # Constructor for instances, it will overwrite Class attributes # when it is called self._private = 'inside' self._voltage = 220  @property def voltage(self): return self._voltage  @voltage.setter def voltage(self, value): self._voltage = value/2  _private = 'outside' _another_private = 'boo' @voltage.deleter def voltage(self): del self._voltage  @staticmethod def metodo_estatico(val1, val2): return "Hello %s and %s" % (val1, val2)  @classmethod def metodo_class(cls, val2): return "Hello %s and %s" % (cls, val2)

Wednesday, January 30, 13

Page 50: Python avanzado - parte 1

try: f = open("foo")except IOError, e: print "Couldn’t open ’foo’. Error: {}".format(e)

try: f = open("foo")except Exception: print "Couldn’t open ’foo’. Sorry."

Wednesday, January 30, 13

Page 51: Python avanzado - parte 1

Exceptionstry: f = open("foo")except IOError, e: print "Couldn’t open ’foo’. Error: {}".format(e)

try: f = open("foo")except Exception: print "Couldn’t open ’foo’. Sorry."

Wednesday, January 30, 13

Page 52: Python avanzado - parte 1

import rer = re.compile(r’(\d+)\.(\d*)’)m = r.match("42.37")a = m.group(0) # Returns ’42.37’b = m.group(1) # Returns ’42’c = m.group(2) # Returns ’37’print m.start(2) # Prints 3

Wednesday, January 30, 13

Page 53: Python avanzado - parte 1

Expresiones Regulares

import rer = re.compile(r’(\d+)\.(\d*)’)m = r.match("42.37")a = m.group(0) # Returns ’42.37’b = m.group(1) # Returns ’42’c = m.group(2) # Returns ’37’print m.start(2) # Prints 3

Wednesday, January 30, 13

Page 54: Python avanzado - parte 1

• Seguridad en Python

• Interfaces de Sistema Operativo

• Trabajando con Threads

• Programando en Red

• Interfaces de Base de Datos

• Ejecución restringida

• Extensiones en C

Wednesday, January 30, 13

Page 55: Python avanzado - parte 1

Próximamente...

• Seguridad en Python

• Interfaces de Sistema Operativo

• Trabajando con Threads

• Programando en Red

• Interfaces de Base de Datos

• Ejecución restringida

• Extensiones en C

Wednesday, January 30, 13

Page 56: Python avanzado - parte 1

Gracias!!

@cotoWednesday, January 30, 13