Tutorial Python 1 BACH

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 114

Contenido

Abriendo tu apetito 8

10

10

Pasaje de argumentos 11

Modo interactivo 11

12

Manejo de errores 12

Programas ejecutables de Python 12

13

El archivo de inicio interactivo 13

15

Usar Python como una calculadora 15

15

Cadenas de caracteres 18

Cadenas de texto Unicode 22

Listas 24

26

28

La sentencia if 28

La sentencia for 28

29

Las sentencias break, continue, y else en lazos 30

La sentencia pass 30

Definiendo funciones 31

33

33

Palabras claves como argumentos 34

Listas de argumentos arbitrarios 36


Desempaquetando una lista de argumentos 36

Formas con lambda 37

38

38

Estructuras de datos 40

40

Usando listas como pilas 41

Usando listas como colas 42

42

43

44

45

Tuplas y secuencias 46

Conjuntos 47

Diccionarios 48

49

50

Comparando secuencias y otros tipos 51

52

53

54

54

Archivos "compilados" de Python 55

56

56

Paquetes 58

Importando * desde un paquete 60

Referencias internas en paquetes 61

61

Entrada y salida 63

Formateo elegante de la salida 63


Viejo formateo de cadenas 66

Leyendo y escribiendo archivos 67

67

69

Errores y excepciones 71

Errores de sintaxis 71

Excepciones 71

Manejando excepciones 72

Levantando excepciones 75

Excepciones definidas por el usuario 75

Definiendo acciones de limpieza 77

Acciones predefinidas de limpieza 78

Clases 79

Unas palabras sobre nombres y objetos 79

Alcances y espacios de nombres en Python 79

Un primer vistazo a las clases 81

81

Objetos clase 82

Objetos instancia 83

84

Algunas observaciones 85

Herencia 86

87

Variables privadas 88

Cambalache 89

89

Iteradores 90

Generadores 92

Expresiones generadoras 92

94

Interfaz al sistema operativo 94


Comodines de archivos 94

95

95

Coincidencia en patrones de cadenas 95

96

Acceso a Internet 96

Fechas y tiempos 97

97

98

Control de calidad 98

Las pilas incluidas 99

100

Formato de salida 100

Plantillas 101

Trabajar con registros estructurados conteniendo datos binarios 102

Multi-hilos 103

Registrando 104

104

Herramientas para trabajar con listas 105

106

108

109

109

109

Atajos de teclado 110

111

113

115
las plataformas.

http://www.python.org/, y

un lenguaje de extensiones para aplicaciones personalizables.

el sistema de Python. Es bueno tener un interprete de Python a mano para experimentar, sin embargo

biblioteca de Python descriptos en la Referencia de la Biblioteca de Python.

glosario.

7
Abriendo tu apetito

Si sos un desarrollador de software profesional, tal vez necesites trabajar con varias bibliotecas de
C/C++/Java pero encuentres que se hace lento el ciclo usual de escribir/compilar/testear/recompilar. Tal

Python es el lenguaje justo para ti.

para algunas de estas tareas, pero los scripts se lucen para mover archivos de un lado a otro y para

programa en C/C++/Java, pero puede tomar mucho tiempo de desarrollo obtener al menos un primer

estructura y soporte para programas grandes que lo que lo que pueden ofrecer los scripts de Unix o
lenguaje
de muy alto nivel

en Python que en esos lenguajes.

cosas como entrada/salida a archivos, llamadas al sistema, sockets, e incluso interfaces a sistemas de

Python es un lenguaje interpretado, lo cual puede ahorrarte mucho tiempo durante el desarrollo ya que no

cortos que sus programas equivalentes en C, C++ o Java por varios motivos:

8
no es necesario declarar variables ni argumentos.

Python es extensible

Circus" y no tiene nada que ver con reptiles. Hacer referencias a sketches de Monty Python en la

vas leyendo.

finalmente tocando conceptos avanzados como excepciones y clases definidas por el usuario.

9
/usr/local/bin/python
disponible; poner
posible iniciarlo ingresando la orden:

(Por ejemplo, es una alternativa popular).

siguiente orden en el prompt de DOS:

( en Unix, en Windows) en el prompt primario. Si esto no funciona, se puede salir


.

presentes es ingresar Control-P en el primer prompt de Python que aparezca. Si se escucha un beep, las
tut-interacting
nada, o si aparece

ejecuta un script del archivo.

, que ejecuta las


sentencias en comando -c

normalmente recomendado citar comando entre comillas dobles.

module como si se hubiese ingresado su nombre completo

10
y
solicitada por el programa, como en llamadas a y , son satisfechas desde file. Ya

de Python.

-i

Pasaje de argumentos

pasados al script en la variable , una lista de cadenas de texto. Su longitud es al menos uno;

el nombre del script con vale . Cuando se


usa -c command, vale . Cuando se usa -m module, toma el valor del
-c command o -m module no son
consumidas por el procesador de opciones de Python pero de todas formas almacenadas en

Modo interactivo

una terminal. En este modo espera el siguiente comando con el prompt primario, usualmente tres signos
mayor-que ( prompt secundario, por defecto tres
puntos (

11
Manejo de errores

interactivo, luego retorna al prompt primario; cuando la entrada viene de un archivo, el programa termina

una clausula en una sentencia no son errores en este contexto). Algunos errores son

1
se cancela la entrada y retorna al prompt primario.
, que puede ser manejada con una sentencia
.

Programas ejecutables de Python


En los sistemas Unix y tipo BSD, los programas Python pueden convertirse directamente en ejecutables,

la variable de entorno PATH del usuario). deben ser los primeros dos caracteres del archivo. En
), no como en Windows ( ).
se usa en Python para comenzar un comentario.

chmod:

con para que al hacerle doble click a un archivo Python


, en este caso se omite la ventana con la consola
que normalmente aparece.

12
para definir la

encoding
seleccionada. La lista de posibles codificaciones se puede encontrar en la Referencia de la Biblioteca de
.

Si tu editor tiene soporte para guardar archivos como con marca de orden de byte

activa

(solo usado en sistemas Unix).

soporta usar caracteres no-ASCII en identificadores. Para mostrar todos estos caracteres de forma

los caracteres del archivo.

El archivo de inicio interactivo

PYTHONSTARTUP
con el nombre de un archivo que contenga tus comandos de inicio. Esto es similar al archivo

un script ni cuando file:/dev/tty se explicita como una fuente de comandos (que de otro modo se comporta

interactivos se ejecutan, entonces los objetos que define o importa pueden ser usados sin cualificaciones
y .

13
inicio global usando algo como

1 Un problema con el paquete GNU Readline puede evitar que funcione.

14
En los siguientes ejemplos, las entradas y salidas son distinguidas por la presencia o ausencia de los
prompts ( and

Muchos de los ejemplos de este manual, incluso aquellos ingresados en el prompt interactivo, incluyen
, y se extienden hasta el

interpretados por Python, pueden omitirse cuando se escriben ejemplos.

Algunos ejemplos:

Usar Python como una calculadora

primario,

La sintaxis es sencilla: los operadores , , y

15
El signo igual (

Las variables deben estar "definidas" (con un valor asignado) antes de que puedan usarse, o un error

operandos convierten los enteros a punto flotante:

o
.

16
z y .

, y ) no funciona para

para obtener esta magnitud (como un flotante) o para obtener la parte real.

. Esto significa que cuando

17
Cadenas de caracteres

distintas formas. Pueden estar encerradas en comillas simples o dobles:

O, las cadenas de texto pueden ser rodeadas en un par de comillas triples: o . No se necesita

18
...produce la siguiente salida:

Si se hace de la cadena de texto una cadena "cruda", la secuencia

El interprete imprime el resultado de operaciones entre cadenas de la misma forma en que son tecleadas
como entrada: dentro de comillas, y con comillas y otros caracteres raros escapados con barras invertidas,
para mostrar el valor preciso. La cadena de texto es encerrada con comillas dobles si contiene una comilla
, descrita
luego, puede ser usado para escribir cadenas sin comillas o escapes).

Las cadenas de texto pueden ser concatenadas (pegadas juntas) con el operador y repetidas con :

; esto solo funciona con dos literales, no con


expresiones arbitrarias:

19
Icon, se pueden especificar subcadenas con la
puntos.

A diferencia de las cadenas de texto en C, en Python no pueden ser modificadas. Intentar asignar a una

es .

20
elemento (no rebanada):

entre

n n, por ejemplo:

i a j consiste en todos los caracteres entre los puntos

21
etiquetados i y j, respectivamente.

es 2.

devuelve la longitud de una cadena de texto:

typesseq

tipos secuencias, y soportan las operaciones comunes para esos tipos.

string-methods
Tanto las cadenas de texto normales como las cadenas de texto Unicode soportan una gran cantidad

new-string-formatting
.
string-formatting

Cadenas de texto Unicode

programadores almacenen texto: el objeto Unicode. Puede ser usado para almacenar y manipular datos
Unicode (ver http://www.unicode.org/) y se integran bien con los objetos existentes para cadenas de texto,

Crear cadenas Unicode en Python es tan simple como crear cadenas de texto normales:

La

22
La secuencia de escape

caracteres de Latin-1.

suceder al trabajar con expresiones regulares.

Unicode en las bases de codificaciones conocidas.

da acceso a todos los codecs (CODificadores y DECodificadores).


Latin-1, ASCII, UTF-8, y
UTF-16

rango 0-127 y rechaza cualquier otro con un error. Cuando una cadena Unicode se imprime, escribe en un

23
Listas
Python tiene varios tipos de datos compuestos
lista

A diferencia de las cadenas de texto, que son inmutables, es posible cambiar un elemento individual de
una lista:

totalmente:

24
Es posible anidar listas (crear listas que contengan otras listas), por ejemplo:

25
podemos escribir una subsecuencia inicial de la serie de Fibonacci

: las variables``a`` y toman en forma simultanea

derecha son evaluadas de izquierda a derecha.


El bucle ) sea verdadera. En Python, como

una cadena de texto o una lista, de hecho cualquier secuencia; cualquier cosa con longitud distinta

(igual a),
(distinto a).
El cuerpo sangrado

26
escribe el valor de la o las expresiones que se le pasan. Difiere de

formatear cosas de una forma agradable:

27
que acabamos de introducir, Python soporta las sentencias de control de
flujo que podemos encontrar en otros lenguajes, con algunos cambios.

La sentencia
. Por ejemplo:

, y el bloque es opcional. La palabra reservada ' ' es


... ...
... sustituye las sentencias o encontradas en otros lenguajes.

La sentencia
La sentencia en Python difiere un poco de lo que uno puede estar acostumbrado en lenguajes como

la sentencia
texto), en el orden que aparecen en la secuencia. Por ejemplo:

28
rebanada es conveniente para esto:

El valor final dado nunca es parte de la lista;

'paso'):

tut-loopidioms.

29
Las sentencias , ,y en
lazos
La sentencia , como en C, termina el lazo o

La sentencia

que es ejecutada cuando el lazo termina, luego


de agotar la lista (con ), pero no cuando el lazo es
terminado con la sentencia

La sentencia
La sentencia

30
Otro lugar donde se puede usar

mayor. El se ignora silenciosamente:

Definiendo funciones

La palabra reservada se usa para definir

docstring
tut-docstrings.)

La

), aunque si pueden ser


referenciadas.

por valor valor es

31
2
siempre una referencia a un objeto, no el valor del objeto).

sirve como un mecanismo general para renombrar:

aburrido. Este valor se llama


valor :

imprimirlos:

La sentencia
argumento retorna .

32
La sentencia llama a un del objeto lista

usando clases tut-classes

ser combinadas.

que puede ser llamada con menos argumentos que los que permite. Por ejemplo:

pasando uno de los argumentos opcionales:

o pasando todos los argumentos:

, la cual prueba si una secuencia contiene o no un


determinado valor.

, entonces:

33
.

Advertencia importante:

Palabras claves como argumentos


.

34
...puede ser llamada de cualquiera de las siguientes formas:

En general, una lista de argumentos debe tener todos sus argumentos posicionales seguidos por los

typesmapping) conteniendo todos los argumentos nombrados excepto aquellos correspondientes a un


(descripto en

debe ocurrir antes de

35
de la lista de nombres de argumentos nombrados es llamado antes
de imprimir el contenido del diccionario ; si esto no se hace, el orden en que los

Listas de argumentos arbitrarios

tut-tuples).

Desempaquetando una lista de argumentos

espera los argumentos inicio y fin

argumentos de una lista o una tupla ::

36
Del mismo modo, los diccionarios pueden entregar argumentos nombrados con el operador ::

Formas con lambda

se pueden crear

. Las formas con lambda pueden ser usadas en cualquier lugar que se requieran

en el que son contenidas:

37
siguiente

en la cadena de texto). Los espacios en blanco "equivalentes" a este sangrado son luego quitados del

todos los espacios en blanco del comienzo deben ser quitados. La equivalencia de espacios en blanco

hablar sobre
formateados

tremendamente a lograrlo.

38
Para Python, PEP 8

dejarlos de lado.

abiertos, uno al lado del otro, en pantallas grandes.

funciones.

Usar docstrings.
Usar espacios alrededor de operadores y luego de las comas, pero no directamente dentro de
.
para
clases y
tut-firstclasses

2 En realidad, llamadas por referencia de objeto

39
Estructuras de datos

(x)
.

(L)
.

(i,x)

inserta al principio de la lista, y


equivale a .

(x)
x

( )

(x)
x

(x)
x aparece en la lista.

()

()
Invierte los elementos de la lista, in situ.

40
Usando listas como pilas

cima de la pila, use

41
Usando listas como colas

use con

, , y
.

cuales es verdadero. Si secuencia es un o

llama a
devuelve una lista de los valores retornados. Por ejemplo, para calcular unos cubos:

si alguna

42
funcion

Un tercer argumento puede pasarse para indicar el valor inicial. En este caso el valor inicial se devuelve

, y/o
las listas formadas usando esas construcciones.

o
y

43
y pueden aplicarse a expresiones
complejas y funciones anidadas:

poderosa pero, como toda herramienta poderosa, deben usarse con cuidado, o ni siquiera usarse.

Considera el siguiente ejemplo de una matriz de 3x3 como una lista que contiene tres listas, una por fila:

44
anidada:

Ver tut-unpacking-arguments

Hacer referencia al nombre


Veremos otros usos para

45
Tuplas y secuencias

seccionado. Estas son dos ejemplos de datos de tipo secuencia (ver typesseq). Como Python es un

tupla.

Las tuplas tienen muchos usos. Por ejemplo: pares ordenados (x, y), registros de empleados de una base

individuales de una tupla (aunque puedes simular bastante ese efecto mediante seccionado y

es un ejemplo de empaquetado de tuplas: los valores


, y se empaquetan juntos en una tupla.

46
Esto se llama, apropiadamente, desempaquetado de secuencias, y funciona para cualquier secuencia en
el lado derecho del igual. El desempaquetado de secuencias requiere que la lista de variables a la

secuencias.

Conjuntos
conjuntos

47
Diccionarios
diccionario (ver typesmapping). Los diccionarios se
encuentran a veces en otros lenguajes como "memorias asociativas" o "arreglos asociativos". A diferencia
claves,

y .

Lo mejor es pensar en un diccionario como un conjunto no ordenado de pares clave: valor, con el

. Colocar una lista de pares clave:valor separados por comas entre las

presentan en la salida.

Las operaciones principales sobre un diccionario son guardar un valor con una clave y extraer ese valor

para guardar un valor, el valor que estaba asociado con esa clave se pierde. Es un error extraer un valor
usando una clave no existente.

de un diccionario devuelve una lista de todas las claves en uso de ese diccionario, en
sobre la lista de claves).
.

El constructor crea un diccionario directamente desde listas de pares clave-valor guardados

48
preparadas para la tarea de proveer pares clave-valor al constructor .

argumentos por palabra clave:

Cuando iteramos sobre diccionarios, se pueden obtener al mismo tiempo la clave y su valor
.

49
Para iterar sobre una secuencia en orden inverso, se especifica primero la secuencia al derecho y luego
.

la cual devuelve una nueva


lista ordenada dejando a la original intacta.

Las condiciones usadas en las instrucciones e


comparaciones.

y
Los operadores e comparan si dos objetos son realmente el mismo objeto; esto es

Las comparaciones pueden encadenarse. Por ejemplo, verifica si es menor que y


es igual a .

Las comparaciones pueden combinarse mediante los operadores booleanos y, y el resultado de


. Estos tienen
tiene la mayor prioridad y la
menor, o sea que equivale a . Como siempre, los

50
Los operadores booleanos y son los llamados operadores cortocircuito: sus argumentos se

resultado. Por ejemplo, si y son verdaderas pero es falsa, en


. Cuando se usa como un valor general y no como un booleano, el valor devuelto de un

ejemplo,

encontrado en programas en C: escribir .

Comparando secuencias y otros tipos

orden

iguales, se considera que las secuencias son iguales. Si una secuencia es una subsecuencia inicial de la

orden ASCII para caracteres individuales. Algunos ejemplos de comparaciones entre secuencias del
mismo tipo:

los tipos se ordenan por su nombre. Por lo tanto, una lista (


cadena ( ).

del lenguaje.

51
texto para preparar la entrada para el interprete y ejecutarlo con ese archivo como entrada. Esto es
conocido como crear un , o script

Para soportar esto, Python tiene una manera de poner definiciones en un archivo y usarlos en un script o

pueden ser importadas principal


acceso en un script ejecutado en el nivel superior y en el modo calculadora).

favorito para crear un archivo llamado en el directorio actual, con el siguiente contenido:

Esto no mete los nombres de las funciones definidas en directamente en el espacio de nombres

funciones:

52
primera vez que el
3

declaraciones

(entonces, en el ejemplo, no se define).

Esto importa todos los nombres excepto aquellos que comienzan con un subrayado ( ).

53
Nota

, por ejemplo .

con el
valor de

en el
directorio actual, y luego en la lista de directorios especificada por la variable de entorno PYTHONPATH.
PATH, o sea, una lista de nombres de directorios.
Cuando PYTHONPATH

, la cual se
inicializa con el directorio que contiene al script de entrada (o el directorio actual), PYTHONPATH, y el

54
tut-standardmodules

Archivos "compilados" de Python

existe en el directorio donde se encuentra


(lo que se
denomina bytecode usado para crear
se ignora si estos no coinciden.

. Siempre que se compile


satisfactoriamente el . No es un

es

de diferentes arquitecturas.

Algunos consejos para expertos:


-O
almacena en archivos
declaraciones . Cuando se usa -O, se optimiza todo el bytecode; se ignoran los archivos
y los archivos se compilan a bytecode optimizado.
Pasando dos opciones -O -OO

incorrectamente. Actualmente, solamente se remueven del bytecode a las cadenas ,


resultando en archivos

o que cuando se lee


del o es la velocidad con que se
cargan.

los archivos o . Por lo tanto, el tiempo de comienzo de un script puede reducirse

o directamente desde

Es posible tener archivos llamados (o -O) sin un


archivo

55
puede crear archivos (o archivos
-O

y definen las cadenas usadas como cursores


primarios y secundarios:

La variable
PYTHONPATH, o a
PYTHONPATH

ordenada de cadenas:

56
Sin argumentos,

57
Paquetes
Los paquetes son una manera de estructurar los espacios de nombres de Python usando "nombres de
en un
paquete llamado

archivos y datos de sonidos. Hay diferentes formatos de archivos de sonido (normalmente reconocidos por
, ,

58
, buscando el subdirectorio
del paquete.

Los archivos se necesitan para hacer que Python trate los directorios como que contienen
, de esconder sin

simple,
, descrita luego.

. Debe hacerse referencia al mismo con el nombre


completo.

, lo deja disponible sin su prefijo de paquete, por lo que puede

Por otro lado, cuando se usa la sintaxis como

59
Importando * desde un paquete
? Idealmente, uno

ECHO.PY , o . (Por ejemplo, Windows 95 tiene la

de un paquete define una lista


llamada
se hace . Es tarea del autor del paquete mantener actualizada esta lista

no ven un uso para importar * en sus paquetes. Por ejemplo, el archivo

Si no se define no importa todos los

importado el paquete
en

echo y surround
definidos en el paquete . (Esto
).

ciertos patrones.

60
! De hecho, esta

mismo nombre desde otros paquetes.

Referencias internas en paquetes

module. De hecho, tales referencias son tan comunes que la

puede simplemente hacer o

el nombre dado.

Cuando se estructuran los paquetes en subpaquetes (como en el ejemplo

en el paquete , puede hacer


.

. Estos relativos

relativo. En el ejemplo

absolutos.

paquete.

61
3

nombres global.

62
Entrada y salida

posibilidades.

Formateo elegante de la salida


Hasta ahora encontramos dos maneras de escribir valores:
de los objetos tipo archivo; el archivo de

separados por espacios. Hay dos maneras de formatear tu salida; la primera es hacer todo el manejo de

emparejar cadenas a un determinado ancho; estas las discutiremos en breve. La otra forma es usar el
.

tiene maneras de convertir cualquier valor a una cadena: pasalos a las funciones o .

devuelve representaciones de los valores que son bastante legibles por humanos,
mientras que

para consumo humano,

distintas.

Algunos ejemplos:

63
64
(Notar que en el primer ejemplo, un espacio entre cada columna fue agregado por la manera en que
trabaja: siempre agrega espacios entre sus argumentos)

de los objetos cadena, el cual ordena una cadena a la derecha


y

.)

positivos y negativos:

es como esto:

Las llaves y caracteres dentro de las mismas (llamados campos de formato) son reemplazadas con los

nombre del argumento.

Se pueden combinar arbitrariamente argumentos posicionales y nombrados:

65
Un y especificador de formato opcionales pueden ir luego del nombre del campo. Esto aumenta el

decimal.

Pasando un entero luego del

hacerse simplemente pasando el diccionario y usando corchetes para acceder a las claves

, que devuelve un
diccionario conteniendo todas las variables locales.

formatstrings.

Viejo formateo de cadenas


El operador
con el estilo de formateo de para ser aplicado al argumento de la derecha, y devuelve la

66
Ya que . Sin

string-formatting.

Leyendo y escribiendo archivos


devuelve un objeto archivo, y es normalmente usado con dos argumentos:
.

El primer argumento es una cadena conteniendo el nombre de archivo. El segundo argumento es otra
modo
puede ser

abre el archivo tanto para leerlo como para


escribirlo. El argumento modo es opcional; si se omite se asume .

En Windows, agregando
como , , y

o
modo binario al leer y escribir tales archivos. En Unix, no hay problema en agregarle una al modo,

, el cual lee alguna cantidad de datos y


los devuelve como una cadena. cantidad cantidad o

cantidad
).

67
lee una sola linea del archivo; el caracter de fin de linea ( ) se deja al final de la cadena,

valor de retorno no sea ambiguo; si


del archivo, mientras que una linea en blanco es representada por

devuelve una lista conteniendo todos las lineas de datos en el archivo. Si se da un


size
completar una linea, y devuelve las lineas de eso. Esto se usa frecuentemente para permitir una lectura

escribe el contenido de la cadena al archivo, devolviendo .

. La

68
desplazamiento a un punto de referencia; el punto de referencia se
selecciona del argumento desde_donde. Un valor desde_donde de 0 mide desde el comienzo del archivo,
desde_donde
puede omitirse, el default es 0, usando el comienzo del archivo como punto de referencia.

para cerrarlo y liberar cualquier recurso del


sistema tomado por el archivo abierto. Luego de llamar , los intentos de usar el objeto archivo

cuando manejamos objetos archivo. Tiene la ventaja que

y que son usados

archivo.

como , que toma una cadena como

69
picklear. Reconstruir los objetos desde la
despicklear. Entre que se picklea y se despicklea, la cadena que

, y un objeto archivo

Para despicklear el objeto, si es un objeto archivo que fue abierto para lectura:

en la Referencia de la
Biblioteca de Python.)

persistente. Ya que es tan ampliamente usado, muchos autores que escriben extensiones de
Python toman el cuidado de asegurarse que los nuevos tipos de datos, como matrices, puedan ser
adecuadamente pickleados y despickleados.

70
Errores y excepciones
probablemente hayas visto algunos. Hay (al menos) dos tipos diferentes de errores: errores de sintaxis y
excepciones.

Errores de sintaxis

precede a la flecha: en el
ejemplo, el error se detecta en el , ya que faltan dos puntos ( ) antes del mismo. Se muestran el

un programa.

Excepciones

excepciones, y no son

71
el tipo se imprime como parte del mensaje: los tipos en el ejemplo son: ,
y

clave reservadas).

trazado del error

bltin-exceptions lista las excepciones predefinidas y sus significados.

Manejando excepciones

programa (usando
.

funciona de la siguiente manera:


Primero, se ejecuta el bloque try y ).
bloque except
.
bloque try, el resto del bloque se saltea. Luego, si
, se ejecuta el
bloque except .
, esta se pasa a
declaraciones
manejada

, para especificar manejadores para distintas

72
correspondiente , no en otros manejadores del mismo . Un

Las declaraciones ... tienen un bloque else


bloque try no genera una

El uso de porque evita capturar accidentalmente


... .

argumento de la

El
. Por
y para que se pueda

73
acceder o mostrar los argumentos directamente, sin necesidad de hacer referencia a .

Pero se recomienda no usar


.

desee:

Los manejadores de excepciones no manejan solamente las excepciones que ocurren en el bloque try,

indirectamente) dentro del bloque try. Por ejemplo:

74
Levantando excepciones

El argumento de

escribirse como

te permite relanzarla:

Excepciones definidas por el usuario

, directa o indirectamente. Por ejemplo:

75
de fue sobrescrito. El nuevo comportamiento
simplemente crea el atributo valor. Esto reemplaza el comportamiento por defecto de crear el atributo
args.

Las clases de Excepciones pueden ser definidas de la misma forma que cualquier otra clase, pero

76
tut-classes.

Definiendo acciones de limpieza

ejecutadas bajo ciertas circunstancias. Por ejemplo:

Una

o
.
es dejada via , or y
):

77
lanzada al dividir
y por lo tanto es relanzada luego de que se
.

conexiones de red), sin importar si el uso del recurso fue exitoso.

Acciones predefinidas de limpieza

siguiente ejemplo, que intenta abrir un archivo e imprimir su contenido en la pantalla.:

de que termine de ejecutarse. Esto no es un problema en scripts simples, pero puede ser un problema en
permite que objetos como archivos sean usados de una

f siempre es cerrado, incluso si se encuentra un

78
Clases

pueden tener una cantidad arbitraria de datos.

, y todas las funciones miembro son virtuales. Como en Modula-3, no hay atajos para hacer

diferencia de C++ y Modula-3, los tipos de datos integrados pueden usarse como clases base para que el

instancias de la clase.

Unas palabras sobre nombres y objetos

objeto. Esto se conoce como aliasing en otros lenguajes. Normalmente no se aprecia esto a primera vista

cadenas, tuplas). Sin embargo, el aliasing, o renombrado, tiene un efecto posiblemente sorpresivo sobre

otros tipos. Esto se usa normalmente para beneficio del programa, ya que los renombres funcionan como

cambio; esto elimina la necesidad de tener dos formas diferentes de pasar argumentos, como en Pascal.

Alcances y espacios de nombres en Python


Antes de ver clases, primero debo decirte algo acerca de las reglas de alcance de Python. Las

79
Comencemos con unas definiciones.

Un espacio de nombres
implementados en este momento como diccionarios de Python, pero eso no se nota para nada (excepto

conjunto de nombres incluidos (funciones como , y los nombres de excepciones integradas); los

prefijo.

Por cierto, yo uso la palabra atributo


, es un atributo del objeto . Estrictamente hablando, las referencias a nombres
,
y
4

. Los atributos de
. Por ejemplo,
va a eliminar el atributo del objeto con nombre .

Los espacios de nombres se crean en diferentes momentos y con diferentes tiempos de vida. El espacio

, por lo tanto tienen su propio espacio de nombres global.


.)

pasa en realidad es que ese espacio de nombres se "olvida".) Por supuesto, las llamadas recursivas
tienen cada una su propio espacio de nombres local.

Un alcance
directamente. "Accesible directamente" significa que una referencia sin calificar a un nombre intenta
encontrar dicho nombre dentro del espacio de nombres.

directamente accesibles:

los espacios de nombres de las funciones anexas, en las cuales se busca empezando por el

80
el alcance exterior (donde se busca al final) es el espacio de nombres que contiene los
nombres incluidos

Si un nombre se declara como global, entonces todas las referencias y asignaciones al mismo van directo

simplemente crea una nueva variable en el alcance interno, dejando intacta la variable externa del mismo
nombre).

el alcance local referencia al mismo espacio de nombres que el alcance global: el espacio de nombres del

o en efecto,
las asignaciones a nombres siempre van al alcance interno. Las asignaciones no copian datos, solamente
del
espacio de nombres referenciado por el alcance local. De hecho, todas las operaciones que introducen
nuevos nombres usan el alcance local: en particular, las instrucciones y las definiciones de

puede usarse para indicar que ciertas variables viven en el alcance global.)

Un primer vistazo a las clases

nueva.

81
Las definiciones de clases, al igual que las definiciones de funciones (instrucciones ) deben ejecutarse

un

funciones dentro de una clase normalmente tienen una lista de argumentos peculiar, dictada por las

alcance local; por lo tanto, todas las asignaciones a variables locales van a este nuevo espacio de

objeto clase

en el ejemplo).

Objetos clase

Para hacer referencia a atributos


Python:

...entonces y

La

arriba):

...crea una nueva instancia de la clase y asigna este objeto a la variable local .

82
especial llamado , de esta forma:

inicializada se puede obtener haciendo:

puede tener argumentos para mayor flexibilidad. En ese caso, los


.
Por ejemplo,

Objetos instancia

Los atributos de datos se corresponden con las "variables de instancia" en Smalltalk, y con las "variables
miembro" en C++. Los atributos de datos no necesitan ser declarados; tal como las variables locales son
creados la primera vez que se les asigna algo. Por ejemplo, si es la instancia de

El otro tipo de atributo de instancia es el

83
contrario.

Entonces, en nuestro ejemplo, es una


no lo es, dado que no lo es. Pero no es la misma cosa que
; es un

En el ejemplo , esto devuelve la cadena


justo en ese momento:
ejemplo:

fue llamado
especificaba un

es exactamente
equivalente a n argumentos es

clarificar este tema. Cuando se hace referencia un atributo de instancia y no es un atributo de datos, se

llamado con una lista de argumentos, es nuevamente desempaquetado, una lista de argumentos nueva es

esta nueva lista de argumentos.

84
Algunas observaciones

ordinarios de un objeto. En otras palabras, las clases no se usan para implementar tipos de datos
abstractos puros. De hecho, en Python no hay nada que haga cumplir el ocultar datos; todo se basa en

a Python escritas en C.)

cabeza.

llegar a pasar que un programa navegador de clases pueda escribirse de una manera que dependa de

85
Ahora , y son todos atributos de la clase
; siendo exactamente equivalente a .

referencia a su propia clase.

Todo valor es un objeto, y por lo tanto tiene una clase tipo


.

Herencia

El nombre
derivada. En el lugar del nombre de la clase base se permiten otras expresiones arbitrarias. Esto puede

86
el objeto clase se construye, se tiene en cuenta a la clase base. Esto se usa para resolver referencias a

Esta regla se aplica recursivamente si la clase base misma deriva de alguna otra clase.

crea una nueva

de clase correspondiente, descendiendo por la cadena de clases base si es necesario, y la referencia al

.)

. En

accesible como en el alcance global.)

Python tiene dos funciones integradas que funcionan con herencia:


para verificar el tipo de una instancia: devuelve
solo si es o alguna clase derivada de .
para comprobar herencia de clase: da
ya que es una subclase de . Sin embargo, devuelve
porque no es una subclase de
).

un atributo no se encuentra en , se busca en , luego (recursivamente) en las


clases base de

87
y antes que en las clases base de

de o en alguna de sus clases base antes de que puedas


entender las consecuencias de un conflicto de nombres con un atributo de . La regla de buscar
primero en profundidad no hace diferencias entre atributos directos o heredados de .)

Para las clases de estilo nuevo


llamadas cooperativas a

de

puede tener clases derivadas sin afectar el orden de precedencia de sus clases bases). En conjunto, estas

http://www.python.org/download/releases/2.3/mro/.

Variables privadas
Las variables "privadas" de instancia que no pueden accederse excepto desde dentro de un objeto, no

con nombres definidos en las subclases), hay un soporte limitado para este mecanismo. Cualquier
identificador con la forma
final) es textualmente reemplazado por , donde es el nombre
de clase actual al que se le sacan guiones bajos del comienzo (si los tuviera). Se modifica el nombre del

privadas de esta clase en instancias de otras clases. Puede ocurrir que se trunque si el nombre

solo en guiones bajos, no se modifican los nombres de identificadores.

accidentes; es posible acceder o modificar una variable que es considerada como privada. Esto hasta

88
,a oa no considera que el nombre de clase de
la clase que invoca sea la clase actual; esto es similar al efecto de la sentencia , efecto que es de

, y directamente.

Cambalache

y
que obtengan los datos de alguna cadena en memoria intermedia, y pasarlo como
argumento.

es el objeto instancia con el


,y

En la primera forma, debe ser una instancia de o de una clase derivada de ella. La
segunda forma es una abreviatura de:

89
fueran invertidas (dejando
que coincide.

Iteradores

una sentencia :

90
Python. En bambalinas, la sentencia llama a
que accede elementos en el contenedor de a uno por
que le avisa al
bucle del que hay que terminar. Este ejemplo muestra como funciona todo esto:

. Si la clase define
, entonces alcanza con que devuelva :

91
Generadores
Los generadores son una simple y poderosa herramienta para crear iteradores. Se escriben como
funciones regulares pero usan la sentencia cuando quieren devolver datos. Cada vez que

crear:

claro que hacerlo usando variables de instancia tales como y .

Expresiones generadoras
Algunos generadores simples pueden ser codificados concisamente como expresiones usando una

Ejemplos:

92
4
que devuelve el diccionario usado para implementar el espacio de nombres del
es un atributo, pero no es un nombre global. Obviamente, esto

cosas tales como depuradores post-mortem.

93
Interfaz al sistema operativo
provee docenas de funciones para interactuar con el sistema operativo:

Asegurate de usar el estilo en lugar de


, que trabaja bastante diferente.

Las funciones integradas y


:

provee una interfaz de

Comodines de archivos

en directorios:

94
almacenan en el atributo argv como una lista. Por ejemplo, la siguiente salida resulta de
ejecutar

procesa sys.argv . El

del programa
stdin, stdout, y stderr
de alerta y error para que se vean incluso cuando se haya redireccionado stdout:

Coincidencia en patrones de cadenas


provee herramientas de expresiones regulares para un procesamiento avanzado de

concisas y optimizadas:

95
punto flotante:

provee herramientas para realizar selecciones al azar:

Acceso a Internet

para traer data de URLs y para mandar correos:

96
Fechas y tiempos
ofrece clases para manejar fechas y tiempos tanto de manera simple como

que son conscientes de la zona horaria.

, ,
, y .

97
preguntas inmediatamente.

muestra
rapidamente una modesta ventaja de rendimiento:

Control de calidad

desarrolla, y correr esas pruebas frecuentemente durante el proceso de desarrollo.

docstring

se asegure que el

98
, pero permite que se mantenga en

Las pilas incluidas

y hacen que implementar llamadas a

necesita conocimiento directo o manejo de XML.


El paquete es una biblioteca para manejar mensajes de mail, incluyendo MIME y otros
mensajes basados en RFC 2822. Al contrario de y
reciben mensajes, el paquete tiene un conjunto de herramientas completo para construir y
decodificar estructuras complejas de mensajes (incluyendo adjuntos) y para implementar

Los paquetes y proveen un robusto soporte para analizar este popular


soporta lecturas y escrituras directas

enormemente el intercambio de datos entre aplicaciones Python y otras herramientas.


, , y el
paquete .

99
Formato de salida
ajustada para mostrar contenedores grandes o
profundamente anidados, en forma abreviada:

100
:var:`grouping` :function:`format`
separadores de grupo:

Plantillas
(plantilla) con una sintaxis simplificada apta para
ser editada por usuarios finales. Esto permite que los usuarios personalicen sus aplicaciones sin

El formato usa marcadores cuyos nombres se forman con

genera un :

lanza
mediante un diccionario o argumento por nombre. Para algunas aplicaciones los datos suministrados por

marcadores inalterados cuando hay datos faltantes:

101
Las subclases de Template pueden especificar un delimitador propio. Por ejemplo, una utilidad de
renombrado por lotes para un visualizador de fotos puede escoger usar signos de porcentaje para los

y reportes web en HTML.

Trabajar con registros estructurados


conteniendo datos binarios
provee las funciones y para trabajar con formatos de registros

e
dos y cuatro bytes respectivamente. El
ordenamiento little-endian:

102
Multi-hilos

entradas del usuario mientras otras tareas se ejecutan en segundo plano. Un caso de uso relacionado es

puede ejecutar tareas en segundo

103
para alimentar dicho hilo con pedidos desde
otros hilos. Las aplicaciones que usan objetos

Registrando

datagramas, sockets, o un servidor HTTP. Nuevos filtros pueden seleccionar diferentes rutas basadas en
la prioridad del mensaje: , , , , and

objetos, y garbage collection

104
provee herramientas para seguimiento de objetos que no crean una referencia.

se dispara una retrollamada (callback cache de objetos que son


caros de crear:

Herramientas para trabajar con listas


Muchas necesidades de estructuras de datos pueden ser satisfechas con el tipo integrado lista. Sin
embargo, a veces se hacen necesarias implementaciones alternativas con rendimientos distintos.

provee un objeto

) en lugar de
los 16 bytes por elemento habituales en listas de objetos int de Python:

provee un objeto

105
con funciones para manipular listas ordenadas:

provee funciones para implementar heaps basados en listas comunes. El menor valor

provee un tipo de dato


Comparado con
especialmente para:

control del redondeo para satisfacer requerimientos legales o reglamentarios,

106
seguimiento de cifras significativas,

mano.

con punto flotante decimal y punto flotante binario. La diferencia se vuelve significativa si los resultados se

El resultado con

como se la hace a mano, y evita problemas que pueden surgir cuando el punto flotante binario no puede
representar exactamente cantidades decimales.

que son inadecuadas para punto flotante binario:

107
library-index:

escribir programas CGI, comprimir datos, y muchas otras tareas. Un vistazo por la Referencia de

install-index
reference-index

http://www.python.org

http://docs.python.org
http://pypi.python.org

encontrarlo.
http://aspn.activestate.com/ASPN/Python/Cookbook/

de Python (O'Reilly & Associates, ISBN 0-596-00797-3.)

Para preguntas relacionadas con Python y reportes de problemas puedes escribir al grupo de noticias
comp.lang.python, o enviarlas a la lista de correo que hay en [email protected]. El grupo de noticias

otro. Hay alrededor de 120 mensajes diarios (con picos de hasta varios cientos), haciendo (y

Preguntas Frecuentes
buscalo en el directorio
correo disponibles en http://mail.python.org/pipermail/. El FAQ responde a muchas de las preguntas que

108
implementa con la biblioteca GNU Readline

no

diferente.

espera de ordenes (prompt


(Ctrl-A) mueve el cursor al
al final, a la derecha. La tecla
de retroceso (backspace) borra el caracter a la izquierda del cursor, el caracter a su derecha.

linea nueva al final de esta memoria.


historial,

109
Atajos de teclado

. Los atajos de teclado tienen la


forma

...o

...y se pueden configurar opciones con

Por ejemplo:

en Python es insertar un caracter

insistes, puedes redefinir esto poniendo

en tu
acostumbrado a usar

Esto asocia la tecla dos veces

110
, que usualmente acaban siendo necesarios

Esta funcionalidad es un paso enorme hacia adelante comparado con versiones anteriores del interprete;

111
IPython, que

puede ser configurado en profundidad, e integrarse en otras aplicaciones. Otro entorno interactivo
mejorado similar es bpython.

5
PYTHONSTARTUP

112
Problemas y Limitaciones

...o, mejor,

...o, mejor,

repite infinitamente:

113
mostrar sin embargo

de todo lo que muestra. Para flotantes,


significativos, dando

para que se cumpla exactamente para todos los flotantes finitos X, pero

muestren la diferencia, o no
lo hagan en todos los modos de salida).

str
Normalmente x

muestra del valor verdadero de la

A esta se siguen otras sorpresas. Por ejemplo, luego de ver:

Pero es lo mismo:

binaria posible de 1/10, de manera que intentar redondearla nuevamente no puede mejorarla: ya era la
mejor posible.

114
The Perils of Floating Point

punto flotante! Los errores en las operaciones flotantes de Python se heredan del hardware de punto

es normalmente suficiente, y para un control


en formatstrings.

punto flotante binario.

que puede de la forma J/2***N* donde J es un entero que contiene exactamente 53 bits. Reescribiendo

...como

115
...y recordando que J tiene exactamente 53 bits (es pero ), el mejor valor para N es
56:

N que deja J con exactamente 53 bits. El mejor valor posible para J es


entonces el cociente redondeado:

exactamente 1/10!

al flotante doble de 754 que puede obtener:

significativos:

...lo que significa que el valor exacto almacenado en la computadora es aproximadamente igual al valor

116

También podría gustarte