Moisés Gabriel Cachay Tello
Creator, destructor.
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):
passclass 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 andaclass 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')By Moisés Gabriel Cachay Tello
A presentation for an Spanish Intro Python Course. Indended for people with previous programming experience.