Python ES
Python ES
Ondiz Zarraga
6 de octubre de 2015
Resumen
1
Copyright (C) 2015 Ondiz Zarraga <ondiz.zarraga@gmail.com>, Ekaitz Zarraga Ro <ekaitz-
zarraga@gmail.com>
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.3 or any later version published by the
Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-
Cover Texts. You should have received a copy of the GNU Free Documentation License
along with this material. If not, see http://www.gnu.org/licenses/.
2
Indice
1. Sobre el lenguaje 1
2. Tipos de variables 2
2.1. Numeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.1. Enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.2. Reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.3. Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.4. Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.5. Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Sintaxis 4
3.1. Condiciones: if - elif - else . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2.1. Bucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2.2. Bucles while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2.3. Bucles do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4. Metodos interesantes 7
5. Ficheros 8
6. Funciones 9
6.1. Argumentos por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2. Recepcion de argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.3. Funciones anonimas o lambdas . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.4. Ayuda de las funciones (docstring) . . . . . . . . . . . . . . . . . . . . . . . 10
7. Modulos 11
8. OOP 12
8.1. Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.2. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.3. Metodos de sobrecarga de operadores . . . . . . . . . . . . . . . . . . . . . . 12
9. Manejo de errores 14
i
1. Sobre el lenguaje
Interpretado
Indentacion obligatoria
Distingue mayusculas - minusculas
No hay declaracion de variables (dynamic typing)
Orientado a objetos
Garbage colector: quita los objetos a los que no haga referencia nada
Comentarios #
Imprimir en pantalla print a,b (si no se quiere salto de lnea coma al final). Para
darle formato (igual que C):
Float: %dgitos.dgitos f variable
String: % s variable
Notacion cientfica: %dgitos.dgitos E variable
print %s letra %s (a,b) escribe a letra b. Identifica los % con los elementos del
tuple.
Nombres de variables:
Solo pueden empezar por o letra, luego cualquier caracter
Diferencia mayusculas y minusculas (case sensitive)
No puede ser igual que palabra reservada: and, del, fo, is, raise, asser, elif,
from, lambda, return, break, else, global, not, try, class, except, if, or while,
continue, exec, import, pass, yield, def, finally, in, print
En lnea de comandos, la variable guarda el valor de la ultima operacion
1
2. Tipos de variables
2.1. Numeros
2.1.1. Enteros
2.1.2. Reales
2.1.3. Booleans
Se definen los enteros 0 y 1 como True y False pero SIGUEN SIENDO enteros
Cualquier objeto diferente de 0 o que no este vaco es True. Cualquier objeto igual
a 0 o vaco es False
Operadores booleanos: < / > devuelven 0/1; and y or devuelven objeto1 (el primero
que sea True), short circuit
2.2. Strings
2.3. Listas
Para ignorar las teclas de escape en las direcciones: open(r C:...), (la r ignora las teclas de escape) o
C:\\.. (doble barra)
2
3
Se pueden anidar listas para definir matrices: M=[[...,...],[...,...]] TRUCO: Para
coger columnas: col = [row[no columna] for row in M]
Se pueden convertir strings en listas con lista = list(string)
Metodos utiles: lista.append (elemento a anadir) anade elemento4 (mas en 4) (!)
Anade UN elemento: en el caso lista.append([1,2,3]) el elemento n+1 de lista sera la
lista [1,2,3]. Para que anada los elementos de una lista a otra lista: lista.extend([lista])
o lista1 + lista2 (maravillas del overload :D); extend es mas rapido porque solo mo-
difica una lista, no crea una nueva.
Memoria: si se hace B = A, ambos hacen referencia al mismo objeto, si se cambia
uno cambia los dos 5 . Para que esto no ocurra B = A[:] (hacen referencia a distinto
lugar de la memoria)
Para prealquilar memoria: L = [None] * 100 # lista de 100 variables
Filtrado de listas: lista filtrada= [elem for elem in lista inicial if condicion] Si la
condicion es verdadera para un elemento, se incluye dicho elemento en la lista filtrada.
2.4. Tuples
2.5. Diccionarios
3
3. Sintaxis
Despues de if / for / def / ... :
Final de lnea = final de expresion. Para dividir una sentencia en varias lneas:
\. Las siguientes lneas se pueden indentar de manera. (Las expresiones entre
corchetes/llaves/parentesis tambien pueden ocupar varias lneas sin \)
6
Final de indentacion = final de bloque
Sintaxis:
if condicion:
expresion1
expresion2
elif condicion:
expresion alternativa1
else:
expresion alternativa2
Si solo tiene una condicion puede hacerse en una unica lnea: if condicion: expresion
No hay case, se usan diccionarios
Sintaxis alternativa: A = Y if X else Z 7 equivale a:
if X:
A=Y
else:
A=Z
3.2. Bucles
Sintaxis:
for contador in objeto :
expresiones
else:
expresiones
Se puede iterar en strings, listas, tuples ...
Se le pueden poner break s y continues (ver 3.2.2)
6 Cualquier indentacion es valida mientras sea coherente en todo el bloque
7Y ? X : Z de C y Java
4
Se puede vectorizar en lugar de usar bucles for para ganar velocidad. Ejemplo:
1. cuadrados = [x**2 for x in [1, 2, 3, 4]] (puede anidarse un if )
2. cuadrados = [] # lista vaca
for x in [1,2,3,4]:
cuadrados.append(x**2)
Sintaxis:
while condicion:
expresion1
expresion2
3.3. Operadores
Suma + , funciona como suma para el caso de los numeros y como concatenacion
para los strings y listas (L = [1,2] L = L +[3] L = [1,2,3])
Multiplicacion * , multiplicacion entre numeros y repeticion para listas y strings.
Ej: Spam*3 SpamSpamSpam
Division /, division entera entre int (truncando 8 ) y division entre cualquier
combinacion float - int.
8 Para que divida normal entre dos enteros .0 o hacer un cast
5
Modulo %, el resto en una division entera
Exponente **
Slice objeto[desde donde:paso: hasta donde]. No coge el ultimo elemento. Si el
ultimo numero es negativo va hacia atras. 9
Cast: convertir un tipo de objetos en otro. En entero: int(dato). En real: float(dato).
En string: str(dato). En lista: list(tuple). En tuple: tuple(lista).
Operador in: if x in y. Devuelve True si x pertenece a y. Ejemplos:
m in Spam True
Para leer un fichero: for line in open(file.txt):
Para iterar en un diccionario: for key in D.keys(): o for key in D :
6
4. Metodos interesantes
range(inicio, fin, paso) devuelve una lista. Puede usarse en bucles for : for i in
range(3): # para repetir 3 veces
len(lista) devuelve la longitud de una lista
sorted(lista) ordena y devuelve lista ordenda
sum(lista) suma los elementos
any(lista) True si hay algun elemento no vaco
all(lista) True si TODOS no vacos
zip(lista1, lista2) junta el primer elemento de lista1 y el de lista2 en un tuple, el
segundo con el segundo etc. Por ejemplo:
lista1 = [1,2,3,4]
lista2 = [5,6,7,8]
zip(lista1, lista2) # queda [(1,5),(2,6),(3,7),(4,8)]
Funciona con listas y strings
Vale para hacer diccionarios
Para accion paralela: for (x,y) in zip(lista1, lista2)
enumerate(lista) [(no ,valor),(no ,valor),...], enumera todos los elementos de una lista
filter(secuencia) aplica una condicion a una secuencia y devuelve los objetos para
los que es True
map(funcion, secuencia) aplica una funcion a una secuencia de objetos. Ej:
def inc(x): return x + 10
map(inc,counters) # suma 10 a todos los elementos de counters
is a is b, para ver si dos objetos son el mismo. Si dos objetos son el mismo y son
mutables, cambios en uno afectan a ambos.
execfile(script.py) ejecuta el script (si esta en el Current Directory)
7
5. Ficheros
Para escribir:
f = open(nombre.txt,w) # modo escribir
f.write(texto)
f.close() # se crea el fichero
Para leer: (se lee como string)
f = open(nombre.txt)
string = f.read()
Dos opciones:
string # muestra el contenido
print string # muestra el contenido con formato
Para convertir cosas de un fichero en objetos Python, ejemplos:
1. Strings:
F = open(file.txt)
line = F.readline() # lee lnea
line.rstrip() # quita \n
2. Numeros: 44,44,45 \n
F = open(file.txt)
line = F.readline() # lee lnea
parts = line.split10 (,) # parte por la coma, quedara [43,44,45\n]
numbers = [int(P)] for P in parts # convierte a numero
3. Codigo: [1,2,3]${a:1, b:2 }\n F = open(file.txt)
line = F.readline() # lee lnea
parts = line.split($) # parte por $
eval(parts[0]) # convierte a cualquier tipo de objeto (trata como codigo) #
objects = [eval(P) for P in parts] para coger todo. Queda [[1,2,3],a:1,b:2]
4. Pickle: Para el caso que eval() no sea fiable, se puede usar el modulo pickle:
F = open(file.txt,w)
import picle
pickle.dump(D,F) # coge cualquier objeto de la fila
F.close()
10 string.split(caracter) convierte string en lista de palabras cortando por el caracter indicado. Para
8
6. Funciones
Definicion de funciones:
def nombre(arg1, arg2,...) # definicion
expresiones
return valor1, valor2 # devuelve el valor
Las funciones son codigo ejecutable, pueden definirse dentro un if/for/while... (son
objetos)
Las variables dentro de una funcion solo son visibles dentro de la propia funcion.
Los argumentos inmutables se pasan por valor y los objetos con puntero
Se pueden asignar valores a los argumentos en la propia llamada: func(a=3)
Memoization: guardar valores conocidos de una funcion en un diccionario para aho-
rrar tiempo de calculo
Se pueden incluir valores por defecto en la definicion de una funcion, por ejemplo: def
func(a,b=2,c=3). El primero requerido, si no se da el valor de los demas se utilizan los por
defecto. Si se mete solo a b y c por defecto; con a y b c por defecto; con a,b y c
ninguno por defecto.
Sintaxis:
lambda arg1, arg2,...,argN
expresion que usa los argumentos
Se pueden asignar a un objeto: f = lambda x,y,z : x + y + z
f(2,3,4)
9
6.4. Ayuda de las funciones (docstring)
10
7. Modulos
Dos modos para importar:
1. import modulo
2. from modulo import* (para importar todo el modulo) o from modulo import
funcion.
La diferencia entre las dos es que para (2) se llama a las funciones por su nombre, sin
especificar el modulo al que pertenecen; no distingue entre funciones con el mismo
nombre, llama a la ultima importada (los metodos y atributos del metodo importado
se situan en el espacio de nombres local). para el caso (1), en cambio, se llama a las
funciones como: modulo.funcion() 11
Los modulos se crean igual que los scripts, solo que en lugar de llamarlos hay que
importarlos (segun (1) o (2), sin .py)
Si se cambia un modulo hay que volverlo a cargar: reload(modulo)
Modulos utiles:
Math: funciones matematicas ( math.pi())
Cmath: modulo para funciones complejas (a.conjugate(), a.real(), a.imag() ...)
Random: numeros aleatorios reales o enteros, elegir de lista ...(no random
random.random())
Debugger: pdb
Numpy: modulo para tratar matrices eficientemente: array([[1,2],[3,4]])(aqu la
coma entre las dos listas representa salto de fila). Hay que instalarlo
Scipy: para funciones cientficas. Hay que instalarlo.
Pychecker: para ver errores. Importarlo antes del modulo que se quiere veri-
ficar:
from pychecker import checker
import modulo
Timeit: para medir tiempos: timeit.timeit(funcion)
cProfile: para medir cuellos de botella. Ejecutarlo en el main despues de im-
portarlo: cProfile.run(main())
Matplotlib: paquete para dibujar graficos. Hay que descargarlo.
Si un modulo tiene funciones y codigo y solo se quieren importar las funciones y que
no ejecute el codigo: if name = main despues de la definicion de clase/metodos.
As solo se ejecuta lo del programa principal.
11 Se aconseja solo importar un modulo con from modulo import* en cada sesion para no tener problemas
11
8. OOP
Ver tipo de objeto: type(objeto)
Ver los atributos de un objeto: dir(objeto). Con dir( builtins ) se ven las funciones
y atributos que hay antes de importar ningun modulo.
Ver los metodos aplicables a un objeto objeto. methods
Ver lo que hace un metodo: help(objeto.metodo)
8.1. Clases
8.2. Herencia
class Hijo(Padre)
La subclase coge los metodos de la superclase
Si se vuelve a escribir un metodo en la subclase, overload
Admite herencia multiple: Hijo(Padre1,Padre2,...)
Relaciones posibles entre clases:
HAS-A: referencia a otros objetos
IS-A: herencia
DEPENDS-ON: cambios en una clase provocan cambios en otras
12
Metodo or , / OR
Metodo str , para imprimir ( Java)
Metodo call , llamada a funciones, X()
Metodo getattr , x.atributo
Metodo setattr , x.atributo = valor
Metodo getitem , para indexar, x[key]
Metodo setitem , asignar valor a una posicion, x[key] = valor
Metodo len , longitud
Metodo cmp , comparacion, == / <>
Metodo lt , <
Metodo eq , ==
Metodo radd , suma por la derecha
Metodo iadd , x+
Metodo iter , iteraciones (bucles for, vectorizacion con in, map)
13
9. Manejo de errores
14