En menos de 5 minutos*
* (a.k.a. descarado resumen de Wikipedia)
Guido Van Rossum, creador de Python, circa 2006 (ahora está
más viejo y gordo, además de trabajar en Dropbox)
Entre otros...
La serpiente y tú
Actualmente, se mantienen dos versiones mayores del lenguaje: Py2 y Py3K.
Y, aunque no son (muy) compatibles entre sí, la versión 2 tiene el suelo más amplio y será la que usaremos para este curso.
Los scripts de Python son ejecutados a través de un intérprete.
$ python miscript.py
También podemos ordenar directamente al intérprete a través de un REPL.
$ python
Aprendiendo a tomar a la serpiente.
# Enteros (int):
entero = 123
# Largos (long):
largo = 1234567890L
# Flotantes (float):
flotante = 12.34
flotante_cientifico = 0.1e-3
# ¡Complejos! (complex):
complejo = 1 + 2.34j
# Dato: Puedes representar números en octal empezándolos en 0:
veintitres = 027
# O en hexadecimal con el prefijo 0x
quince = 0xf
Operador | Descripción |
---|---|
+ | Suma |
- | Resta |
* | Multiplicación |
** | Potenciación |
/ | División |
// | División Entera |
% | Residuo (módulo) |
Operador | Descripción |
---|---|
& | AND |
| | OR |
^ | XOR |
~ | NOT |
<< | Despl. Izquierda |
>> | Despl. Derecha |
% | Residuo (módulo) |
# Normales
cadena_normal = 'holita'
# Unicode
cadena_unicode = u'Hólítá óöøµ©'
# Raw
cadena_raw = r'\a %b \n'
# Comillas triples
cadena_comillas = u"""Puedo tener
varias líneas sin ningún
problema"""
El uso de comillas dobles o simples responde a gusto de quien escribe, aunque por convención, se prefieren las simples (salvo para las triples).
cadena = 'holita'
# Concatenación
cadena + ' mundo' # -> 'holita mundo'
# Multitplicación (!!!)
cadena * 3 # -> 'holitaholitaholita'
# Formateo (formato de printf de C)
'%s mundo' % cadena # -> 'holita mundo'
# Los únicos valores booleanos son:
verdadero = True
falso = False
Operador | Descripción |
---|---|
and | AND |
or | OR |
not | NOT |
== | Igualdad |
!= | Diferencia |
Operador | Descripción |
---|---|
> | Mayor |
< | Menor |
>= | Mayor Igual |
<= | Menor Igual |
# Listas (list)
lista = [1, 'dos', [3.14, 4 + 5j], True]
# Tuplas (tuple)
tupla = (1, 'dos', [3.14, 4 + 5j], True)
# Conjuntos (set)
conjunto = {1, 'dos', True}
lista = [1, 2, 3, 4, 5, 6, 7, 8]
tupla = (1, 2, 3)
# Concatenación
lista + [9, 10] # -> [1, 2, ..., 9, 10]
# Adición
lista.append(9) # -> [1, 2, ..., 9]
#Acceso
lista[4] # -> 5
lista[-2] # -> 7
# Partición
lista[3:5] # -> [4, 5]
lista[2:] # -> [3, 4, ...]
lista[:5] # -> [1, 2, 3, 4, 5]
lista[1:6:2] # -> [2, 4, 6]
# Eliminación
del lista[0] # -> [2, 3, ...]
# Tuplas y listas pueden hacer lo mismo
# ¿La diferencia? ¡Las tuplas son inmutables!
del tupla[0] # -> TypeError
# Pares de clave/valor (dict):
diccionario = {
'uno': 1,
'dos': [2, 2.0],
'tres': 'three'
}
# Acceso
diccionario['tres'] # -> 'three'
diccionario.get('tres') # -> 'three'
# Añadir elementos
diccionario['cuatro'] = 4
# Quitar elementos
del diccionario['uno']
# Condicional clásica
if verdadero:
pass # No hacer nada
else:
pass # Tampoco hacer nada
# Anidada
if falso:
# Hacer algo...
elif verdadero:
# Hacer otra cosa...
else:
# Si todo lo demás falla...
# Inline (!!)
paridad = 'par' if numero % 2 == 0 else 'impar'
# While clásico
contador = 0
while contador < 10:
contador += 1
if contador == 7:
break
# For in
suma = 0
iterable = [1, 2, 3, 4, 5]
for numero in iterable:
suma += numero
try:
num = int('3a')
print no_existe
except (NameError, ValueError):
print 'Ocurrio un error'
else:
print 'Todo bien'
finally:
print 'Algo se me olvidaba...'
# Definición clásica de una función
def sumar(primero, segundo):
"""
Este es un docstring, todas las funciones
deberían de tener uno.
"""
resultado = primero + segundo
return resultado
sumar(3, 2) # -> 5
# Un argumento precedido por un asterisco
# denota N valores, y se trata como una lista.
def suma_indefinido(*numeros):
suma = 0
for numero in numeros:
suma += numero
return suma
suma_indefinido(1, 2, 3, 4) # -> 10
# Un argumento precedido por dos asteriscos
# denota N valores con nombre, y se trata como
# un diccionario.
def suma_nombrado(**kwargs):
resultado = kwargs['primero'] + kwargs['segundo']
return resultado
suma_nombrado(primero=3, segundo=2) # -> 5
Función | Descripción |
---|---|
abs() | Valor Absoluto |
all() | True si todos los elementos del iterable evalúan a True |
any() | True si algún elemento del iterable evalúa a True |
chr(i) | El caracter ASCII de número i |
dir(obj) | La lista de atributos de obj |
filter(f, i) | Devuelve el iterable i tal que cada elemento evalúe a True al aplicársele la función f |
getattr(obj, nombre) | El atributo 'nombre' de obj |
help(obj) | Muestra la definición y el docstring de obj |
hasattr(obj, nombre) | True si obj tiene el atributo 'nombre' |
min(i) | El elemento menor de un iterable |
Función | Descripción |
---|---|
open(nombre, modo) | Abre el archivo 'nombre' con el modo 'modo' |
ord(c) | Retorna el número ASCII o Unicode de c |
print(obj) | Muestra obj en la salida estándar |
range(f) range(i, f) |
Genera un iterable con números en el rango [i, f> |
raw_input(p) | Recoge la entrada del usuario en consola, mostrando el prompt p |
reversed(i) | Devuelve un iterador de orden inverso para el iterable i |
round(n, d) | El número n, redondeado a d dígitos. |
setattr(obj, nombre, valor) | Lo inverso a getattr() :P |
sorted(i) | Devuelve el iterable i ordenado |
type(obj) | El tipo de dato de obj |
class Carro:
"""Abstraccion de los objetos carro."""
def __init__(self, gasolina):
self.gasolina = gasolina
print 'Tenemos', gasolina, 'litros'
def arrancar(self):
if self.gasolina > 0:
print 'Arranca'
else:
print 'No arranca'
def conducir(self):
if self.gasolina > 0:
self.gasolina -= 1
print 'Quedan', self.gasolina, 'litros'
else:
print 'No se mueve'
__init__ es un Método Mágico
bmw = Carro(3) # -> 'Tenemos 3 litros'
Método | Descripción |
---|---|
__init__(self, args) | Se llama después de haber creado el objeto. |
__new__(cls, args) | Se llama al construir el objeto (a nivel de la clase). |
__del__(self) | Destructor del objeto. |
__str__(self) | Crea una cadena de texto que representa al objeto |
__len__(self) | Informa de la longitud del objeto |
Algunos Métodos Mágicos:
class Instrumento:
def __init__(self, precio):
self.precio = precio
def tocar(self):
print 'Estamos tocando musica'
def romper(self):
print 'Eso lo pagas tu'
print 'Son', self.precio, '$$$'
class Bateria(Instrumento):
pass
class Guitarra(Instrumento):
pass
class Terrestre:
def desplazar(self):
print 'El animal anda'
class Acuatico:
def desplazar(self):
print 'El animal nada'
class Cocodrilo(Terrestre, Acuatico):
pass
c = Cocodrilo()
c.desplazar() # -> El animal anda
class Bateria(Instrumento):
def tocar(self):
print 'badum tss'
class Guitarra(Instrumento):
def tocar(self):
print 'waa waa'
bata = Bateria(100)
bata.tocar() # -> 'badum tss'
fender = Guitarra(50)
fender.tocar() # -> 'waa waa'
class Ejemplo:
def publico(self):
print 'Publico'
def __privado(self):
print 'Privado'
ej = Ejemplo()
ej.publico() # -> Publico
ej.__privado() # -> AttributeError (!)
Método | Descripción |
---|---|
get(k, d=None) | Extrae el elemento de llave k o devuelve d |
has_key(k) | Comprueba si k está presente como llave |
items() | Devuelve una lista de tuplas con los pares llave/valor |
keys() | Devuelve una lista con las llaves únicamente |
pop(k, d) | Devuelve (y elimina) el elemento de llave k. Si no está presente, devuelve d |
Diccionarios
Método | Descripción |
---|---|
count(sub, start, end) | La cantidad de veces que sub aparece desde start hasta end |
find(sub, start, end) |
La posición en la que aparece sub por primera vez desde start hasta end |
join(i) | Una cadena de todos los elementos de i separados por la cadena |
replace(o, n, v) | Reemplaza o por n hasta v veces en la cadena |
split(s, max) | Un iterable de la cadena partida por s hasta max veces |
Cadenas
Método | Descripción |
---|---|
append(e) | Añade al final de la lista |
count(v) | El número de veces que v aparece |
index(v, start, stop) | La primera ocurrencia de v en start hasta stop |
pop(i) | Devuelve el elemento i y lo elimina |
reverse() | Invierte la lista, modificándola |
sort() | Ordena la lista, modificándola |
Listas
def saludar(lang):
def saludar_es():
print 'Hola'
def saludar_en():
print 'Hi'
def saludar_fr():
print 'Salut'
lang_func = {
'es': saludar_es,
'en': saludar_en,
'fr': saludar_fr
}
return lang_func[lang]
f = saludar('es')
f()
def cuadrado(n):
return n ** 2
l = [1, 2, 3]
cuadrados = map(cuadrado, l)
def es_par(n):
return (n % 2.0 == 0)
l = [1, 2, 3]
pares = filter(es_par, l)
l = [1, 2, 3]
pares = filter(lambda n: n % 2.0 == 0, l)
cuadrados = map(lambda x: x ** 2, l)
l = [1, 2, 3]
cuadrados = [n ** 2 for n in l]
cuadrados_gen = (n ** 2 for n in l)
pares = [n for n in l if n % 2.0 == 0]
def mi_decorador(funcion):
def nueva(*args):
print 'Llamada a la funcion'
retorno = funcion(*args)
return retorno
return nueva
@mi_decorador
def imprime(cadena):
print cadena
imprime('cadena')