Python
Programacin moderna y eficiente
Juan Hernndez [email protected] 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 [email protected] Twitter: @vladjanicek Blog: boicottoracle.com Columna: Vida Pitnica, Latinux Magazine