Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PYTHON
INDICE:
INTRODUCCIÓN............................................PAG 1
PYTHON BÁSICO...........................................PAG 1
CONTROL DE FLUJO.....................................PAG 9
DEFINICIÓN DE FUNCIONES ......................PAG 12
MODULOS........................................................PAG 13
ENTRADA Y SALIDA DE FICHEROS .........PAG 16
MANEJO DE EXCEPCIONES ........................PAG 18
CLASES.............................................................PAG 20
LIBRERIAS INTERESANTES.........................PAG 24
REFERENCIAS BIBLIOGRÁFICAS...............PAG 26
La base de Python intenta hacer que el lenguaje sea fácilmente comprensible por los
programadores noveles, por lo que normalmente utiliza palabras en lugar de símbolos
(and en lugar de & y or en lugar de |)
Para completar esta introducción, decir que Python es un lenguaje que se está
extendiendo a gran velocidad. Por ello, Python ya está usándose activamente en
aplicaciones como:
Y muchos más.
2. PYTHON BÁSICO
Las variables de Python son generales. No hay que definir el tipo de la variable sino
que esta se inicializa al valor que se le indique. Python soporta los tipos de datos que
soportan casi todos los lenguajes, como enteros, flotantes, complejos, caracteres,
strings, etc. Normalmente las variables son utilizadas como listas escritas de forma
que se pueda trabajar con todos los datos como si se obtuvieran desde un vector.
Siempre es conveniente saber que variables hemos usado. Python no nos ofrece una
gran información sobre las variables usadas y por tanto, cuando hemos usado
muchas, podemos tener algún que otro problema. Para ello, se puede ejecutar el
comando globals().keys() que nos ofrecerá todas las variables creadas, además de
muchas que ha creado el propio interprete.
El manejo de números complejos puede ser utilizado con dos formatos. El primero de
ellos es mediante la notación habitual de Real + jComplejo. Sin embargo, para evitar
a veces confusiones, se puede utilizar la función Complex.
>>> 2+2
4
>>> 3*4
12
>>> 9/4
2
>>> #El resto de la división se calcula mediante el símbolo %
>>> 9%4
1
>>> #La división entera siempre retorna el valor entero menor
>>> 11/4
2
>>> 1*2j
2j
>>> #Declaración de un numero complejo con notación real/compleja
>>> 1+2j
(1+2j)
>>> #Declaración mediante la función Complex
>>> complex(1,2)
(1+2j)
>>> #Se pueden hacer combinaciones de ambas notaciones
>>> (1+2j)+complex(3,1)
(4+3j)
>>> #También se pueden extraer los factores
>>> a=complex (2,3)
>>> a.real
2.0
>>> a.imag
3.0
>>> #En caso de no asignar el resultado a una variable, se puede utilizar el carácter _
>>> 2*4
8
>>> 4+_
12
Esto para trabajar con números. Sin embargo se puede trabajar de igual forma con las
cadenas de caracteres o los caracteres. Los caracteres o las cadenas de caracteres se
definen mediante los símbolos “ o ' independiente e indistintamente
Ejemplo: Uso de Python con caracteres
Menu:
Opcion 1: Presionar a
Opcion 2: Presionar b
Opcion 3: Presionar c
>>> #En cuanto a operaciones, se pueden concatenar y repetir con símbolos matemáticos
>>> palabra = 'Py' + 'thon'
>>> palabra
'Python'
>>> palabra*3
'PythonPythonPython'
>>> (palabra+' ') * 3
'Python Python Python '
>>> #El trabajo con las cadenas es muy flexible
>>> 'Py'+'thon'
'Python'
>>> palabra = 'Py' + 'thon'
>>> palabra
'Python'
>>> #Se puede repetir una secuencia como una multiplicación
>>> palabra*3
'PythonPythonPython'
>>> #Incluso hacer una operación un poco mas compleja
>>> (palabra+' ') * 3
'Python Python Python '
>>> #Seleccionar las partes de la cadena
>>> palabra[2]
't'
>>> palabra [4]
'o'
>>> palabra [5]
'n'
>>> #Si se sale de rango hay error
>>> palabra [6]
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
IndexError: string index out of range
>>> #Se puede seleccionar un rango
>>> palabra [:2]
'Py'
>>> palabra [2:]
'thon'
>>> palabra [2:4]
'th'
>>> #Para calcular la longitud de la cadena
>>> len (palabra)
6
Una de las opciones más potentes de Python es el uso de listas. Las listas pueden ser
de cualquier tipo y una misma lista puede tener diferentes tipos de dato. El uso de las
listas es igual a como se ha visto en las cadenas de caracteres. Lo podemos ver en el
siguiente ejemplo
>>> a=[1,2,3,4,5,6,7,8]
>>> #Uso de listas como pilas (LIFO)
>>> a.append(9)
>>> print a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.pop()
9
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>> #Uso de listas como colas (FIFO)
>>> a.append(9)
>>> a.pop(0)
1
>>> a
[2, 3, 4, 5, 6, 7, 8, 9]
Estas otras tres funciones pueden ser bastante interesantes llegado el caso, pues nos
permite un trabajo con listas mucho mas potente.
La función filter(f,x), siendo f una función y x una secuencia, nos permite filtrar y
devolver una secuencia resultado de una función específica, en lugar de introducir a
mano todos los elementos y organizar la función con bucles
Por último la función reduce(f,x) calcula la función primero con los dos elementos de
la lista y el resultado con el siguiente elemento, y así hasta el final
c)Listas autodefinidas
Cuando las listas son pequeñas, pueden introducirse a mano sin necesitar mucho
tiempo. Sin embargo cuando las listas llevan un gran numero de elementos, se hace
tedioso e inseguro introducir a mano los elementos, ya que nos podemos saltar
alguno, introducir alguno erróneo, etc, y eso haría que nuestros programas fallasen
sin saber muy bien por qué. Python da la oportunidad de utilizar listas autodefinidas
para solucionar este problema
d) La sentencia del
La sentencia del se utiliza para eliminar elementos de una lista, o una
lista completa.
Los conjuntos son elementos desordenados sin ningún duplicado que normalmente se
usan para la comprobación y el borrado de los mismos. Nos ayudan a mantener los
elementos de diferentes tipos separados para su uso
Los diccionarios son otra de las grandes herramientas de Python. Ofrece definir los
elementos mediante una clave o key y a la hora de hacer referencia esto es mucho
mas claro, evita errores y el código queda mucho más legible. En lugar de definirse
con corchetes como las listas, se definen mediante llaves, aunque sí se referencian
con corchetes.
Ejemplo: Diccionarios
3. Control de flujo
Como todos los lenguajes modernos, Python tiene estructuras típicas de control de
flujo, como las estructuras if, los bucles y algunas otras sentencias que sirven para
controlar el transcurso de los programas. Para agrupar las diferentes estructuras no se
utilizan palabras reservadas para definir los límites de la estructura, sino que se
utilizará el sangrado para ello. Esto tiene la ventaja de que se puede leer mucho mejor
el código, pero como gran desventaja es que para los programadores noveles puede
ser un problema y pueden tener muchos errores de ejecución debido a esto.
a) Sentencias if
Las sentencias if son casi idénticas al resto de los lenguajes. Vemos
algunos ejemplos de ellas
Ejemplo: Estructuras if
La sentencia break se utiliza como en otros lenguajes para detener un bucle cuando se
desee dentro del propio bucle.
La sentencia continue se utiliza para pasar a la siguiente iteración de un bucle sin que
se llegue al final del bucle, de forma que no se ejecute la última parte del bucle.
La sentencia pass no hace nada, sino que se usa para rellenar aquellos huecos de
bucles o sentencias if que no tengan nada.
4. Definición de funciones
Esta claro que en todos los lenguajes modernos pueden crear funciones de forma que
puedan llamar a una serie de líneas de código desde cualquier parte del código de
nuestro programa. Esto tiene la ventaja de no tener que escribir varias veces el mismo
código, sobre todo si este código es repetitivo y muy largo. En Python es posible
definir funciones que devuelvan un valor. Veamos el ejemplo de la declaración de
funciones
Esta función por ejemplo nos pediría confirmación de alguna operación. En caso de
responder 'si' se saldría del programa con un True. En caso de responder 'no' se
saldría del programa pero con un False.
Al igual que ADA, por ejemplo, se puede definir una función e introducir una palabra
clave, o el valor directo de los parámetros, o bien combinarlos ambos. Veamos un
ejemplo
Tras las primeras versiones de Python, se decidió introducir una característica de Lisp
que permite crear pequeñas funciones anónimas mediante la palabra lambda que
después permite ir ejecutando ese pequeño código
5. Módulos
Hay que remarcar que si se hace un uso de un modulo y hay que cambiarlo, se debe
volver a importar el modulo de la forma reload(nombre) o de la forma
del(nombre)
import(nombre)
Ejemplo: Uso de módulos
Una de las herramientas que podemos usar con los módulos es la sentencia dir(). Esta
nos permite explorar los módulos de forma que sepamos lo que contiene cada uno.
Hagamos un dir() al modulo creado
Vemos que aparte de nuestras funciones, existe también '__builtins__' que contiene
los paquetes de construcción del modulo. '__doc__' que contiene la documentación
del módulo. '__file__' que nos especifica el fichero del modulo. Y por ultimo
'__name__' que nos proporciona el nombre del modulo.
a) Paquetes
Los paquetes son también de gran utilidad en Python. Agrupa una serie de módulos
de forma que haciendo referencia a ese paquete se pueda obtener el modulo deseado.
Por ejemplo, en caso de tener una serie de ficheros “.py” y querer agruparlos en un
paquete, se podría hacer la siguiente asignación de directorios
#Implementación de un paquete
Python/
__init__.py
Ejemplos/
__init__.py
ejemplo1.py
ejemplo2.py
ejemplo3.py
Ficheros/
__init__.py
fichero1.py
fichero2.py
fichero3.py
Python puede trabajar con ficheros externos, tanto escribirlos como leerlos y además
con algunas opciones que le dan bastante potencia.
A la hora de abrir un fichero se haría por ejemplo lo siguiente:
Comprobamos que hemos abierto con modo 'r' que implica solo lectura. también es
posible abrir de modo 'w' de escritura, 'a' para añadir datos al final del fichero, y
después también hay posibilidad de escribir modo 'b' para datos binarios. Si ahora
queremos leer el fichero que acabamos de abrir lo haríamos de forma:
>>> f.read()
'Este es el contenido de un fichero de prueba'
>>> f.readline()
'primera línea de fichero\n'
>>> f.readline()
'segunda línea de fichero'
>>> f.readline()
''
Siguiendo con las opciones de lectura, la opción tell indica en número de bytes la
posición en la que se encuentra el desplazamiento del fichero que vamos recorriendo
>>> f=open ("C:\prueba.txt", 'r')
>>> f.tell()
0L
>>> f.readline()
'primera línea de fichero\n'
>>> f.tell()
26L
>>> f.readline()
'segunda línea de fichero\n'
>>> f.tell()
52L
Si queremos modificar esa posición para situarnos en algún sitio exacto, podemos
usar la opción seek(desplazamiento, origen) siendo la opción desplazamiento
obligatoria mientras que el origen es opcional, ya que si no se pone se supondrá el
origen el inicio del fichero. Si se escribe un 1 será la posición actual, y si se escribe
un 2 será el fin del fichero
>>> f.close()
>>> f.read()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
ValueError: I/O operation on closed file
Para mas usos de los ficheros y del modulo pickle, leer las bibliotecas de los módulos.
7. Manejo de excepciones
Otra de las opciones del lenguaje Python es controlar las excepciones y los errores de
ejecución. Para ello, se ofrecen unas directivas que capturan las excepciones, o las
elevan. Por ejemplo, veamos el error que se produce en la siguiente sentencia:
Observamos que la sentencia try se utiliza para después declarar las excepciones. Se
pueden utilizar varias excepciones en cadena e incluso se puede utilizar una
excepción genérica para los casos que no se hayan contemplado. Por ejemplo
Cuando salta una excepción también se puede acompañar de los argumentos que se
desee. así podemos tener más datos del error que se ha producido. Vemos el siguiente
ejemplo:
>>> try:
... raise Exception ('Nombre', 'Incorrecto')
... except Exception, inst:
... print inst
... x,y=inst
... print 'Error debido a un ', x, y
...
('Nombre', 'Incorrecto')
Error debido a un Nombre Incorrecto
En caso de no querer hacer nada después de que salte la excepción sino determinar
que salto una excepción, lo mejor es relanzarla de la forma:
>>> try:
... raise NameError, 'Error grave'
... except NameError:
... print 'Ha saltado una excepción'
... raise
...
Ha saltado una excepción
Traceback (most recent call last):
File "<interactive input>", line 2, in <module>
NameError: Error grave
También se pueden definir las propias excepciones. Para ello se crean la clase base y
las diferentes clases derivadas de cada una de las excepciones. Veremos eso en el
próximo tema.
Por ultimo, se puede generar una acción de limpieza que se ejecute tanto si se ejecuta
la excepción como si no. Esto se haría de la forma:
>>> try:
... raise KeyboardInterrupt
... finally:
... print 'Adios, nos vamos del programa'
...
Adios, nos vamos del programa
Traceback (most recent call last):
File "<interactive input>", line 2, in <module>
KeyboardInterrupt
8. Clases
Al igual que los lenguajes más modernos, el lenguaje Python introduce opciones de
trabajar con clases. Esto proporciona una gran potencia de los nuevos lenguajes, y
que permite muchas variantes en los programas. Vemos como podemos definir una
clase
Cuando una clase define un método __init__, se puede obtener una nueva instancia
que permite una mayor flexibilidad de trabajo con las clases. Por ejemplo:
Otra de las posibilidades que tiene Python es utilizar los objetos instancias y objetos
métodos.
Recordamos que la instanciación es llevar a una variable la declaración de una clase
(Ej: x = Clase()). Python proporciona que se pueda crear una variable dentro de la
clase y hacerla desaparecer con la misma rapidez. Son los llamados objetos
instancias. Estos objetos son bastante peligrosos pues si se hace mala referencia a
ellos pueden hacer que una clase crezca de manera ilimitada.
Ejemplo:
Ejemplo:
b) Herencia
Python ofrece el potencial de la herencia que también ofrecen otros lenguajes.
Recordamos que herencia es crear una clase derivada de una clase padre, de forma
que la clase derivada mantiene las instancias y los atributos de la clase padre. Veamos
un fácil ejemplo:
Cabe destacar que Python también ofrece herencia de múltiples clases padres. Un
ejemplo sería:
Vemos que en este caso, lo que se pasa a h.leertodo son las funciones de imprimir,
por lo que nos viene en diferentes líneas. Cabe resaltar una cosa: Si existen varias
funciones llamadas iguales en las diferentes clases, hay que hacer referencia a que
clase procede (en el ejemplo h.x.leer, h.y.leer, ...), pero si solo existe una función, se
puede llamar directamente. Sin embargo, en caso de quererlo todo en una línea, lo
que hacemos es pasarle los parámetros directamente
>>> h.leertodo(h.movimiento,h.tipo,h.zona)
maña: cogida de muslo
Observamos que entonces solo se puede hacer referencia a esta variable privada en el
interior de la clase
Por ultimo comentar sobre las clases dos cosas más. La primera es que puede crearse
una clase que funcione como un record en ADA o como un struct en C. Un ejemplo
sería:
>>> class Agenda:
... pass
...
>>> juan=Agenda()
>>> juan.nombre='Juan'
>>> juan.telefono='928663557'
>>> print "%s: %s" % (juan.nombre, juan.telefono)
Juan: 928663557
La otra cosa a comentar es recordar del capitulo anterior que las excepciones también
son clases. así que, podemos definir nuestras propias excepciones de la siguiente
forma:
9. librerías interesantes
a) Modulo os
El modulo os nos proporciona intercambio de datos con el sistema operativo. Por
ejemplo:
>>> import os
>>> os.getcwd()
'C:\\Python25'
>>> os.mkdir('C:\Python25\Ejemplosmios')
>>> os.chdir('C:\Python25\Ejemplosmios')
>>> os.getcwd()
'C:\\Python25\\Ejemplosmios'
b) Patrones de cadenas
Si queremos buscar patrones en diferentes cadenas de caracteres, el modulo re nos
permite hacerlo. Por ejemplo:
>>> import re
>>> re.findall(r'\bq[a-z]*','de que quieres que me queje')
['que', 'quieres', 'que', 'queje']
c) Modulo random
El modulo random nos permite hacer elecciones aleatorias en nuestros programas.
Por ejemplo:
d) Acceso a internet
Si queremos acceder a internet, hay dos módulos básicos. Uno es el de obtener la
URL y otro es para enviar correo electrónico. Por ejemplo:
>>>import urllib2
>>> for línea in urllib2.urlopen('http://www.iuma.ulpgc.es/users/jmiranda'):
... if 'Javier' in línea:
... print línea
...
<TITLE>Javier Miranda's Ada Corner</TITLE>
<META NAME="description" CONTENT="Javier Miranda's Ada Corner">
<H1 ALIGN="CENTER">Javier Miranda's Ada Corner</H1>
<LI><B>Author:</B> Javier Miranda
Javier Miranda was born in 1965 in Canary Islands (Spain). He studied
Javier Miranda
Hola.
""")
>>> server.quit()
e) Fecha y hora
también existe un paquete que permite trabajar con fechas y horas. Por ejemplo
Con esto terminamos el manual básico del lenguaje Python. Para más información, se
agrega el apartado 10 con páginas de referencia donde aprender todo sobre este
lenguaje.