Вы находитесь на странице: 1из 49

Actualizaciones de pytho 2.X a 3.

X
<>
long
987L
raw_input
exec open (file)
print x, y

!=
int
987
input
exec(open(filename).read())
print(x, y)

Lo que puedes hacer con python


Python es comnmente aplicado en ms dominios que pueda cubrir aqu. Por
ejemplo,
encontrar herramientas que le permiten utilizar Python para hacer:
programacin de juegos y multimedia con pygame, cgkit, Pyglet, PySoy,
Panda3D, y otros
comunicacin del puerto serie en Windows, Linux, y ms con la extensin
PySerial
El procesamiento de imgenes con PIL y su ms reciente tenedor Almohada,
PyOpenGL, Blender, Maya, y ms
programacin de control del robot con el kit de herramientas Pyro
anlisis del lenguaje natural con el paquete NLTK
Instrumentacin en los tablones de Frambuesa Pi y Arduino
La informtica mvil con puertos de Python para el Google Android y Apple iOS
plataformas
Funcin de hoja de clculo de Excel y la programacin de macros con el PyXLL o
DataNitro
complementos
Contenido de archivo de los medios de comunicacin y procesamiento de
etiqueta de metadatos con PyMedia, ID3, PIL / Almohada, y ms
La inteligencia artificial con la biblioteca de red neuronal PyBrain y la mquina de
leche
kit de herramientas de aprendizaje
programacin del sistema experto con PyCLIPS, Pyke, Pyrolog, y pyDatalog
Supervisin de la red con zenoss, escrito en Python y personalizada con
El diseo de Python-guin y el modelado con PythonCAD, PythonOCC, FreeCAD, y
otros
Elaboracin de documentos y la generacin con ReportLab, Sphinx, guepardo,
PyPDF, y as
La visualizacin de datos con Mayavi, matplotlib, VTK, VPython y ms
anlisis XML con el paquete XML biblioteca, el mdulo xmlrpclib, y el tercero
extensiones
JSON y procesamiento de archivos CSV con los mdulos de JSON y csv

Palabras reservadas en python


False None True and as assert break class continue def del elif else
except finally for from global if import in is lambda nonlocal not or pass
raise return try while with yield
from keyword import iskeyword, kwlist
print(kwlist)
#imprime todas las palabras claves
print(iskeyword("is"))
#evalua si una palabra es reservada

as
Su funcin es dual. Puede utilizarse al momento de importar un determinado
objeto de un mdulo, para asignar un nombre diferente
from keyword import kwlist as keyword_list, iskeyword
Adems, se utiliza la siguiente sintaxis para asignar informacin de una excepcin
a un determinado objeto.
try:
sin_definir
except NameError as e:
print(e)

exec
Permite ejecutar cdigo Python a partir de una cadena o archivo.
exec("a=25\nprint(\"how old are you?\")")
print(a)
Otro ejemplo seria ejecutar un archivo de python.
exec(open('archivo_python.py').read())

global
Permite modificar el valor de un objeto global desde un mbito con menor alcance
(una funcin, por ejemplo).
a= 5
def impreso():
global b, a
a,b=10,100
impreso()
print(a,b)
Otro ejemplo con global
def tester(start):
global state # Move it out to the module to change it
state = start # global allows changes in module scope
def nested(label):
global state
print(label, state)
state += 1
return nested
F=tester(0)
F("spam") #spam 0

in
Determina la existencia de un determinado valor dentro de una lista, tupla,
diccionario o cualquier objeto iterable.
2 in (1, 2, 3) #True

is

Determina si dos objetos son iguales, a diferencia de los signos de equivalencia


(==), que determinan si ambos tienen el mismo valor.
objetoA is objetoB #False or True
Siempre debe ser usado al comparer con None

nonlocal
Permite modificar el valor de un objeto que ha sido creado en un mbito anterior.
def a():
i=1
def b():
nonlocal i
i=2
b()
print(i)
a()
#salida 2

with
Permite encapsular la ejecucin de un bloque de cdigo, de modo que la
inicializacin y finalizacin de un objeto es realizada automticamente por Python,
utilizando las funciones __enter__ y __exit__
with open("info.txt"):
raise Exception

yield
Se comporta al igual que return, con la diferencia que en lugar de retornar un
nico valor, retorna elementos que conforman un generador (un objeto iterable
que puede recorrerse una vez, ya que el contenido no es almacenado en la
memoria), por lo que puede emplearse mltiples veces en una misma funcin.
def f():
yield 1
yield 2
yield 3
g = f()
for i in g:
print(i)

Algunas libreras
.random
.math
.tkinter

Metodo type

import types # types has names for other types


def f(): pass
type(f) == types.FunctionType
print(type(f))
Existen varias implementaciones distintas de Python: CPython, Jython, IronPython,
PyPy, etc. CPython es la ms utilizada, la ms rpida y la ms madura. Cuando la
gente habla de Python normalmente se refiere a esta implementacin. En este
caso tanto el intrprete como los mdulos estn escritos en C. Jython es la
implementacin en Java de Python, mientras que IronPython es su contrapartida
en C# (.NET)
print(_variable)
: imprimir
print(_variable1, variable2, ., variablen) : concatena las variable con un
espacio adicional
input()
: lectura de dato
#
: comentario
type(_variable)
: devuelve el tipo de dato
len(_collection)
:devuelve la longitud de la collecion, una cadena tambin
es una colleccion
round(_numero, redondeo)
: redondea una expresin
range(_numero)
: rango de numero de 0 a _numero
range(_num1, _num2, _avance)
: avanza desde el num1 hasta el num2
del _array[index] : quita un tem por su ndice, tambin variables

Operadores aritmticos:
+: suma resta
*
:multiplicacionsubl
**
: elevado a
/
:division
//
:divisin entera
%
:modulo
and : operador and
or
: operador or
not
: operador de negacion
=
: asignacin
==
: igualdad
!=
:diferente
><
:mayor, menor que
>= <=
:mayor menor o igual que
a,b = 5, 6
print(a)
print(b)
a, b, c, d = 'spam'
n, *m = 'spam'

#a= 5
#b=6
#s p a m
#s ['p', 'a', 'm']

En el modo interactivo, la ltima expresin impresa es asignada a la variable _.


Esto significa que cuando ests usando Python como una calculadora de escritorio,
es ms fcil seguir calculando.

>>> impuesto = 12.5 / 100


>>> precio = 100.50
>>> precio * impuesto
12.5625
>>> precio + _
113.0625

Variables:
str
int
float
bool
None

:
:
:
:
:

cadena de caracteres
entero
flotantes
True or False
palabra reserved es como decir nullable

Operadores con cadena:

: comilla triple (las dobles o sinolas simples) representa una forma mas
rapida de hacer tabulaciones saltos de lines

: comilla normal
\t
: tabuladores
\n
: salto de lnea
_cadena * 4 = cadenacadenacadenacadena
_cad + _cad = cadcad
len("greater") # Is equivalent to "greater".__len__()
"great" + "er" # Is equivalent to "great".__add__("er")
"e" in "great" # Is equivalent to "great".__contains__("e")
The various strip() methods are commonly used when reading and cleaning up
data for later processing. For example, you can use them to get rid of whitespace,
remove quotations, and other tasks
t = '-----hello====='
print(t.strip('=-'))
print(t.lstrip('-'))
print(t.rstrip('='))
Aplicando formato
'{:f}, {:.2f}, {:06.2f}'.format(3.14159, 3.14159, 3.14159)
3.14, 003.14'
Funciones
.replace
.startswith
.find
.split
.isdigit
.lower
.isdecimal
.islanum

con las cadenas


:reemplaza una parte de la cadena por otra
:True si la cadena empieza con
:ubica una determinada cadena
:convierte cadena en una lista
:verrifica si la cadena es numero
:convierte en cadena en minusculas
:verifica si es decimal
:verifica s es alfanumrico

#'3.141590,

.islower
.isspace
.istitle
.isprintable
.iszfill
.swapcase

:verifica si esta en minscula

El mdulo re provee herramientas de expresiones regulares para un


procesamiento avanzado de cadenas.
import re
print(re.findall(r'\bt[a-z]*', 'tres felices tigres comen trigo')) #['tres', 'tigres',
'trigo']
The string methods split and join extract a list of words from a string and glue a
list of words together to form a string, respectively:
"Python is cool".split()
# Returns [Python, is, cool]
" ".join(["Python", "is", "cool"]) # Returns Python is cool

Funciones matematicas
.pow
.abs
.round
.bin
.sum
.min
.max
.factorial

: potencia
:valor absoluto
:redondeo
:binario
:suma
:extrae el minimo
:extrae el maximo
:evalua el factorial

print(sum([3, 2, 4, 1, 5, 0]))
nums = [1, 2, 3, 4, 5]
s = sum([x * x for x in nums])
print(s)
print(any(['spam', '', 'ni']))
print(all(['spam', '', 'ni']))
print(max([3, 2, 5, 1, 4]))
print(min([3, 2, 5, 1, 4]))
from decimal import Decimal :para trabajar con nmeros decimales
a = Decimal(2.12)
import decimal
a = decimal.Decimal(2.34)

Random
import random as ran
val = [110,15,18,19,24,56]
print(ran.choice(val))

#selecciona un item

print(ran.sample(val,3)) #seleccion multiples items


print(ran.randint(50,100))
#seleccinoa un numero en un intervalo
print(ran.random())
#selcciona un numero en punto flotante de
0a1
print(ran.getrandbits(200))
#selecciona un nuero de acuerdo al tamao

Fracciones matemticas
from fractions import Fraction
x = Fraction(1, 3) # Numerator, denominator
y = Fraction(4, 6)
print(x+y)
Mtodo copy
import copy
a= [1,2,3,4]
b= copy.copy(a)
c=copy.deepcopy(a)
print(a== b)

Time and DateTime


from datetime import datetime, timedelta
a = timedelta(days=2, hours = 6)
b= datetime.today() - datetime(2015,12,31)
b += timedelta(days = 1)
#TypeError: 'months' is an invalid keyword
argument for this function
print(b.days)
print(a.seconds)

Localtime
from time import localtime
d = localtime()
a = d.tm_year,d.tm_mon,d.tm_mday
print(a)

COLECCIONES
a = Array(10)
__init__(capacity, fillValue = None)
len(a)
__len__()
str(a)
__str__()
for item in a:
__iter__()
a[index]
__getitem__(index)
a[index] = newItem
__setitem__(index, newItem)

Listas
lis = [1,3,5,"rosas", "tenemos","algo especial", ["manzana", "peras"]]

for a in lis:
print(a)
print(lis[3]) = rosas
print(lis[6][1])
=peras
lis[0]=True :modificando el element de la lista
Nota: los ndices negativos en listas son validos y funcionan de derecha
a izquierda
Lis[-1][1] = peras
Mecanismo en listas
print(lis[:3]) : 1 3 5
lis[2:4] = [4,5,6] : modificando la lista
lis[:] = []
:vaciamos una lista
b = a[:]
: sacamos una copia por rebanado de toda la lista, estrop uede servir
para trabajar el mismo areglo cuando lo estamos recorriendo
a= ["abc", "frg", "gato"]
for x in a[:]:
if len(x)> 3:
a.insert(0,x)

Tuplas:

tuple()

Las tuplas funcionan igual que las listas, con la diferencia que usa las comas y/o
parntesis y no corchete al inicializarlas. Las tuplas son inmutables (no podemos
modificar sus valores una vez creada)
t= 2,"hola", True
t= (2,"hola", True)
Si solo se va usar un elemento en la tupla hay que agregar una coma al final del
elemento ya que puede llevar a errores
t=(hola) : str
t=hola,
:tuple
Las tuplas tambien pueden anidarse
t = 12345, 54321, 'hola!'
u = t, (1, 2, 3, 4, 5)
#anidacion detuplas
print(u)

Conjuntos
Un conjunto es una coleccin no ordenada y sin elementos repetidos. Los
conjuntos tambin soportan operaciones matemticas como la unin, interseccin,
diferencia, y diferencia simtrica.
canasta = ['manzana', 'naranja', 'manzana', 'pera', 'naranja', 'banana']
fruta = set(canasta) # crea un conjunto sin repetidos
# veamos las operaciones para las letras nicas de dos palabras
a = set('abracadabra')
b = set('alacazam')

print(a) # letras nicas en a set(['a', 'r', 'b', 'c', 'd'])


a
a
a
a

-b
|b
&b
^b

#
#
#
#

letras
letras
letras
letras

en
en
en
en

a
a
a
a

pero no en b set(['r', 'b', 'd'])


o en b set(['a', 'c', 'b', 'd', 'm', 'l', 'r', 'z'])
y en b set(['a', 'c'])
o b pero no en ambos set(['b', 'd', 'm', 'l', 'r', 'z'])

operadores de set
.add
.union
.intersection
.issubset
L1, L2 = [1, 3, 5, 2, 4], [2, 5, 3, 4, 1]
print(L1 == L2)
# False
print(set(L1) == set(L2))
#True

Diccionarios
El primer valor se trata de la clave y el segundo del valor asociado a la clave.
Como clave podemos utilizar cualquier valor inmutable: podramos usar nmeros,
cadenas, booleanos, tuplas, pero no listas o diccionarios, dado que son mutables.
Solo podenmos aceder por su clave. Sin embargo en este caso no se puede utilizar
slicing, entre otras cosas porque los diccionarios no son secuencias, si no
mappings (mapeados, asociaciones)
colegio = {"Faustino":"Edgar Pizango", "Dos de Mayo":"Ruth Zabaleta", 2:1234,
True:"Glorinda"}
print(colegio[Faustino])

Tecnicas de iteracin
Cuando iteramos sobre diccionarios, se pueden obtener al mismo tiempo la clave y
su valor correspondiente usando el mtodo iteritems().
caballeros = {'gallahad': 'el puro', 'robin': 'el valiente'}
for k, v in caballeros.iteritems():
print(k, ":",v)
Cuando se itera sobre una secuencia, se puede obtener el ndice de posicin junto
a su valor correspondiente usando la funcin enumerate().
for a, b in enumerate(range(10)):
print(a,";", b)
Otro ejemplo
item = ["a","b", "c"]
for i, v in enumerate(item, 5): #inicio del ndice, solo toma como valor
print(i, v)
data = [ (1, 2), (3, 4), (5, 6), (7, 8) ]

for n, (x, y) in enumerate(data): cuando tenemos u conjunto de arreglos


print(n, x, y)
Para iterar sobre dos o ms secuencias al mismo tiempo, los valores pueden
emparejarse con la funcin zip().
preguntas = ['nombre', 'objetivo', 'color favorito', 'edad']
respuestas = ['lancelot', 'el santo grial', 'azul']
for p, r in zip(preguntas, respuestas):
print('Cual es tu {0}? {1}.'.format(p, r))
Si nuestro arreglos son dentados o no tienen la misma cantidad de registros
usamos zip_longest
from itertools import zip_longest
preguntas = ['nombre', 'objetivo', 'color favorito', 'edad']
respuestas = ['lancelot', 'el santo grial', 'azul']
for p, r in zip_longest(preguntas, respuestas, fillvalue = 0):
opcional pero es de ayuda
print('Cual es tu {0}? {1}.'.format(p, r))

#fillvalues es

Pero para poder recorrer una lista despus de la otra lo haramos con el modulo
chain. Un uso comn de chain es en los programas en los que quiera llevar a
cabo cierta las operaciones en todos los elementos a la vez , pero los artculos se
agrupan en diferentes conjuntos de trabajo.
from itertools import chain
for x in chain(preguntas, respuestas):
print(x)
Si queremos recorrer un conjunto de conjunto de tems dentro de una lista
tendramos que crear un mtodo para ello.
items = [1, 2, [3, 4, [5, 6], 7], 8]
from collections import Iterable
items = [1, 2, [3, 4, [5, 6], 7], 8]
def flatten(items, ignore_types = (str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x
for x in flatten(items):
print(x)
Pero que es yield from es un buen atajo esto se describe de la siguiente forma.
yield from flatten(x)
es quivalente a este otro
for i in flatten(x):
yield i

Si tenemos dos listas ordenadas y queremos fusionarlas y que eel resutlado me


obtenga otra lista ordenada, usamos hepq
import heapq
a = [3, 4, 7, 10]
b = [2, 5, 6, 11]
for c in heapq.merge(a, b):
print(c)
Para iterar sobre una secuencia en orden inverso, se especifica primero la
secuencia al derecho y luego se llama a la funcin reversed().
for i in reversed(xrange(1,10,2)):
print i
Para iterar sobre una secuencia ordenada, se utiliza la funcin sorted() la cual
devuelve una nueva lista ordenada dejando a la original intacta.
canasta = ['manzana', 'naranja', 'manzana', 'pera', 'naranja', 'banana']
for f in sorted(set(canasta)):
print f
El metodo zip para agrupar
names = ['name', 'age', 'pay', 'job']
values = ['Sue Jones', 45, 40000, 'hdw']
print(list(zip(names, values)))
print(dict(zip(names, values)))

Metodo profiler
Grid
The arrays studied so far can represent only simple sequences of items and are
called onedimensional arrays. For many applications, two-dimensional arrays or
grids are more useful. A table of numbers, for instance, can be implemented as a
two-dimensional array.

CONTROL DE FLUJO
Python obliga a identar el cdigo para que sea mas sencillo leer. Es opcional el uso
del parntesis.

Sentencias condicionales
If _codicin :
#operacion
elif _condicion:

#operacion
else:
#operacion
Var

_valor1

if

_condicion

else

_valor2

Una secuencia if ... elif ... elif ... sustituye las sentencias switch o case encontradas
en otros lenguajes.
If a == (b or c and d):
pass

Sentencias pass
La sentencia pass no hace nada. Es utilizada para rellenar espacios requeridos por
Python para evitar errores de sintaxis. Por ejemplo:
while True:
pass

#Espera ocupada hasta una interrupcin de teclado (Ctrl+C)

Se usa normalmente para crear clases en su mnima expresin:


class MyEmptyClass:
pass
Otro lugar donde se puede usar pass es como una marca de lugar para una
funcin o un cuerpo condicional cuando ests trabajando en cdigo nuevo, lo cual
te permite pensar a un nivel de abstraccin mayor. El pass se ignora
silenciosamente:
def initlog(*args):
pass #Acordate de implementar esto!

Bucless
while _condicion:
#operacion
else:
#operacion
for _elem in secuencia:
#operacion
else:
#operacion
Es valido el siguiente ejemplo
prod = 1
for item in [1, 2, 3, 4]: prod *= item
print(prod)
continue
break

:continuidad del ciclo


:rompe el ciclo

Iterando una lista a travs de sus indices


a = ['Mary', 'tenia', 'un', 'corderito']
for i in range(len(a)):
print(i, a[i])
En la mayora de los casos, sin embargo, conviene usar la funcin enumerate(),
Esto es un poco complicado de entender las dos imprimen igual
L = [1, 2, 3, 4]
while L:
front, L = L[0], L[1:]
print(front, L)
L = [1, 2, 3, 4]
while L:
front, *L = L
print(front, L)

Mas sobre condiciones


Las condiciones usadas en las instrucciones while e if pueden contener cualquier
operador, no slo comparaciones. Los operadores de comparacin in y not in
verifican si un valor est (o no est) en una secuencia. Los operadores is e is not
comparan si dos objetos son realmente el mismo objeto; esto es significativo slo
para objetos mutables como las listas.
Todos los operadores de comparacin tienen la misma prioridad, la cual es menor
que la de todos los operadores numricos.
Las comparaciones pueden encadenarse. Por ejemplo, a < b == c verifica si a es
menor que b y adems si b es igual a c.
Las comparaciones pueden combinarse mediante los operadores booleanos and y
or, y el resultado de una comparacin (o de cualquier otra expresin booleana)
puede negarse con not. Estos tienen prioridades menores que los operadores de
comparacin; entre ellos not tiene la mayor prioridad y or la menor, o sea que A
and not B or C equivale a (A and (not B)) or C. Como siempre, los parntesis
pueden usarse para expresar la composicin deseada.

BASE64

ENCODE AND DECODE

import base64
s = b'hello'
a = base64.b64encode(s)
print(a)
c = base64.b64decode(a)
print(c)

FUNCIONES

En Python no existen los procedimientos, ya que cuando el programador no


especifica un valor de retorno la funcin devuelve el valor None (nada),
equivalente al null de Java.
def _funcion(param1, param2,..param_n):
#operacion
def _funcion(param1 = valor1, param2,..param_n):
#operacion
return

: retorna un valor

Para definir funciones con un nmero variable de argumentos colocamos un ltimo


parmetro para la funcin cuyo nombre debe precederse de un signo *:
def mi_funcion2(*otro):
#operacion
Tambin se puede preceder el nombre del ltimo parmetro con **, en cuyo caso
en lugar de una tupla se utilizara un diccionario. Las claves de este diccionario
seran los nombres de los parmetros indicados al llamar a la funcin y los valores
del diccionario, los valores asociados a estos parmetros. En el siguiente ejemplo
se utiliza la funcin items de los diccionarios, que devuelve una lista con sus
elementos, para imprimir los parmetros que contiene el diccionario.
def _funcion(param1, param2, **otros):
for i in otros.items():
print(i)
En resumen: los valores mutables se comportan como paso por referencia, y los
inmutables como paso por valor.
Tambin podramos pasar varios valores que retornar a return.
def f(x, y):
return x * 2, y * 2
a, b = f(1, 2)
Sin embargo esto no quiere decir que las funciones Python puedan devolver varios
valores, lo que ocurre en realidad es que Python crea una tupla al vuelo cuyos
elementos son los valores a retornar, y esta nica variable es la que se devuelve.

Funciones recursivas
def displayRange(lower, upper):
"""Outputs the numbers from lower to upper."""
if lower <= upper:
print(lower)
displayRange(lower + 1, upper)
displayRange(1,5)

Valor por omisin

El valor por omisin es evaluado solo una vez. Existe una diferencia cuando el
valor por omisin es un objeto mutable como una lista, diccionario, o instancia de
la mayora de las clases. Por ejemplo, la siguiente funcin acumula los argumentos
que se le pasan en subsiguientes llamadas:
def f(a, L=[]):
L.append(a)
return L
print f(1)
# [1]
print f(2)
# [1,2]
print f(3)
# [1,2,3]
Si no se quiere que el valor por omisin sea compartido entre subsiguientes
llamadas, se pueden escribir la funcin as:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
print f(1)
print f(2)
print f(3)

# [1]
# [2]
# [3]

Palabras claves como argumento


En general, una lista de argumentos debe tener todos sus argumentos
posicionales seguidos por los argumentos nombrados, dnde las palabras claves
deben ser elegidas entre los nombres de los parmetros formales. No es
importante si un parmetro formal tiene un valor por omisin o no. Ningn
argumento puede recibir un valor ms de una vez (los nombres de parmetros
formales correspondientes a argumentos posicionales no pueden ser usados como
palabras clave en la misma llamada).
def loro(tension=5.0, 'muerto') #argumento nombrado seguido d uno posicional,
esto no va funcionar
Del mismo modo, los diccionarios pueden entregar argumentos nombrados con el
operador **::
def loro(tension, estado='rostizado', accion='explotar'):
print("-- Este loro no va a", accin)
print( "si le aplicas", tension, "voltios.")
print( "Esta", estado, "!")
d = {"tension": "cuatro millones", "estado": "demacrado", "accion": "VOLAR"}
loro(**d)

La documentacin

def mi_funcion():
"""No hace mas que documentar la funcion.
No, de verdad. No hace nada.
"""
pass
print(mi_funcion.__doc__)

Intermezzo: Estilo de codificacin


Hacer que tu cdigo sea ms fcil de leer por otros es siempre una buena idea, y
adoptar un buen estilo de codificacin ayuda tremendamente a lograrlo.
Todos los desarrolladores Python deben leerlo en algn momento; aqu estn
extrados los puntos ms importantes:
Usar sangras de 4 espacios, no tabs.
Recortar las lneas para que no superen los 79 caracteres
Usar lneas en blanco para separar funciones y clases, y bloques grandes de
cdigo dentro de funciones
Cuando sea posible, poner comentarios en una sola lnea.
Usar docstrings.
Usar espacios alrededor de operadores y luego de las comas, pero no
directamente dentro de parntesis: a = f(1, 2) + g(3, 4).
Nombrar las clases y funciones consistentemente; la convencin es usar
NotacionCamello para clases y minusculas_con_guiones_bajos para funciones y
mtodos. Siempre us self como el nombre para el primer argumento en los
mtodos (mir tut-firstclasses para ms informacin sobre clases y mtodos).

La instruccin (del)
Hay una manera de quitar un tem de una lista dado su ndice en lugar de su valor:
la instruccin del. Esta es diferente del mtodo pop(), el cual devuelve un valor. La
instruccin del tambin puede usarse para quitar secciones de una lista o vaciar la
lista completa (lo que hacamos antes asignando una lista vaca a la seccin).
Tambin para eliminar variables:
ar = range(10)
print ar
del ar[0] #se elimina el item de la lista
del a[2:4]
del a[:]
print ar
var = "hola"
del var
print var #genera error porque la variable no esta definido

CLASES

En Python las clases se definen mediante la palabra clave class seguida del
nombre de la clase, dos puntos (:) y a continuacin, indentado, el cuerpo de la
clase.
class Coche:
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")
self : la instancia de la misma clase,
instance: instancia de otras clases
Lo primero que llama la atencin en el ejemplo anterior es el nombre tan curioso
que tiene el mtodo __init__. Este nombre es una convencin y no un capricho. El
mtodo __init__, con una doble barra baja al principio y final del nombre, se
ejecuta justo despus de crear un nuevo objeto a partir de la clase, proceso que se
conoce con el nombre de instanciacin. El mtodo __init__ sirve, como sugiere su
nombre, para realizar cualquier proceso de inicializacin que sea necesario.
Como vemos el primer parmetro de __init__ y del resto de mtodos Python para
todos 44 de la clase es siempre self. Esta es una idea inspirada en Modula-3 y sirve
para referirse al objeto actual. Este mecanismo es necesario para poder acceder a
los atributos y mtodos del objeto diferenciando, por ejemplo, una variable local
mi_var de un atributo del objeto self. mi_var.
micoche= Coche(10)
Os preguntareis entonces cmo es posible que a la hora de crear nuestro primer
objeto pasemos un solo parmetro a __init__, el nmero 3, cuando la definicin de
la funcin indica claramente que precisa de dos parmetros (self y gasolina). Esto
es as porque Python pasa el primer argumento (la referencia al objeto que se
crea) automticamente
Como ltimo apunte recordar que en Python, como ya se coment en repetidas
ocasiones anteriormente, todo son objetos. Las cadenas, por ejemplo, tienen
mtodos como upper(), que devuelve el texto en maysculas o count(sub), que
devuelve el nmero de veces que se encontr la cadena sub en el texto.

Referencias de objetos
class Estudiante(object):

def modificar(self, value):


self.propA = value
propA = None
import weakref
a = Estudiante()
a.modificar(20)
aref = weakref.ref(a)
#referenciada
b=a
#referenciada
print(a.propA, aref().propA)

Herencia
Para indicar que una clase hereda de otra se coloca el nombre de la clase de la
que se hereda entre parntesis despus del nombre de la clase:
class claseHija(clasePadre):
#codigos
Ahora bien, puede ocurrir en algunos casos que necesitemos sobreescribir un
mtodo de la clase padre, pero que en ese mtodo queramos ejecutar el mtodo
de la clase padre porque nuestro nuevo mtodo no necesite ms que ejecutar un
par de nuevas instrucciones extra. En ese caso usaramos la sintaxis
SuperClase.metodo(self, args) para llamar al mtodo de igual nombre de la clase
padre. Por ejemplo, para llamar al mtodo __init__ de Instrumento desde Guitarra
usaramos Instrumento.__init__(self, precio)

Herencia Multiple
En Python, a diferencia de otros lenguajes como Java o C#, se permite la herencia
mltiple, es decir, una clase puede heredar de varias clases a la vez.
Basta con enumerar las clases de las que se hereda separndolas por comas:
class Cocodrilo(Terrestre, Acuatico):
#codigo
En el caso de que alguna de las clases padre tuvieran mtodos con el mismo
nombre y nmero de parmetros las clases sobreescribiran la implementacin de
los mtodos de las clases ms a su derecha en la definicin.
class Terrestre:
def desplazar(self):
print("El animal anda")
class Acuatico:
def desplazar(self):
print("El animal nada")
class Cocodrilo(Acuatico,Terrestre):
def come(self):
print("comiendo")
c = Cocodrilo()
c.desplazar()

Polimorfismo

Python, al ser de tipado dinmico, no impone restricciones a los tipos que se le


pueden pasar a una funcin, por ejemplo, ms all de que el objeto se comporte
como se espera: si se va a llamar a un mtodo f() del objeto pasado como
parmetro, por ejemplo, evidentemente el objeto tendr que contar con ese
mtodo. Por ese motivo, a diferencia de lenguajes de tipado esttico como Java o
C++, el polimorfismo en Python no es de gran importancia.

Encapsulacion
La encapsulacin se refiere a impedir el acceso a determinados m- todos y
atributos de los objetos estableciendo as qu puede utilizarse desde fuera de la
clase. En Python no existen los modificadores de acceso, y lo que se suele hacer
es que el acceso a una variable o funcin viene determinado por su nombre: si el
nombre comienza con dos guiones bajos (y no termina tambin con dos guiones
bajos) se trata de una variable o funcin privada, en caso contrario es pblica. Los
mtodos cuyo nombre comienza y termina con dos guiones bajos son mtodos
especiales que Python llama automticamente bajo ciertas circunstancias, como
veremos al final del captulo.
class Ejemplo:
def publico(self):
print("Publico")
def __privado(self):
print("Privado")
ej = Ejemplo()
ej.publico()
ej.__privado()
#error por que el mtodo es privado
Este mecanismo se basa en que los nombres que comienzan con un doble guin
bajo se renombran para incluir el nombre de la clase (caracterstica que se conoce
con el nombre de name mangling). Esto implica que el mtodo o atributo no es
realmente privado, y podemos acceder a l mediante una pequea trampa:
ej._Ejemplo__privado()

#el mtodo es llamado sin problemas

En ocasiones tambin puede suceder que queramos permitir el acceso a algn


atributo de nuestro objeto, pero que este se produzca de forma controlada. Para
esto podemos escribir mtodos cuyo nico cometido sea este, mtodos que
normalmente, por convencin, tienen nombres como getVariable y setVariable; de
ah que se conozcan tambin con el nombre de getters y setters.
class Fecha():
def __init__(self):
self.__dia = 1
def getDia(self):
return self.__dia
def setDia(self, dia):
if dia > 0 and dia < 31:
self.__dia = dia
else:
print("Error")
mi_fecha = Fecha()

mi_fecha.setDia(23)
print(mi_fecha.getDia())
Esto se podra simplificar mediante propiedades, que abstraen al usuario del
hecho de que se est utilizando mtodos entre bambalinas para obtener y
modificar los valores del atributo:
class Fecha():
def __init__(self):
self.__dia = 1
def getDia(self):
return self.__dia
def setDia(self, dia):
if dia > 0 and dia < 31:
self.__dia = dia
else:
print("Error")
dia = property(getDia, setDia)
mi_fecha = Fecha()
mi_fecha.dia = 25
print(mi_fecha.dia)

Metodos Especiales
Ya vimos al principio del artculo el uso del mtodo __init__. Existen otros mtodos
con significados especiales, cuyos nombres siempre comienzan y terminan con
dos guiones bajos. A continuacin se listan algunos especialmente tiles.
__init__(self, args)
Mtodo llamado despus de crear el objeto para realizar tareas de inicializacin.
__new__(cls, args)
Mtodo exclusivo de las clases de nuevo estilo que se ejecuta antes que __init__ y
que se encarga de construir y devolver el objeto en s. Es equivalente a los
constructores de C++ o Java. Se trata de un mtodo esttico, es decir, que existe
con independencia de las instancias de la clase: es un mtodo de clase, no de
objeto, y por lo tanto el primer parmetro no es self, sino la propia clase: cls.
__del__(self)
Mtodo llamado cuando el objeto va a ser borrado. Tambin llamado destructor, se
utiliza para realizar tareas de limpieza.
__str__(self)
Mtodo llamado para crear una cadena de texto que represente a nuestro objeto.
Se utiliza cuando usamos print para mostrar nuestro objeto o cuando usamos la
funcin str(obj) para crear una cadena a partir de nuestro objeto.
class Printer:
def __str__(self): # Used for instance itself
return "Este es mi objeto"
print(Printer())
__cmp__(self, otro)

Mtodo llamado cuando se utilizan para comprobar si nuestro objeto es menor,


mayor o igual al objeto pasado como parmetro. Debe devolver un nmero
negativo si nuestro objeto es menor, cero si son iguales, y un nmero positivo si
nuestro objeto es mayor. Si este mtodo no est definido y se intenta comparar el
objeto mediante los operadores <=, > o >= se lanzar una excepcin. Si se
utilizan los operadores == o != para comprobar si dos objetos son iguales, se
comprueba si son el mismo objeto (si tienen el mismo id).
__len__(self)
Mtodo llamado para comprobar la longitud del objeto. Se utiliza, por ejemplo,
cuando se llama a la funcin len(obj) sobre nuestro objeto. Como es de suponer, el
mtodo debe devolver la longitud del objeto.
__add__(self, other): se activa este proceso cuando se realiza la operacin de la
suma de un objeto
__sub__(self, other): se activa este proceso cuando se realiza la operacin de la
resta de un objeto
__mul__(self, other):
__truediv__(self, other):
__call__(self, other):es una funcion que solo puede ser llamado desde un objeto
creado

class Printer:
def __call__(self,a,b): # Used for instance itself
return "Esto es una suma de {0} + {1} = {2}".format(a,b,a+b)
a=Printer()
print(a(2,4))
para hacer la comparacin de mayor
def __gt__(self, other):
return "Se invoco ete metodo gt "+str(other)
para hacer la comparacion de menor
def __lt__ (self, other):
return "Otro onvocado lt "+str(other)
para hacer la comparacion de igualdad
def __eq__ (self, other):
return "Otro onvocado eq "+str(other)

Existen bastantes ms mtodos especiales, que permite entre otras


cosas utilizar el mecanismo de slicing sobre nuestro objeto

METODOS DE OBJETOS
Diccionarios
.get(key)
: Busca el valor de la clave k en el diccionario, de no encontrar no
habr excepcin.
.has_key(key)
: Comprueba si el diccionario tiene la clave k. Es equivalente a
la sintaxis k in D.
.items()
: Devuelve una lista de tuplas con pares clave-valor.
.keys()
:Devuelve una lista de las claves del diccionario.
.values()
:Devueve una lista de valores del diccionario.
.pop(key) : Borra la clave k del diccionario y devuelve su valor. Si no se
encuentra se lanza una excepcin.
.values()
: Devuelve una lista de los valores del diccionario.
.popitem()
.clear()
.update(_diccionario)

Listas
.append(object) : aade un objeto al final de la lista
.count(value)
: Devuelve el nmero de veces que se encontr value en
la lista. .extend(iterable)
: Aade los elementos del iterable a la lista.
.index(value, start, stop]) : Devuelve la posicin en la que se encontr la primera
ocurrencia de value. Si se especifican, start y stop definen
las posiciones de inicio y fin de una sublista en la que
buscar.
.insert(index, object)
: Inserta el objeto object en la posicin index.
.pop([index])
: Devuelve el valor en la posicin index y lo elimina de la lista.
Si no se especifica la posicin, se utiliza el ltimo elemento de la
lista.
.remove(value)
: Eliminar la primera ocurrencia de value en la lista.
.reverse()
: Invierte la lista. Esta funcin trabaja sobre la propia lista
desde la que se invoca el mtodo, no sobre una copia.
.sort(cmp=None, key=None, reverse=False)
: Ordena la lista. Si se
especifica cmp, este debe ser una funcin que tome como
parmetro dos valores x e y de la lista y devuelva -1 si x es
menor que y, 0 si son iguales y 1 si x es mayor que y.
.copy()
: Devuelve una copia superficial de la lista. Equivale a a[:]
.clear()

Usando listas como colas y pilas


stack = [1,2,3,4,5,6,7,8,9]
stack.append(10)

print "lo que quieda ede la lista", stack


print(stack.pop())
# funcin para pila
print "lo que quieda ede la lista", stack
print(stack.pop(0))
# funcion para cola
print "lo que quieda ede la lista", stack

Funciones De Orden Superior


El concepto de funciones de orden superior se refiere al uso de funciones como si
de un valor cualquiera se tratara, posibilitando el pasar funciones como
parmetros de otras funciones o devolver funciones como valor de retorno. Esto es
posible porque, como hemos insistido ya en varias ocasiones, en Python todo son
objetos. Y las funciones no son una excepcin.
def saludar(lang):
def saludar_es():
print "Hola"
def saludar_en(nombre = "Peater"):
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()
En la funcin saludar se definen varias funciones: saludar_es, saludar_en y
saludar_fr y a continuacin se crea un diccionario que tiene como claves cadenas
de texto que identifican a cada lenguaje, y como valores las funciones. El valor de
retorno de la funcin es una de estas funciones. La funcin a devolver viene
determinada por el valor del parmetro lang que se pas como argumento de
saludar.
Como el valor de retorno de saludar es una funcin, como hemos visto, esto quiere
decir que f es una variable que contiene una funcin. Podemos entonces llamar a
la funcin a la que se refiere f de la forma en que llamaramos a cualquier otra
funcin, aadiendo unos parntesis y, de forma opcional, una serie de parmetros
entre los parntesis.
saludar("en")("Jorge Washington")
En este caso el primer par de parntesis indica los parmetros de la funcin
saludar, y el segundo par, los de la funcin devuelta por saludar.

Iteraciones de orden superior sobre listas


Una de las cosas ms interesantes que podemos hacer con nuestras funciones de
orden superior es pasarlas como argumentos de las funciones map, filter y reduce.
Estas funciones nos permiten sustituir los bucles tpicos de los lenguajes
imperativos mediante construcciones equivalentes.

map(function, sequence[, sequence, ...])


La funcin map aplica una funcin a cada elemento de una secuencia y devuelve
una lista con el resultado de aplicar la funcin a cada elemento. Si se pasan como
parmetros n secuencias, la funcin tendr que aceptar n argumentos.
def cuadrado(n):
return n ** 2
l = [1, 2, 3]
l2 = map(cuadrado, l)
print(l2)
filter(function, sequence)
La funcion filter verifica que los elementos de una secuencia cumplan una
determinada condicin, devolviendo una secuencia con los elementos que
cumplen esa condicin.
def pares(n):
return n % 2.0 == 0
l = [1, 2, 3, 4, 5, 6]
l2 = filter(pares, l)
print(l2)
reduce(function, sequence[, initial])
La funcin reduce aplica una funcin a pares de elementos de una secuencia hasta
dejarla en un solo valor. A continuacin podemos ver un ejemplo en el que se
utiliza reduce para sumar todos los elementos de una lista.
def sumar(x, y):
return x + y
l = [1, 2, 3]
l2 = reduce(sumar, l)
print(l2)

Funcion Lambda
El operador lambda sirve para crear funciones annimas en lnea. Al ser funciones
annimas, es decir, sin nombre, estas no podrn ser referenciadas ms tarde. Las
funciones lambda se construyen mediante el operador lambda, los parmetros de
la funcin separados por comas (atencin, SIN parntesis), dos puntos (:) y el
cdigo de la funcin.
l = [1, 2, 3]
l2 = filter(lambda n: n % 2.0 == 0, l)
l3 = reduce(lambda n, m: n + m, l)
print(l2)
print(l3)

Comprensin de listas

En Python 3000 map, filter y reduce perdern importancia. Y aunque estas


funciones se mantendrn, reduce pasar a formar parte del mdulo functools, con
lo que quedar fuera de las funciones disponibles por defecto, y map y filter se
desaconsejarn en favor de las list comprehensions o comprensin de listas.
La comprensin de listas consiste en una construccin que permite crear listas a
partir de otras listas.
Veamos un ejemplo de cmo se podra utilizar la comprensin de listas para elevar
al cuadrado todos los elementos de una lista, como hicimos en nuestro ejemplo de
map.
l=[2,5,4,7,8,9,9,6,1,5]
l2 = [n ** 2 for n in l]
print(l2)
El ejemplo que utilizamos para la funcin filter (conservar solo los nmeros que
son pares) se podra expresar con comprensin de listas as:
l=[2,5,4,7,8,9,9,6,1,5]
l2 = [n for n in l if n % 2.0 == 0]
print(l2)
este es otro ejemplo
[print(x + y) for x in 'abc' for y in 'lmn']
su equivalencia
res = []
for x in 'abc':
for y in 'lmn':
res.append(x + y)
print(res)
Este otro
l = [0, 1, 2, 3]
m = ["a", "b"]
n = [s * v for s in m
print(n)

for v in l

if v > 0]

Esta construccin sera equivalente a una serie de for-in anidados:


l = [0, 1, 2, 3]
m = ["a", "b"]
n = []
for s in m:
for v in l:
if v > 0:
n.append(s * v)
print(n)

Las listas por comprensin son mucho ms flexibles que map() y pueden aplicarse
a expresiones complejas y funciones anidadas:
a = [str(round(355/113.0, i)) for i in range(1,6)]
print(a)

Listas por comprension anidadas


Son una herramienta poderosa pero, como toda herramienta poderosa, deben
usarse con cuidado, o ni siquiera usarse
mat = [ [1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print [[fila[i] for fila in mat] for i in [0, 1, 2]]
Este es otro ejemplo
[print(x + y + z)
for x in 'spam' if x in 'sm'
for y in 'SPAM' if y in ('P', 'A')
for z in '123' if z > '1']
En el mundo real, deberas preferir funciones predefinidas a declaraciones con
flujo complejo. La funcin zip() hara un buen trabajo para este caso de uso:

Generadores
Las expresiones generadoras funcionan de forma muy similar a la comprensin de
listas. De hecho su sintaxis es exactamente igual, a excepcin de que se utilizan
parntesis en lugar de corchetes:
l = [2,1,4,5,6]
l2 = (n ** 2 for n in l)
lista = list(l2)
print(l2)
print (lista)

#creando una lista a partir de un generador

Sin embargo las expresiones generadoras se diferencian de la comprensin de


listas en que no se devuelve una lista, sino un generador.
<generator object at 000E33210>
Un generador es una clase especial de funcin que genera valores sobre los que
iterar. Para devolver el siguiente valor sobre el que iterar se utiliza la palabra clave
yield en lugar de return. Lo que hace que los generadores sean tan compactos es
que los mtodos __iter__() y next() son creados automticamente.
def mi_generador(n, m, s):
while(n <= m):
yield n
n += s
for n in mi_generador(0, 5, 1):
print n

Decoradores

Un decorador no es es mas que una funcin que recibe una funcin como
parmetro y devuelve otra funcin como resultado.
Decoradores para atributos
class Person:
def __init__(self, name):
self._name = name
@property
def name(self): # name = property(name)
"name property docs"
print('fetch...')
return self._name
@name.setter
def name(self, value): # name = name.setter(name)
print('change...')
self._name = value
@name.deleter
def name(self): # name = name.deleter(name)
print('remove...')
del self._name
bob = Person('Bob Smith') # bob has a managed attribute
print(bob.name) # Runs name getter (name 1)
bob.name = 'Robert Smith' # Runs name setter (name 2)
print(bob.name)
del bob.name
NO ESTA MUY CLARO BUSCAR MAS INFORMACION

Aadiendo metodos a auna clase


class Client1:
def __init__(self, value):
self.value = value
def spam(self):
return self.value * 2
def eggsfunc(obj):
return obj.value * 4
def hamfunc(obj, value):
return value + 'ham'
Client1.eggs = eggsfunc
Client1.ham = hamfunc
x= Client1(10)
print(x.spam())
print(x.eggs())
print(x.ham("bacon "))

Matrices
M = [[1, 2, 3],
[4, 5, 6],

[7, 8, 9]]
N = [[2, 2, 2],
[3, 3, 3],
[4, 4, 4]]
[print(M[row][1]) for row in (0, 1, 2)]
[print(row[1]) for row in M]
#using offset
[print(M[i][i]) for i in range(len(M))] #diagonal
[print(col + 10) for row in M for col in row]
Su equivalencia sera
res = []
for row in M: # Statement equivalents
for col in row: # Indent parts further right
res.append(col + 10)
print(res)
Otro ejemplo extrayendo submatrices
[print([col + 10 for col in row]) for row in M] #convierte en submatrices
Su equivalencia
res = []
for row in M:
tmp = [] # Left-nesting starts new list
for col in row:
tmp.append(col + 10)
res.append(tmp)
print(res)
Aplicando zip()
[print([col1 * col2 for (col1, col2) in zip(row1, row2)]) for (row1, row2) in zip(M, N)]
Su equivalencia
res = []
for (row1, row2) in zip(M, N):
tmp = []
for (col1, col2) in zip(row1, row2):
tmp.append(col1 * col2)
res.append(tmp)
print(res)

Permutaciones
from itertools import permutations
item = ["a","b", "c"]
for p in permutations(item):
print(p)
for p in permutations(item, 2):
print(p)
for c in combinations(item, 2):
print(c)

EXCEPCIONES
try/except/else/finally
Las excepciones son errores detectados por Python durante la ejecucin del
programa.
En Python se utiliza una construccin try-except para capturar y tratar las
excepciones.
try:
#codigo
except:
#codigo
Python permite utilizar varios except para un solo bloque try, de forma que
podamos dar un tratamiento distinto a la excepcin dependiendo del tipo de
excepcin de la que se trate.
try:
num = int("3a")
print no_existe
except NameError:
print "La variable no existe"
except ValueError:
print "El valor no es un numero"
Adems podemos hacer que un mismo except sirva para tratar ms de una
excepcin usando una tupla para listar los tipos de error que queremos que trate
el bloque:
try:
num = int("3a")
print no_existe
except (NameError, ValueError):
print "Ocurrio un error"
La construccin try-except puede contar adems con una clausula else, que define
un fragmento de cdigo a ejecutar slo si no se ha producido ninguna excepcin
en el try.
try:
num = 33
except:
print "Hubo un error!"
else:
print "Todo esta bien"

Tambin existe una clausula finally que se ejecuta siempre, se produzca o no una
excepcin. Esta clausula se suele utilizar, entre otras cosas, para tareas de
limpieza. Se ejecuta siempre al final de la excepcin.
try:
z=x/y
except ZeroDivisionError:
print "Division por cero"
finally:
print "Limpiando"

Levantando excepciones
La declaracin raise permite al programador forzar a que ocurra una excepcin
especfica. Tambin es interesante comentar que como programadores podemos
crear y lanzar nuestras propias excepciones. Basta crear una clase que herede de
Exception o cualquiera de sus hijas y lanzarla con raise.
class MiError(Exception):
def __init__(self, valor):
self.valor = valor
def __str__(self):
return "Error " + str(self.valor)
try:
if valor > 20:
raise MiError(33)
except MiError, e:
print e
Otro ejemplo:
try:
raise NameError('Hola')
except NameError:
print u'Vol una excepcin!'
raise
Por ltimo, a continuacin se listan a modo de referencia las excepciones
disponibles por defecto, as como la clase de la que deriva cada una de ellas entre
parntesis.
BaseException: Clase de la que heredan todas las excepciones.
Exception(BaseException): Super clase de todas las excepciones que no sean de
salida. GeneratorExit(Exception): Se pide que se salga de un generador.
StandardError(Exception): Clase base para todas las excepciones que no tengan
que ver con salir del intrprete.
ArithmeticError(StandardError): Clase base para los errores aritm- ticos.
FloatingPointError(ArithmeticError): Error en una operacin de coma flotante.
OverflowError(ArithmeticError): Resultado demasiado grande para poder
representarse. ZeroDivisionError(ArithmeticError): Lanzada cuando el segundo
argumento de una operacin de divisin o mdulo era 0.
AssertionError(StandardError): Fall la condicin de un estamento assert.
AttributeError(StandardError): No se encontr el atributo.

EOFError(StandardError): Se intent leer ms all del final de fichero.


EnvironmentError(StandardError): Clase padre de los errores relacionados con la
entrada/salida. IOError(EnvironmentError): Error en una operacin de
entrada/salida.
OSError(EnvironmentError): Error en una llamada a sistema.
WindowsError(OSError): Error en una llamada a sistema en Windows.
ImportError(StandardError): No se encuentra el mdulo o el elemento del mdulo
que se quera importar.
LookupError(StandardError): Clase padre de los errores de acceso.
IndexError(LookupError): El ndice de la secuencia est fuera del rango posible.
KeyError(LookupError): La clave no existe.
MemoryError(StandardError): No queda memoria suficiente.
NameError(StandardError): No se encontr ningn elemento con ese nombre.
UnboundLocalError(NameError): El nombre no est asociado a ninguna variable.
ReferenceError(StandardError): El objeto no tiene ninguna referencia fuerte
apuntando hacia l. RuntimeError(StandardError): Error en tiempo de ejecucin no
especificado. NotImplementedError(RuntimeError): Ese mtodo o funcin no est
implementado. SyntaxError(StandardError): Clase padre para los errores
sintcticos.
IndentationError(SyntaxError): Error en la indentacin del archivo.
TabError(IndentationError): Error debido a la mezcla de espacios y tabuladores.
SystemError(StandardError): Error interno del intrprete.
TypeError(StandardError): Tipo de argumento no apropiado.
ValueError(StandardError): Valor del argumento no apropiado.
UnicodeError(ValueError): Clase padre para los errores relacionados con unicode.
UnicodeDecodeError(UnicodeError): Error de decodificacin unicode.
UnicodeEncodeError(UnicodeError): Error de codificacin unicode.
UnicodeTranslateError(UnicodeError): Error de traduccin unicode.
StopIteration(Exception): Se utiliza para indicar el final del iterador.
Warning(Exception): Clase padre para los avisos.
DeprecationWarning(Warning): Clase padre para avisos sobre caractersticas
obsoletas. FutureWarning(Warning): Aviso. La semntica de la construccin
cambiar en un futuro. ImportWarning(Warning): Aviso sobre posibles errores a la
hora de importar. PendingDeprecationWarning(Warning): Aviso sobre
caractersticas que se marcarn como obsoletas en un futuro prximo.
RuntimeWarning(Warning): Aviso sobre comportmaientos dudosos en tiempo de
ejecucin.
SyntaxWarning(Warning): Aviso sobre sintaxis dudosa.
UnicodeWarning(Warning): Aviso sobre problemas relacionados con Unicode, sobre
todo con problemas de conversin.
UserWarning(Warning): Clase padre para avisos creados por el programador.
KeyboardInterrupt(BaseException): El programa fu interrumpido por el usuario.
SystemExit(BaseException): Peticin del intrprete para terminar la ejecucin

Por qu usar rboles

TREE ARBOLES

from linkedbst import LinkedBST tree = LinkedBST()

HEAP

GRAPHOS-GRAFOS

MODULOS Y PAQUETES
Modulos
Para facilitar el mantenimiento y la lectura los programas demasiado largos
pueden dividirse en mdulos, agrupando elementos relacionados. Los mdulos son
entidades que permiten una organizacin y divisin lgica de nuestro cdigo. Los
ficheros son su contrapartida fsica: cada archivo Python almacenado en disco
equivale a un mdulo.
A la hora de importar un mdulo Python recorre todos los directorios indicados en
la variable de entorno PYTHONPATH en busca de un archivo con el nombre
adecuado. El valor de la variable PYTHONPATH se puede consultar desde Python
mediante sys.path
import sys
sys.path
#ejemplo del codigo
def mi_funcion():
print("una funcion")
class MiClase:
def __init__(self):
print("una clase")
print("un modulo")
Ahora llamaremos al modulo que hemos creado con el nombre modulos.py
import modulos

modulos.mi_funcion()
a = modulos.MiClase()
En el caso de que Python no encontrara ningn mdulo con el nombre
especificado, se lanzara una excepcin de tipo ImportError.
La clausula import tambin permite importar varios mdulos en la misma lnea.
Esto permite que no sobreescribamos accidentalmente algn otro objeto que
tuviera el mismo nombre al importar otro mdulo.
import os, sys, time
print(time.asctime())
#muestra la fecha actual
print(sys.platform)
#muestra la plataforma enlaque se ejecuta el programa
print(os.getcwd()) #muestra la carpeta actual de trabajo
Sin embargo es posible utilizar la construccin from-import para ahorrarnos el
tener que indicar el nombre del mdulo antes del objeto que nos interesa. De esta
forma se importa el objeto o los objetos que indiquemos al espacio de nombres
actual.
from time import asctime
print(asctime())
Aunque se considera una mala prctica, tambin es posible importar todos los
nombres del mdulo al espacio de nombres actual usando el caracter *:
from time import *
Por ltimo es interesante comentar que en Python los mdulos tambin son
objetos; de tipo module en concreto. Por supuesto esto significa que pueden tener
atributos y mtodos. Uno de sus atributos, __name__, se utiliza a menudo para
incluir cdigo ejecutable en un mdulo pero que este slo se ejecute si se llama al
mdulo como programa, y no al importarlo. Para lograr esto basta saber que
cuando se ejecuta el mdulo directamente __name__ tiene como valor __main__,
mientras que cuando se importa, el valor de __name__ es el nombre del mdulo:
Otro atributo interesante es __doc__, que, como en el caso de funciones y clases,
sirve a modo de documentacin del objeto (docstring o cadena de
documentacin). Su valor es el de la primera lnea del cuerpo del mdulo, en el
caso de que esta sea una cadena de texto; en caso contrario valdr None.

La funcin dir()
La funcin integrada dir() se usa para encontrar qu nombres define un mdulo.
Devuelve una lista ordenada de cadenas:
import math
print(dir(math))
print(dir())
print(dir(str))

#muestra las funciones definidas en la clase math


#muestra las funciones que estn definidas actualmente
#muestra las funciones definidas en la clase String

dir() no lista los nombres de las funciones y variables integradas. Si quers una
lista de esos, estn definidos en el mdulo estndar __builtin__:
import __builtin__

print(dir(__builtin__))
integrados por default

#muestra todos los metodos y variables

Paquetes
Si los mdulos sirven para organizar el cdigo, los paquetes sirven para organizar
los mdulos. Los paquetes son tipos especiales de mdulos (ambos son de tipo
module) que permiten agrupar mdulos relacionados. Mientras los mdulos se
corresponden a nivel fsico con los archivos, los paquetes se representan mediante
directorios.
Para hacer que Python trate a un directorio como un paquete es necesario crear
un archivo __init__.py en dicha carpeta. En este archivo se pueden definir
elementos que pertenezcan a dicho paquete, como una constante DRIVER para el
paquete bbdd, aunque habitualmente se tratar de un archivo vaco. Para hacer
que un cierto mdulo se encuentre dentro de un paquete, basta con copiar el
archivo que define el mdulo al directorio del paquete.
Como los modulos, para importar paquetes tambin se utiliza import y from-import
y el caracter . para separar paquetes, subpaquetes y mdulos.
import paq.subpaq.modulo
paq.subpaq.modulo.func()
Para encontrar algn mdulo o paquete que cubra una cierta necesidad,
puedes consultar la lista de PyPI (Python Package Index) en
http://pypi.python.org/, que cuenta a la hora de escribir estas lneas, con
ms de 4000 paquetes distintos.

ENTRADAS SALIDAS Y FICHEROS


Entrada estndar
input()

: Esta funcin toma como parmetro una cadena a usar como prompt
(es decir, como texto a mostrar al usuario pidiendo la entrada) y
devuelve una cadena con los caracteres introducidos por el usuario
hasta que puls la tecla Enter

Parametros en lnea de comandos


import sys
if(len(sys.argv) > 1):
print("Abriendo " + sys.argv[1])
else:
print("Debes indicar el nombre del archivo")

Salida estndar
print("%s %s" % ("Hola", "mundo"))

#salida es Hola Mundo

Los especificadores ms sencillos estn formados por el smbolo % seguido de una


letra que indica el tipo con el que formatear el valor
Especificador Formato
%s
Cadena
%d
Entero
%o
Octal
%x
Hexadecimal
%f
Real
Se puede introducir un nmero entre el % y el carcter que indica el tipo al que
formatear, indicando el nmero mnimo de caracteres que queremos que ocupe la
cadena. Si el tamao de la cadena resultante es menor que este nmero, se
aadirn espacios a la izquierda de la cadena. En el caso de que el nmero sea
negativo, ocurrir exactamente lo mismo, slo que los espacios se aadirn a la
derecha de la cadena.
print("%10s mundo" % "Hola")
print("%-10s mundo" % "Hola")

#salida:
Hola mundo
#salida: Hola
mundo

En el caso de los reales es posible indicar la precisin a utilizar precediendo la f de


un punto seguido del nmero de decimales que queremos mostrar:
from math import pi
print("%.4f" % pi)
#salida: 3.1416
print("%.4s" % "hola mundo") #salida: hola

Formateo elegante de la salida


Ac hay dos maneras de escribir una tabla de cuadrados y cubos:
for x in range(1, 11):
print(repr(x).rjust(2), repr(x*x).rjust(3), repr(x*x*x).rjust(4))
for x in range(1,11):
print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
,rjust(20)
equivale
format(text, >20)
.ljust(20)
equivale
format(text,<20)
.center(20,-)
equivale
format(text, -^20s)
print('{:>10s} {:>10s}'.format('Hello', 'World'))
Este ejemplo muestra el mtodo rjust() de los objetos cadena, el cual ordena una
cadena a la derecha en un campo del ancho dado llenndolo con espacios a la
izquierda. Hay mtodos similares ljust() y center(). Estos mtodos no escriben
nada, slo devuelven una nueva cadena. Si la cadena de entrada es demasiado
larga, no la truncan, sino la devuelven intacta; esto te romper la alineacin de tus
columnas pero es normalmente mejor que la alternativa, que te estara mintiendo
sobre el valor. (Si realmente quers que se recorte, siempre pods agregarle una
operacin de rebanado, como en x.ljust(n)[:n].)
Hay otro mtodo, zfill(), el cual rellena una cadena numrica a la izquierda con
ceros. Entiende signos positivos y negativos:

print('12'.zfill(5))
print('-3.14'.zfill(7))

#00012
#-003.14

El uso bsico del mtodo str.format() es como esto:


Print('Somos los {0} quienes decimos "{1}!"'.format('caballeros', 'Nop'))
s = '{name} has {n} messages.'
print(s.format(name='Guido', n=37))
Textwrap
s = "Look into my eyes, look into my eyes, the eyes, the eyes, \
the eyes, not around the eyes, don't look around the eyes, \
look into my eyes, you're under."
import textwrap
print(textwrap.fill(s, 70))
Un : y especificador de formato opcionales pueden ir luego del nombre del
campo. Esto aumenta el control sobre cmo el valor es formateado. El siguiente
ejemplo trunca Pi a tres lugares luego del punto decimal.
import math
print('El valor de PI es aproximadamente {0:.3f}.'.format(math.pi))
Pasando un entero luego del ':' causar que que el campo sea de un mnimo
nmero de caracteres de ancho. Esto es til para hacer tablas lindas.
tabla = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
for nombre, telefono in tabla.items():
print '{0:10} ==> {1:10d}'.format(nombre, telefono)
Si tens una cadena de formateo realmente larga que no quers separar, podra
ser bueno que puedas hacer referencia a las variables a ser formateadas por el
nombre en vez de la posicin. Esto puede hacerse simplemente pasando el
diccionario y usando corchetes '[]' para acceder a las claves

Viejo formateo de cadenas


El operador % tambin puede usarse para formateo de cadenas. Interpreta el
argumento de la izquierda con el estilo de formateo de sprintf para ser aplicado al
argumento de la derecha, y devuelve la cadena resultante de esta operacin de
formateo.

Archivos IO
Los ficheros en Python son objetos de tipo file creados mediante la funcin open
(abrir). Esta funcin toma como parmetros una cadena con la ruta al fichero a
abrir, que puede ser relativa o absoluta; una cadena opcional indicando el modo
de acceso (si no se especifica se accede en modo lectura) y, por ltimo, un entero
opcional para especificar un tamao de buffer distinto del utilizado por defecto.

El modo de acceso puede ser cualquier combinacin lgica de los siguientes


modos:
r: read, lectura. Abre el archivo en modo lectura. El archivo tiene que existir
previamente, en caso contrario se lanzar una excepcin de tipo IOError.
w: write, escritura. Abre el archivo en modo escritura. Si el archivo no existe se
crea. Si existe, sobreescribe el contenido.
a: append, aadir. Abre el archivo en modo escritura. Se diferencia del modo w
en que en este caso no se sobreescribe el contenido del archivo, sino que se
comienza a escribir al final del archivo.
b: binary, binario.
+: permite lectura y escritura simultneas.
U: universal newline, saltos de lnea universales. Permite trabajar con archivos
que tengan un formato para los saltos de lnea que no coincide con el de la
plataforma actual (en Windows se utiliza el caracter CR LF, en Unix LF y en Mac OS
CR).
Combinacin rb, wb
f = open(archivo.txt, w)
.read()
: lee todo el archivo
.read(_tamao_buffer)
: lee a traves del buffer
.readline()
: lee linea por linea
.write(_texto)
: escribe el archivo
.writeline()
: escribe
.close()
:cierra el archivo

import io
s = io.StringIO()
s.write("Hello World\n")
print(s.getvalue())
Otro ejemplo
for linea in open("miarchivo.txt"):
print linea
El problema con este cdigo es que deja el archivo abierto por un periodo de
tiempo indeterminado luego de que termine de ejecutarse. Esto no es un problema
en scripts simples, pero puede ser un problema en aplicaciones ms grandes. La
declaracin with permite que objetos como archivos sean usados de una forma
que asegure que siempre se los libera rpido y en forma correcta.
with open("miarchivo.txt") as f:
for linea in f:
print(linea)
Es necesario comprobar si existe o no un archivo o directorio. Usamos os.path
import os
a = os.path.exists("PPR 2015")
b = os.path.exists("../PROGRAMACION 2013")
print(a, b)

#busca la carpeta en el
#../va a la carpeta padre

Gzip y bz2
Los mdulos de gzip y bz2 hacen que sea fcil trabajar con este tipo de archivos .
Ambos mdulos proporcionan una implementacin alternativa de open () que se
puede utilizar para este propsito. Por ejemplo, Para leer los archivos comprimidos
en forma de texto , haga lo siguiente :
import gzip
with gzip.open("somefile.gz", 'rt') as f:
text = f.read()
import bz2
with bz2.open('somefile.bz2', 'rt') as f:
text = f.read()

JSON
Cuando se desea leer o escribir datos codificados como JSON ( JavaScript Object
Notation
).
El mdulo json proporciona una manera fcil de codificar y decodificar datos en
JSON . Los dos principales funciones son json.dumps ( ) y json.loads ( )
import json
data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}
json_str = json.dumps(data)
data = json.loads(json_str)
print(data)
Si est trabajando con los archivos en lugar de cadenas , se puede utilizar como
alternativa json.dump ( ) y json.load ( ) para codificar y decodificar los datos JSON .
Por ejemplo:
import json
# Writing JSON data
with open('data.json', 'w') as f:
json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
data = json.load(f)

En lugar de tener a los usuarios constantemente escribiendo y debugueando


cdigo para grabar tipos de datos complicados, Python te permite usar formato
intercambiable de datos popular llamado JSON (JavaScript Object Notation). El
mdulo estandar llamado json puede tomar datos de Python con una jerarqua, y
convertirlo a representaciones de cadena de caracteres; este proceso es llamado
serializing. Reconstruir los datos desde la representacin de cadena de caracteres

es llamado deserializing. Entre serializacin y deserializacin, la cadena de


caracteres representando el objeto quizs haya sido guardado en un archivo o
datos, o enviado a una mquina distante por una conexin de red.
import json

Mover el puntero de lectura/escritura


Hay situaciones en las que nos puede interesar mover el puntero de
lectura/escritura a una posicin determinada del archivo. Por ejemplo si queremos
empezar a escribir en una posicin determinada y no al final o al principio del
archivo. Para esto se utiliza el mtodo seek que toma como parmetro un n mero
positivo o negativo a utilizar como desplazamiento. Tambin es posible utilizar un
segundo parmetro para indicar desde dnde queremos que se haga el
desplazamiento: 0 indicar que el desplazamiento se refiere al principio del fichero
(comportamiento por defecto), 1 se refiere a la posicin actual, y 2, al final del
fichero. Para determinar la posicin en la que se encuentra actualmente el puntero
se utiliza el mtodo tell(), que devuelve un entero indicando la distancia en bytes
desde el principio del fichero.

El modulo pickle()
Cuando quers grabar tipos de datos ms complejos como listas, diccionarios, o
instancias de clases, las cosas se ponen ms complicadas.
En lugar de tener a los usuarios constantemente escribiendo y debugueando
cdigo para grabar tipos de datos complicados, Python provee un mdulo estndar
llamado pickle. Este es un asombroso mdulo que puede tomar casi cualquier
objeto Python (incluso algunas formas de cdigo Python!), y convertirlo a una
representacin de cadena; este proceso se llama picklear. Reconstruir los objetos
desde la representacin en cadena se llama despicklear.
pickle.dump(x, f)
Para despicklear el objeto, si f es un objeto archivo que fue abierto para lectura:
x = pickle.load(f)
import pickle
lyst = [60, "A string object", 1977]
fileObj = open("items.dat", "wb")
for item in lyst:
pickle.dump(item, fileObj)
fileObj.close()

EXPRESIONES REGULARES
Las expresiones regulares, tambin llamadas regex o regexp, consisten en
patrones que describen conjuntos de cadenas de caracteres. Algo parecido sera
escribir en la lnea de comandos de Windows dir *.exe *.exe sera una expresin

regular que describira todas las cadenas de caracteres que empiezan con
cualquier cosa seguida de .exe, es decir, todos los archivos exe.
Si quisiramos comprobar si la cadena es python, jython, cython o cualquier
otra cosa que termine en ython, podramos utilizar el carcter comodn, el punto
.:
En el caso de que necesitramos el carcter . en la expresin regular, o cualquier
otro de los caracteres especiales, tendramos que escaparlo utilizando la barra
invertida
import re
re.match(".ython", "jython")
re.match("...\.", "abc.")
Si necesitramos una expresin que slo resultara cierta para las cadenas
python, jython y cython y ninguna otra, podramos utilizar el carcter | para
expresar alternativa escribiendo los tres subpatrones completos:
if re.match("python|jython|cython", "python"):
print("encontrado solamente en el grupo")
re.match((p|j|c)ython, python)
Otra opcin consistira en encerrar los caracteres p, j y c entre corchetes para
formar una clase de caracteres, indicando que en esa posicin puede colocarse
cualquiera de los caracteres de la clase. re.match([pjc]ython, python)
Y si quisiramos comprobar si la cadena es python0, python1, python2, ... ,
python9? En lugar de tener que encerrar los 10 dgitos dentro de los corchetes
podemos utilizar el guin, que sirve para indicar rangos.
re.match(python[0-9], python0)
Si quisiramos, por ejemplo, que el ltimo carcter fuera o un dgito o una letra
simplemente se escribiran dentro de los corchetes todos los criterios, uno detras
de otro.
re.match(python[0-9a-zA-Z], pythonp)
Los conjuntos de caracteres tambin se pueden negar utilizando el smbolo ^. La
expresin python[^0-9a-z], por ejemplo, indicara que nos interesan las cadenas
que comiencen por python y tengan como ltimo carcter algo que no sea ni
una letra minscula ni un nmero.
re.match(python[^0-9a-z], python+)
El uso de [0-9] para referirse a un dgito no es muy comn, ya que, al ser la
comprobacin de que un carcter es un dgito algo muy utilizado, existe una
secuencia especial equivalente: \d. Existen otras secuencias disponibles que
listamos a continuacin:

\d: un dgito. Equivale a [0-9]


\D: cualquier carcter que no sea un dgito. Equivale a [^0-9]
\w: cualquier caracter alfanumrico. Equivale a [a-zA-Z0-9_]
\W: cualquier carcter no alfanumrico. Equivale a [^a-zAZ0-9_]


\s: cualquier carcter en blanco. Equivale a [ \t\n\r\f\v]

\S: cualquier carcter que no sea un espacio en blanco. Equivale a [^


\t\n\r\f\v]
El carcter * es similar a +, pero en este caso lo que se sita a su izquierda puede
encontrarse cero o mas veces.
El carcter ? indica opcionalidad, es decir, lo que tenemos a la izquierda puede o
no aparecer (puede aparecer 0 o 1 veces).
Finalmente las llaves sirven para indicar el nmero de veces exacto que puede
aparecer el carcter de la izquierda, o bien un rango de veces que puede aparecer.
Por ejemplo {3} indicara que tiene que aparecer exactamente 3 veces, {3,8}
indicara que tiene que aparecer de 3 a 8 veces, {,8} de 0 a 8 veces y {3,} tres
veces o mas (las que sean).
Otro elemento interesante en las expresiones regulares, para terminar, es la
especificacin de las posiciones en que se tiene que encontrar la cadena, esa es la
utilidad de ^ y $, que indican, respectivamente, que el elemento sobre el que
actan debe ir al principio de la cadena o al final de esta.
import re
line = 'asdf fjdk; afed, fjek,asdf, foo'
print(re.split(r'[;,\s]\s*', line))

Para ubicar fechas en cadena de texto


import re
datepat = re.compile(r'\d+/\d+/\d+')
text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
print(datepat.findall(text))
#extrae las fechas
print(re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)) #extrae las fecha y luego las
invierte
Para transformar fechas en texto legible
import re
from calendar import month_abbr
text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
def change_date(m):
mon_name = month_abbr[int(m.group(1))]
return '{} {} {}'.format(m.group(2), mon_name, m.group(3))
print(datepat.sub(change_date, text))
Si nuestra cadena de texto tiene saltos de linea no podremos visualizar tan fcil
The re.compile() function accepts a flag, re.DOTALL, which is useful here. It makes
the . in a regular expression match all characters, including newlines. For example:
import re
comment = re.compile(r'/\*(.*?)\*/')
text1 = '/* this is a comment */'
text2 = '''/* this is a
multiline comment */
... '''

print(comment.findall(text1))
print(comment.findall(text2))

#si se visualiza
#no hay nada

comment = re.compile(r'/\*((?:.|\n)*?)\*/')
print(comment.findall(text2)) #ahora si se visulaiza el comentario del text2

SOCKETS
Best-Case, Worst-Case, and Average-Case Performance
Binary Search of a Sorted List

GUI

Atributos de windows (Tkinter)

.iconbitmap(name_ico)
icono de la ventana
.geometry(widt x heigth + poosicionX + posicinY)
.title(titulo)

Cuadro de dialogo
from tkinter.messagebox import askokcancel # get canned std dialog
if askokcancel('Verify exit', "Really quit?"):
pass
otros cuadros de dialogos
from tkinter.filedialog import askopenfilename # get standard dialogs
from tkinter.colorchooser import askcolor # they live in Lib\tkinter
from tkinter.messagebox import askquestion, showerror
from tkinter.simpledialog import askfloat
askyesno and askokcancel
# retornan True or False
asksaveasfile
#pregunta si va guardar un archivo

Controles
Label A simple message area
Button A simple labeled push-button widget
Frame A container for attaching and arranging other widget objects
Toplevel, Tk A new window managed by the window manager
Message A multiline label Entry A simple single-line text-entry field
Checkbutton A two-state button widget, typically used for multiple-choice
selections
Radiobutton A two-state button widget, typically used for single-choice selections
Scale A slider widget with scalable positions
PhotoImage An image object used for displaying full-color images on other
widgets

BitmapImage An image object used for displaying bitmap images on other


widgets
Menu A set of options associated with a Menubutton or top-level window
Menubutton A button that opens a Menu of selectable options and submenus
Scrollbar A control for scrolling other widgets (e.g., listbox, canvas, text)
Listbox A list of selection names
Text A multiline text browse/edit widget, with support for fonts, and so on
Canvas A graphic drawing area, which supports lines, circles, photos, text, and so
on

Propiedades semejantes
width
height
x
posicion x
y
posicion y
bg
Background
fg
Foreground
command representa uno de los eventos importantes
Button and MessageButton
from tkinter import *
from tkinter.messagebox import showinfo
def reply():
showinfo(title = 'popus', message="Boton prsionado")
windows = Tk()
windows.iconbitmap("icopro.ico")
button = Button(windows, text="presione",width = 65, height = 25
,command=reply).place(x=20, y=50)
windows.mainloop()

Frames
grid = Frame(windows)
fieldnames = ('name', 'age', 'job', 'pay')
entries = {}
for (ix, label) in enumerate(('key',) + fieldnames):
lab = Label(grid, text=label)
ent = Entry(grid)
lab.grid(row=ix, column=0)
ent.grid(row=ix, column=1)
entries[label] = ent
grid.pack()
windows.mainloop()
windows.after(tim_expire, showinfo, popus, spam)
When widgets are packed, we can specify which side of their parent they should be
attached toTOP, BOTTOM, LEFT, or RIGHT.
.pack(expand=YES, fill=BOTH)

Para salir de la ventana podemos invocar al metodo exit del sys, docle click y un
solo click accionamos
import sys
from tkinter import *
def hello(event):
print('Press twice to exit')
def quit(event):
print('Hello, I must be going...')
sys.exit()
win = Tk()
widget = Button(win, text='Hello event world')
widget.pack()
widget.bind('<Button-1>', hello) # bind left mouse clicks
widget.bind('<Double-1>', quit) # bind double-left clicks
win.mainloop()
Tambin podemos invocar el mtodo quite del propio tkinter
btnsalir = Button(win, text="salir", command =win.quit)
Eventos del button
widget.bind('', onLeftClick) # mouse button clicks
widget.bind('', onRightClick)
widget.bind('', onMiddleClick) # middle=both on some mice
widget.bind('', onDoubleLeftClick) # click left twice
widget.bind('', onLeftDrag) # click left and move
widget.bind('', onKeyPress) # all keyboard presses
widget.bind('', onArrowKey) # arrow button pressed
widget.bind('', onReturnKey) # return/enter key pressed
<FocusIn>
<FocusOut>
<Motion>
<ButtonRelease>
<Enter>
<Leave>
Configuraciones de un Label
labelfont = ('times', 20, 'bold') # family, size, style
widget = Label(root, text='Hello config world')
widget.config(bg='black', fg='yellow') # yellow text on black label
widget.config(font=labelfont) # use a larger font
widget.config(height=3, width=20) # initial size: lines,chars
Caja de Texto Entry
.focus
si tiene el foco
def fetch():
print('Input => "%s"' % ent.get()) # get text
ent = Entry(windows)
ent.focus() # save a click
ent.bind('', (lambda event: fetch())) # on enter key

Checkbutton

chk = Checkbutton(root, text=str(0), command=onPress)

Radio Buttons
.select()
.deselect()

Scales (Slider)
scl = Scale(root, from_=-100, to=100, tickinterval=50, resolution=1,
orient='horizontal', length = 400, showvalue=YES)

Images
PhotoImage(file=namefile)

Canvas
from tkinter import *
root = Tk()
can = Canvas(root, width = 500, height = 400, background = "blue")
can.create_line(0,0, 200, 200, fill="white", width=12)
can.create_rectangle(0,50, 0, 100, fill="white", width=160)
can.create_arc(x0, y0, x1, y1, start, extent, .... fill, width, style)
can.create_polygon(.... fill, outline"color del borde")
can.create_oval(.... fill, outline"color del borde")
can.create_text(x0, y0, text, font)
can.create_bitmap(x, y, bitmap, foreground, background)
can.create_image(x,y, photo"PhotoImage")
can.pack(side=TOP)
canv.config(scrollregion=(0, 0, 300, 1000))
root.mainloop()
Un ejemplo con canvas
from tkinter import *
trace = False
class CanvasEventsDemo:
def __init__(self, parent=None):
canvas = Canvas(width=300, height=300, bg='beige')
canvas.pack()
canvas.bind('<ButtonPress-1>', self.onStart) # click
canvas.bind('<B1-Motion>', self.onGrow) # and drag
canvas.bind('<Double-1>', self.onClear) # delete all
canvas.bind('<ButtonPress-3>', self.onMove) # move latest
self.canvas = canvas
self.drawn = None
self.kinds = [canvas.create_oval, canvas.create_rectangle]
def onStart(self, event):
self.shape = self.kinds[0]
self.kinds = self.kinds[1:] + self.kinds[:1] # start dragout
self.start = event
self.drawn = None
def onGrow(self, event): # delete and redraw

canvas = event.widget
if self.drawn: canvas.delete(self.drawn)
objectId = self.shape(self.start.x, self.start.y, event.x, event.y)
if trace: print(objectId)
self.drawn = objectId
def onClear(self, event):
event.widget.delete('all') # use tag all
def onMove(self, event):
if self.drawn: # move to click spot
if trace:
print(self.drawn)
canvas = event.widget
diffX, diffY = (event.x - self.start.x), (event.y - self.start.y)
canvas.move(self.drawn, diffX, diffY)
self.start = event
CanvasEventsDemo()
mainloop()

Menu
from tkinter import *
def hello():
print("hello!")
root = Tk()
# create a toplevel menu
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=hello)
filemenu.add_command(label="Save", command=hello)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", command=hello)
editmenu.add_command(label="Copy", command=hello)
editmenu.add_command(label="Paste", command=hello)
menubar.add_cascade(label="Edit", menu=editmenu)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="About", command=hello)
menubar.add_cascade(label="Help", menu=helpmenu)
# display the menu
root.config(menu=menubar)
root.mainloop()

Grid
from tkinter import *
numrow, numcol = 5, 4
rows = []

for i in range(numrow):
cols = []
for j in range(numcol):
ent = Entry(relief=RIDGE)
ent.grid(row=i, column=j, sticky=NSEW)
ent.insert(END, '%d.%d' % (i, j))
cols.append(ent)
rows.append(cols)
sums = []
for i in range(numcol):
lab = Label(text='?', relief=SUNKEN)
lab.grid(row=numrow, column=i, sticky=NSEW)
sums.append(lab)
def onPrint():
for row in rows:
for col in row:
print(col.get(), end=' ')
print()
print()
def onSum():
tots = [0] * numcol
for i in range(numcol):
for j in range(numrow):
tots[i] += eval(rows[j][i].get()) # sum column
for i in range(numcol):
sums[i].config(text=str(tots[i])) # display in GUI
def onClear():
for row in rows:
for col in row:
col.delete('0', END)
col.insert(END, '0.0')
for sum in sums:
sum.config(text='?')
import sys
Button(text='Sum', command=onSum).grid(row=numrow+1, column=0)
Button(text='Print', command=onPrint).grid(row=numrow+1, column=1)
Button(text='Clear', command=onClear).grid(row=numrow+1, column=2)
Button(text='Quit', command=sys.exit).grid(row=numrow+1, column=3)
mainloop()

ScrolledText
import _thread, queue, time
dataQueue = queue.Queue() # infinite size
def producer(id):
for i in range(5):
time.sleep(0.1)
print('put')
dataQueue.put('[producer id=%d, count=%d]' % (id, i))
def consumer(root):

try:
print('get')
data = dataQueue.get(block=False)
except queue.Empty:
pass
else:
root.insert('end', 'consumer got => %s\n' % str(data))
root.see('end')
root.after(250, lambda: consumer(root)) # 4 times per sec
def makethreads():
for i in range(4):
_threa.start_new_thread(producer, (i,))
# mainGUI thread: spawn batch of worker threads on each mouse click
from tkinter.scrolledtext import ScrolledText
root =ScrolledText()
root.pack()
root.bind('<Button-1>', lambda event: makethreads())
consumer(root) # start queue check loop in main thread
root.mainloop() # pop-up window, enter tk event loop

OpenFile and SaveFile


from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
class Demo(Frame):
def __init__(self,parent=None):
Frame.__init__(self,parent)
self.pack()
Label(self, text ="Basic demos").pack()
Button(self, text='open', command=self.openfile).pack(fill=BOTH)
Button(self, text='save', command=self.savefile).pack(fill=BOTH)
self.open_name = self.save_name = ""
def openfile(self): # save user results
self.open_name = askopenfilename() # use dialog options here
def savefile(self):
self.save_name = asksaveasfilename(initialdir='C:\\Python31')
# display window once
print('popup1...')
mydialog = Demo() # attaches Frame to default Tk()
mydialog.mainloop() # display; returns after windows closed
print(mydialog.open_name) # names still on object, though GUI gone
print(mydialog.save_name)
# Non GUI section of the program uses mydialog here
# display window again
print('popup2...')
mydialog = Demo() # re-create widgets again
mydialog.mainloop() # window pops up again
print(mydialog.open_name) # new values on the object again
print(mydialog.save_name)
# Non GUI section of the program uses mydialog again
print('ending...')

Вам также может понравиться