Está en la página 1de 46

Python

Programacin moderna y eficiente

Juan Hernndez juan@equiponinja.com Twitter: @vladjanicek Blog: boicottoracle.com Columna: Vida Pitnica, Latinux Magazine

Esquema del taller

Mostrar contenido bsico y avanzado

Si algo te parece muy avanzado, enfocate en lo bsico y dominalo Si algo te parece muy bsico, espera un poco a que lleguemos a los temas mas avanzados Las discusiones hacen las charlas y talleres mas interesantes y as aprendemos todos mucho ms Conforme vayan viendo ejemplos, ejecutenlos en la maquina, detengamos la clase, expliquemos las cosas, etc

Por favor, interrumpanme a cada momento

Seamos interactivos

Python

Lenguaje creado por Guido Van Rossum Es un lenguaje de alto nivel, intepretado/compilado Se enfoca en tener una sintaxis muy limpia Multiparadigma Es de tipado dinmico Fuertemente tipado Multiplataforma Incluye bateras ;)

Python

Python fue creado en el Instituto Nacional de Investigaciones Matemticas y de Ciencias Informticas de Holanda para ser un sucesor del lenguaje ABC Guido es el Benevolente Dictador Vitalicio (BDFL) Python tiene varias implementaciones en distintas plataformas de lenguajes

Jython IronPython PyPy

Python

Al ser multiparadigma, no se obliga al programador a adoptar un estilo particular Python trata todo como un objeto Python puede ser empleado en

Programacin estructurada Programacin Orientada a Objetos Programacin Funcional

Python y la filosofa SL

Diseado para su fcil extensin Al ser un proyecto libre, toma y entrega caracteristicas de/para otros lenguajes y plataformas

Perl: regex Java: logging Lisp: lambda(), reduce(), map(), filter()

Zen de Python

Hermoso es mejor que feo. Explcito es mejor que implcito. Simple es mejor que complejo. Complejo es mejor que complicado. etc etc etc

Lo podemos ver en el interprete al ejecutar


importthis

Obtener Python

Incluido en practicamente todas las distribuciones Linux de escritorio y servidor Incluido en MacOS X En windows, lo descargamos de python.org

Existen dos ramas, la 2.* y la 3.*

El el taller usaremos la rama 2.*

Intrprete y el Modo Interactivo

Python incluye un modo interactivo donde podemos ejecutar cualquier sentencia

Abrimos una terminal y solo ejecutamos python

Las instrucciones recibirn su resultado de forma inmediata

Esto resulta til tanto para las personas que se estn familiarizando con el lenguaje como tambin para los programadores ms avanzados

El Lenguaje y su sintaxis

Los bloques de cdigo estn definidos por los dos puntos :


def mifuncion(x): print hola curso, x

Utiliza espacios para definir el cdigo perteneciente a un bloque

Espacios o Tabuladores y su consistencia es obligatoria If x is not y: print X no es Y

Es una sintxis limpia, clara y muy especfica

Operadores Bsicos

+ Suma y concatenacin de cadenas de caracteres - Resta y nmeros negativos * Multiplicacion ** Exponente / Divisin % Modulus

Tipos de datos

String/Unicode Lista Tupla (tuple) Diccionario Enteros (Int) Long Float Booleans

Bateras Incluidas??

raw_input() len() max() in

Ej: 'ton' in 'Python' evaluar False

Formatos de Strings

%s = Strings %d = Nmeros
ej: Se llama %s y tiene %d hijos %('Pedro', 2)

Mtodos de Strings

split() join() find() strip() lower()/upper() replace() ljust() center()

Mtodos de Strings

rjust() swapcase() Isalpha() endswith()

Listas y Tuplas

Listas son mutables, las tuplas no Para declarar listas, se usan corchetes Para declarar tuplas, se usan parntesis Tanto las listas como las tuplas, pueden tener elementos diversos Las listas se utilizan generalmente para grupos de elementos variables en cantidad Las tuplas se utilizan para grupos de elementos estticos o de cantidad fija

Mtodos de Listas

append() insert() remove() pop() reverse() sort() sorted() extend()

Indices Python y Slicing

Caracterstica muy poderosa de manejo de cadenas, listas y tuplas Permite una precisin nica, slo obtenible en otros lenguajes empleando mucho cdigo Permite anidar sobre sentencias previamente anidadas de forma ilimitada Se realiza con indices positivos y negativos entre corchetes Para obtener un pedazo (slice) de mas de un caracter, se utilizan los dos puntos :

Indices Python y Slicing


>>>x='Estaesmicadenadecaracteres' >>>x[0] 'E' >>>x[1] 's' >>>x[1] 's' >>>x[2] 'e' >>>x[0:4] 'Esta' >>>x[10:] 'cadenadecaracteres'

Indices Python y Slicing


>>>x=['abc','def'] >>>x[0] 'abc' >>>x[1] 'def' >>>x[0][1] 'b' >>>x[0][0:2] 'ab'

Diccionarios

Conocidos tambien como matrices/arrays asociativos

Son componentes basados en llave:valor

Son modificables y pueden tener cualquier tipo de valor Son declarados con llaves {}

Ej: xdict = {'mistring': 'python', 'miint': 12345}

Diccionarios

get() update() pop() clear() items() fromkeys()

Ej: for k, v in x.items(): print k, v

bucles/loops for...in

En Python podemos recorrer objetos iterables con for


>>>a=[0,1,'HOLA','Python'] >>>foriina: printi 0 1 HOLA Python

bucles/loops for...in

Lo que en sintaxis C/C++/C#/Java/PHP sera... for(inti=0;i<4;i=i+1){ print(i); }

bucles/loops for...in

Para iterar sobre un diccionario necesitamos la funcion items() fork,vinx.items(): printk,v

bucles/loops for...in

Otro comando muy util y pitnico es enumarate >>>a=[0,1,'Hola','python'] >>>fori,jinenumerate(a): printi,j 00 11 2Hola 3python

def...return

Las funciones y los mtodos en Python se definen con la palabra def Para retornar un objeto, utilizamos la palabra return deff(a): returna

def...return

Los argumentos pueden tener valores predeterminados deff(a,b=2): returna+b

def...return

Tambin podemos retornar mltiples objetos y obtenerlos de forma independiente deff(a,b=2): returna+b,ab x,y=f(5)

def...return

Las funciones tambin pueden tener un numero indeterminado de argumentos def a(*a, **b): return a, b

if...elif...else

Estructura de control basado en evaluaciones condicionales foriinrange(3): ifi==0: print'cero' elifi==1: print'uno' else: print'esotro'

Programacin orientada a objetos


classLibreta(): """ MiDocstringdescriptivo """ version=1.0 def__init__(self,nombre,tel): self.nombre=nombre self.telefono=tel defget_telefono(self): returnself.telefono defset_telefono(self,nuevo): self.telefono=nuevo

Programacin orientada a objetos

Instanciando un objeto:
>>>l=Libreta('JuanHernandez','04166666666')

Ejecutando sus mtodos


>>>l.get_telefono() .'04166666666' >>>l.set_telefono('0424111111') >>>l.get_telefono() .'0424111111'

Extendiendo Python: for

En Python generalmente definimos las iteraciones for como un bloque de cdigo A diferencia de los dems lenguajes, Python no necesita la creacin de un contador para poder navegar sobre un objeto iterable Python nos ofrece una manera an mas sencilla, pitnica y efectiva para la creacion dinmica de secuencias: for dentro de listas o list comprehensions

List Comprehensions
l=[1,2,3,4,5]#Creamoslalista [xforxinl]#Iteramos [x*2forxinl]#Operacin

List Comprehensions

Evaluemos si un nmero en una sequencia es par


>>>[xforxinrange(1,20)ifx%2is0] [2,4,6,8,10,12,14,16,18]

Evaluemos si es impar
>>>[xforxinrange(1,20)ifx%2isnot0] [1,3,5,7,9,11,13,15,17,19]

List Comprehensions

Podemos inclusive dar un poco mas de complejidad usando funciones def f(x): if x % 2 is 0: y = True else: y = False return y

List Comprehensions

Una vez tengamos la funcion f() definida, podremos utilizarla como evaluacin
>>>[xforxinxrange(1,20)iff(x)] [2,4,6,8,10,12,14,16,18]

List Comprehensions

Podemos tener varias condiciones en la ejecucion del for Supongamos que ahora queremos obtener los numeros impares y adems necesitamos saber cuales de esos nmeros, tienen raices cuadradas exactas

import math

Mdulo de mtodos matemticos en Python

List Comprehensions

Definimos la funcion que evalua las raices cuadradas y nos dice si estas son exactas o no con math.sqrt(x) y el mtodo float is_integer() defexacta(x): y=math.sqrt(x) ify.is_integer(): z=True else: z=False returnz

List Comprehensions

[xforxinxrange(1,100)ifnotf(x)andexacta(x)] [1,9,25,49,81]

List Comprehensions

Como vemos, podemos definir en una sla lnea, parmetros condicionales que en otros lenguajes nos tomara en muchos casos, hasta decenas de lneas El propsito real es retornar una lista con los valores evaluados Podemos tener N nmero de condicionales y al basarnos en que en python, todo es un objeto, evaluar con practicamente cualquier objeto

Extendiendo el desarrollo

Marcos de desarrollo web (Frameworks)

django web2py GAE PyGTK y GTK3 QT Windows Quartz/Cocoa

Bibliotecas Grficas

Extendiendo el desarrollo

Bases de datos

SQLAlchemy Eclipse Netbeans PyCharm WingIDE

IDEs

Python
Programacin moderna y eficiente

Juan Hernndez juan@equiponinja.com Twitter: @vladjanicek Blog: boicottoracle.com Columna: Vida Pitnica, Latinux Magazine