Post on 13-Jun-2015
description
Curso de Python
Washington Bastidas Santos
Ing. en Sistemas – Técnico SIG
CNEL EP
Python Interpretado
Tipado dinámico Fuertemente tipado
Multiplataforma Orientado a objetos
Interpretado
Código intermedio generando archivos .pyc
No permite tratar a una variable como si fuera de un tipo distinto al que tiene
Fuertemente Tipado
Multiplataforma
Paradigmas de Programación
Imperativa
Orientado a Objetos
Funcional
Orientada a aspectos
Creador
• Guido van Rossum • Benevolent
Dictator for Life de Python
• Creo el lenguaje de programación mientras pasaba la Navidad.
Por qué
Python?
Por que Python?
• Usado por grandes compañías.
• Fácil de aprender y mantener.
• Excelente para principiantes y expertos.
• Libre y Open Source.
• Una gran cantidad de librerías.
• Una gran comunidad.
• Integrado con ArcGIS.
IDE
• Un buen IDE debe de tener como mínimo:
• Un editor con autocompletado de código.
• Plantillas de código. • Resaltar la sintaxis. • Explorador de código
para funciones y clases. • Herramientas para
debugging y test unitarios.
Eclipse + PyDev
IDLE
Tipo de Datos, Variables y Funciones
Variables
• Python usa asignación dinámica de las variables.
• Valor definido por el tipo.
• No puede comenzar con dígitos ni se debe usar palabras claves.
• La varible null en python es none.
Tipos de Datos - Números
• Integer (Enteros)
– Int
– Long (23L)
• Float (decimales)
– Float (0,3)
– Double
• import math para operaciones matemáticas NOTA: Si se quiere una operación con decimales, al menos uno de los 2
elementos debe de tener un número decimal o poner un número entre la función float()
Tipos de Datos - String
"Es una colección ordenada de caracteres"
• En python comillas simples o dobles son lo mismo. • caracteres especiales (\n, \t). • Puede ser precedidas por U(Unicode) y r(Raw). • Operación + para concatenar • Función str() para convertir a string un elemento.
Substring corchetes: fruit[1:3] "an"
Tipo de Datos - Booleano
• True o False
• Usado en expresiones condicionales y bucles.
Operador Descripción Ejemplo
and ¿se cumple a y b? r = True and False # r es False
or ¿se cumple a o b? r = True or False # r es True
not No a r = not True # r es False
Operador Descripción Ejemplo
== ¿son iguales a y b? r = 5 == 3 # r es False
!= ¿son distintos a y b? r = 5 != 3 # r es True
< ¿es a menor que b? r = 5 < 3 # r es False
> ¿es a mayor que b? r = 5 > 3 # r es True
<= ¿es a menor o igual que b? r = 5 <= 5 # r es True
>= ¿es a mayor o igual que b? r = 5 >= 3 # r es True
Operadores Lógicos
Elementos de comparación
Tipos de Datos - Listas • La lista es un tipo de colección ordenada. • La lista esta rodeada por corchetes [], y están separados
por comas (,). – miLista = [1, 2, 4, 8, 16, 32]
• Entre los métodos para manipula la lista estan: – sort() , ordena los elementos – append() , agrega el elemento que esta dentro del
paréntesis. – extend(), concatenar lista, ej. miLista ([10,20, 32])
• Para acceder a una lista se puede poner el índice de la ubicación del elemento (miLista[1] = 2) o recorrer la lista mediante un for (for l in miLista)
[L2.append(x) for x in miLista if x not in L2]
Tipos de Datos - Tuplas
Tuplas
• Contiene una secuencia de valores que se definen con ().
• No posee mecanismos de modificación.
• Inmutables.
• Menor consumo de memoria.
• Se accede mediante corchete [] y poniendo la posición del elemento.
Diccionarios • Colecciones con clave y valor.
Se define con llaves {}. d = {"Love Actually": "Richard Curtis", "Kill Bill": "Tarantino"}
• Se implementan con diccionarios Hash.
• Solo se accede mediante la clave del elementos.
• Mutable • Para iterar por los elementos
se puede utilizar for k, v in d.iteritems()
Funciones
• len() : se obtiene la cantidad de elementos en listas, tuplas o colecciones.
Diccionario • d.has_key(k): comprobas si
existe la clave k en la lista d. • d.items(): Se obtiene una
lista de tuplas con clave-valor
• d.keys(): Devuelve una lista de claves de d.
• d.values(): devuelve una lista de valores de d.
Lista • l.append(o): agrega el
elemento o en la lista. • l.count(v): devuelve el
numero de veces que se repite v.
• l.index(v): devuelve la índice del valor a buscar.
Condiciones
• Sentencia if / elif / else
• Controla si la condición es cierta.
• elif se utiliza cuando se tiene condiciones múltiples.
if x == 1:
print ‘x es 1’
elif x == 2:
print ‘x es 2’
else:
print ‘x es desconocido’
var = "par" if (num % 2 == 0)
else "impar"
Lazos
• La lazo while repite una acción hasta que la condición sea verdadera.
• Un lazo for repite un bloque de código para cada elemento de una secuencia.
• Se puede utilizar para un conjunto de números la función range(3), comienza de 0 y termina en 3.
• La palabra clave break rompe los lazos y continue continua con la siguiente iteración.
i = 0
while i <= 10:
print i
i += 1
dictLayers = {"Camino":"Linea",
"Parque":"Poligono"}
lstLayers = dictLayers.keys()
for x in lstLayers:
print dictLayers[x]
for x in range(3):
print x
Lectura de Línea / Archivo
Leer por consola
• Para poder leer alguna sentencia ingresada por el usuario del programa podemos usar la siguiente sentencia:
dato = print
raw_input("¿Cual
es tu nombre?")
Archivo • Para leer archivos se necesita
importar el modulo os así como utilizar los siguientes comandos: – f = open("text","r"),leer
archivo , existen 3 modos de lectura r (leer) w (escribir) y a (agregar)
– linea = f.readlines(), lee todas las líneas del archivo, se itera con for.
– f.write(texto) escribe texto en el archivo
– f.close() cierra el archivo.
Manejo de Errores
• Cuando un error ocurre python dispara una excepción.
• Con la palabra raise puedes invocar una excepción.
• Se controlan mediante try – except – (finally).
• Para saber en que linea esta el error utilizamos la siguiente sentencia
import sys
#Dentro de la excepcion
tb = sys.exc_info()[2]
print tb.tb_lineno
try:
if arcpy.CheckExtension("3D") ==
"Disponible":
arcpy.CheckOutExtension("3D")
else:
#Envía una excepción
personalizada.
raise ErrorLicencia
# Hacer algo con la licencia
print "Disponible"
except ErrorLicencia:
print "Licencia no disponible"
except Exception as e:
print e.message
finally:
#Check in the 3D Analyst extension
arcpy.CheckInExtension("3D")
Programación Funcional
• Programación se basa en funciones, esto según su definición matemática, no es una simple rutina.
• Funciones de orden superior, pasar funciones como parámetro y retorno.
• Interación de orden superior sobre listas
def ejecutar(tipo):
def linea_comando():
print "Por Linea Comando"
def pantalla():
print "Por Pantalla"
def servicio_web():
print "Por Web Service"
lang_func = {"lc":
linea_comando,"pt": pantalla,
"WS": servicio_web}
ejecutar[tipo]
f = ejecutar("pt")
f()
Programación Funcional - Lambda
• Permite crear funciones anónimas, las cuales no podrán ser referenciadas más tarde.
• Las funciones lambda se construyen mediante el operador lambda, los parámetros de la función separados por comas, SIN paréntesis, dos puntos (:) y el código de la función.
l = [1, 2, 3]
l2 = filter(lambda n: n % 2.0 == 0, l)
Map: La función map aplica una función a cada elemento de una secuencia l2 = [n ** 2 for n in l]
Filter: Verifica que los elementos de la secuencia cumplan una condición, devuelve los true. l2 = [n for n in l if n % 2.0 == 0]
Compresión de lista l = [0, 1, 2, 3]
m = ["a", "b"]
n = [s * v for s in m
for v in l
if v > 0]
Expresiones Regulares
Secuencias especiales
\A Inicio del texto.
\b limites de una palabra entre \w y \W
\d número
\D no numérico
\s espacios en blanco [ \t\n\r\f\v]
\S no espacios en blancos.
\w Alfanuméricos.
\W No alfanuméricos.
\Z fin del texto
Caracteres especiales \ escape de caracteres especiales. . Busca cualquier carácter menos \n. ^ Busca al inicio del texto. $ Busca al final del texto. [5b-d] encuentre cualquier carácter que este en el rango'5', 'b', 'c' or 'd‘ R|S encuentre R o S [^a-c] no busca a ni b ni c. Cantidades * 0 o más (agregar ? para que no sea codicioso) + 1 o más ? 0 o 1 {m} exactamente m veces. (…) grupo
Expresiones Regulares
• Es una secuencia de caracteres que forma un patrón de búsqueda, Wikipedia.
• Se utiliza el modulo re. • Ejemplo de expresión : match = re.search(pat, str) • buscar patrones, dividir grupos y reemplazo de caracteres. #Buscar una palabra que comience con p, j o c continúe con ython y termine con una secuencia de 0 a 9
re.match(“[pjc]ython[0-9]”, “python2”) #Encontrado
#Buscar una palabra que comience con http y encuentre un punto, crear un nuevo grupo con una palabra que sea de 3 digitos
mo = re.match(“http://(.+)\(.{3})”, “http://eluniverso.com”)
print mo.groups()
(‘eluniverso.com’, ‘com’) #Resultado
match = re.search(r'\w+@\w+', str)
Lista de extras
Fotos: • Slide 2: http://kidfocused.com/mom-wakes-to-python-wrapped-around-toddler/
• Slide 4: http://samdelacruz.blogspot.com/2007/06/object-oriented-analysis-and-design.htm
• Silde 7: http://es.wikipedia.org/wiki/Guido_van_Rossum#mediaviewer/Archivo:Guido_van_Rossum_OSCON_2006.jpg
• Slide 8: http://www.careerhubblog.com/.a/6a00d834516a5769e20168e7e2eb2a970c-pi