Sunteți pe pagina 1din 8

Taller 1: Python Bsico (compiladores)

1.
Introduccin Python es un lenguaje de fcil aprendizaje (lenguaje en pseudocdigo) . Como todo
lenguaje tiene eficientes estructuras y es orientado a objetos (todo es un objeto)
Python es un lenguaje interpretado y hace parte de los lenguajes de script, ideales para el desarrollo rpido de
aplicaciones en la mayora de plataformas
El intrprete de Python posee un extenso conjunto de libreras disponibles (http://www.python.org/) , as
como tambin posee mdulos desarrollados por terceros como el mdulo PLY para darle robustez y amplitud
de escenarios a las diferentes aplicaciones.
Para empezar En python las variables no tienen tipo (son objetos), se declaran, se usan y desaparecen, el
operador de asignacin es =
Ejemplo:
x,y,z = 1,2,3
saludo = hola
primero, segundo = segundo, primero
a = b = 123

Para definir bloques de cdigo, se utiliza solamente el tabulado (sangrado) . stas son algunas estructuras de
control:
if x < 5 or (x > 10 and x < 20):
print "El valor es correcto."
if x < 5 or 10 < x < 20:
print "El valor es correcto."
x = 10
while x >= 0:
print "x todava no es negativo."
x = x-1

Observe la estructura para el for, la sintaxis es similar a otros lenguajes interpretados:


for i in [1,2,3,4,5]:
print "Iteration no: ", i

La variable de ndice en el ciclo for recorre los elementos de una lista (escrita como en el ejemplo). Para
realizar un ciclo for "normal" (es decir, como contador), se utilice la funcin range().
# Mostrar los valores de 0 a 99 inclusive.
for valor in range(100):
print valor
# mile/kilometer conversion
for miles in range(10, 70, 10):
km = miles * 1.609
print "%d miles --> %3.2f kilometers" % (miles, km)

(La lnea que comienza por "# " es un comentario y el intrprete le hace caso omiso)
Algunos comando para la interaccin con el usuario:
Para obtener entrada del usuario, de un indicador de texto, utiliza la funcin de serie input.
x = input("Introduzca un nmero:")
print "El cuadrado de ese nmero es:", x*x

La funcin input muestra la solicitud dada (que podra estar vaca) y permite que el usuario introduzca
cualquier valor Python vlido. En este caso se espera un nmero, si se introduce algo diferente (una cadena,
por ejemplo), el programa falla. Para evitarlo se necesita cdigo adicional para la comprobacin de errores,
tambin existe la funcin raw_input. Si desea convertir la cadena de entrada s a un entero, podra utilizar
int(s).
user_input = raw_input("Enter an integer: ")
try:
number = int(user_input)
print "You entered", number
except ValueError:
print "Integers, please!"

Nota: Si desea introducir una cadena con input , el usuario debe escribir las comillas explcitamente. En
Python, las cadena pueden encerrarse entre comillas simples o dobles.
Python ofrece a los programadores potentes estructuras para almacenar informacin de cualquier tipo. Las
ms importantes son las listas, diccionarios y tuplas . Las listas se escriben entre corchetes, y se pueden
anidar:
nombre = ["Cleese", "John"]
x = [[1,2,3],[y,z],[[[]]]]

Una de las ventajas de las listas es que se puede acceder a sus elementos por separado o en grupos, mediante
indexado y corte . El indexado se realiza (como en muchos otros lenguajes) aadiendo el ndice entre
corchetes a la lista (observar que el primer elemento es el 0).
print nombre[1], nombre[0]
Muestra "John Cleese"
nombre[0] = "Palin"
print "This function creates a list."
def makelist():
a = []
for i in range(1, 20):
a.append(i)
print "appending", i, ":", a
return a
makelist()

Tambin se puede acceder a los elementos de una lista por rangos o segmentos: se indican los ndices de inicio
y fin del resultado, con dos puntos (":") de separacin:

x = ["elem0","elem1","elem2","elem3","elem4","huevos","and","elem7"]
print x[5:7]
Muestra la lista ["huevos","and"]

Observe que el elemento del ndice final no se incluye en el resultado. Si se omite uno de los ndices se
supone que se quiere obtener todo en la direccin correspondiente. Esto es, lista[:3] quiere decir "cada
elemento desde el principio de lista hasta el elemento 3, no incluido".
print x[:4]

significara, por otra parte "cada elemento de lista , empezando por el 3 (inclusive), hasta el
ltimo inclusive". Se pueden utilizar nmeros negativos para obtener resultados muy interesantes: lista[-3]
es el tercer elemento desde el final de la lista...
lista[3:]

print x[4:]

La funcin len() devuelve la longitud de una lista.


Los diccionarios por su parte, son como listas, pero su contenido no est ordenado. El acceso a los elementos
se hace a travs de una clave que se utiliza para buscar el elemento, como en un diccionario de verdad. Un par
de diccionarios de ejemplo:
{ "Alicia" : 23452532, "Boris" : 252336, "Clara" : 2352525 }
persona = { 'nombre': "Carlos", 'apellido': "Castro",
'ocupacion': "Ingeniero de Sistemas" }

Ahora, para obtener la ocupacin de persona, se utiliza la expresin persona["ocupacion"] . Si se quiere


modificar el valor de la clave, es decir el contenido de un elemento:
persona['apellido'] = "Linares"

Al igual que las listas, los diccionarios pueden contener otros diccionarios u otras listas. Naturalmente,
tambin las listas pueden contener diccionarios. De este modo, se pueden conseguir estructuras de datos muy
robustas.
2. Funciones Abstraccin. Para definir una funcin, se utiliza la palabra reservada def as:
def cuadrado(x):
return x*x
print cuadrado(2)
4

Todos los parmetros en Python se pasan por valor de referencia a objetos ?? (similar a java)
Por valor:
def cuadrado(y):
y=y*y
return y
y=5
print 'antes de enviar como parametro: ', y
cuad=cuadrado(y)

print 'despues de enviar como parametro: ', y


print cuad

Por Referencia:
def f(x, y):
x = x + 3
y.append(23)
print x, y
x = 22
y = [22]
f(x, y)
print x, y

Python tiene todo tipo de lujos, como argumentos con nombre y argumentos por omisin y puede manejar un
nmero variable de argumentos para una funcin. Para obtener ms informacin, consultar la seccin 4.7 del
tutorial de Python.
La palabra clave return detiene la ejecucin de la funcin y devuelve el resultado indicado.
Algo que podra resultar interesante conocer, sin embargo, es que las funciones son valores en Python. As
que, si tiene una funcin como cuadrado, podra hacer cosas como:
cosa = cuadrado
cosa(2)
Muestra 4

Para llamar a una funcin sin argumentos se debe recordar escribir funcion() y no funcion. La segunda
forma slo devuelve la funcin en s, como valor (esto vale tambin para los mtodos de los objetos).
3. Objetos. Python es un lenguaje orientado a objetos. La palabra class, define una clase, de este modo:
class Cesta:
# Recuerde siempre el argumento self
def __init__(self,contenido=None): #
self.contenido = contenido
def anadir(self,elemento):
self.contenido.append(elemento)
def mostrar(self):
resultado = ""
for elemento in self.contenido:
resultado = resultado + " " + `elemento`
print "Contiene:"+resultado

Notas:
1. Todos los mtodos (funciones de un objeto) reciben un argumento adicional al principio de la lista de
argumentos, que contiene el propio objeto. Este argumento, por convencin, se suele llamar self (que
significa 'uno mismo'), como en el ejemplo.
2. A los mtodos se los llama de este modo: objeto.metodo(arg1,arg2).

3. Alguno nombres de mtodo, como __init__ estn predefinidos, y significan cosas especiales.
__init__ es el nombre del constructor de la clase, es decir, es la funcin a la que se llama cuando se
crea una instancia.
4. Algunos argumentos son opcionales y reciben un valor dado (segn lo mencionado antes, en la seccin
de funciones). Esto se realiza escribiendo la definicin as:
def funcion(edad=32): ...
Aqu, se puede llamar a funcion

con uno o cero parmetros. Si no se pone ninguno, el parmetro edad

tendr el valor 32.


5. Las comillas invertidas convierten un objeto en su representacin como cadena (as que si elemento
contiene el nmero 1, `elemento` es lo mismo que "1" mientras que 'elemento' es una cadena
literal).
6. El signo ms + se utiliza tambin para concatenar listas. Las cadenas son slo listas de caracteres
(lo que significa que se puede utilizar indexado, rango y la funcin len en ellas).
7. Ningn mtodo o variable miembro es protegido ni privado. La encapsulacin es, en su mayora,
cuestin de estilo al programar.
Lgica de cortocircuito...
Todos los valores de Python se pueden utilizar como valores lgicos. Algunos, como [], 0, "" y None
representan el valor lgico "falso", mientras el resto (como [0], 1 or "Hola, mundo") representan el valor
lgico "verdadero".
Las expresiones lgicas como a and b se evalan de este modo: Primero, se comprueba si a es
verdadero. Si no, simplemente se devuelve su valor. Si s, simplemente se devuelve b (que representa el
valor lgico de la expresin). La lgica correspondiente a a or b es: Si a es verdadero, devolver su
valor. Si no, devolver b.
Este mecanismo hace que and y or se comporten como los operadores lgicos que supuestamente
implementan, pero tambin permite escribir expresiones condicionales como por ejemplo, el cdigo
if a:
print a
else:
print b

Se puede sustituir por:


print a or b

Esto es lo que hacemos en el mtodo Cesta.__init__ . El argumento contenido tiene el valor por defecto
None (que es, entre otras cosas, falso). Por lo tanto, para comprobar si tena valor, podramos escribir:
if contenido:
self.contenido = contenido
else:
self.contenido = []

Para utilizar una clase se hace una insatncia (objeto de la clase) de Cesta:

b = Cesta(['manzana','naranja'])
b.anadir("limon")
b.mostrar()

Hay ms mtodos adems de __init__. Uno de ellos es __str__, que define el aspecto que quiere tener el
objeto si se le trata como una cadena, se utiliza en lugar del mtodo mostrar() :
def __str__(self):
resultado = ""
for elemento in self.contenido:
resultado = resultado + " " + `elemento`
return "Contiene:"+resultado

Y, si se quiere mostrar el contenido, simplemente:


print b

La herencia se realiza de este modo:


class CestaA(Cesta):
# ...

Python permite la herencia mltiple, as que puede indicar varias super-clases entre los parntesis, separadas
por comas. Las clases se instancian as: x = Cesta(). Los constructores se definen, implementando la
funcin miembro especial __init__.
Si CestaVerduras tuviera un constructor __init__(self,tipo). Podra realizar una cesta de Verduras as:
y = CestaVerduras("zanahoria") .
Para obtener ms informacin sobre la programacin orientada a objetos en Python, mirar la seccin 9 del
tutorial.

4. Algo ms Python utiliza espacios de nombres dinmicos (no lxicos). Esto quiere decir que si se tiene una
funcin como sta:
def doble():
return x*2

donde una variable (en este caso x) no est ligada a un argumento, y no se le asigna un valor desde dentro de
la funcin, Python utilizar el valor que tenga cuando se llama a la funcin. En este caso:
x = 3
print doble()
6
x=1
print doble()
2

Normalmente, ste es el comportamiento deseado (aunque el ejemplo es un poco rebuscado), sin embargo, es
un tratamiento poco comn para el uso de variables.

Una funcin compuesta.


Si se quiere una funcin como la siguiente:
from math import sin, cos
sincos = componer(sin,cos)
x = sincos(3)

Donde componer es la funcin que se quiere realizar y x tiene el valor -0.836021861538, que es lo mismo
que sin(cos(3)).
Observe que se utiliza funciones como argumentos y eso ya es un truco.
Obviamente, componer toma dos funciones como parmetros y devuelve una funcin que a su vez toma un
parmetro. Un esqueleto de la solucin podra ser:
def componer(fun1, fun2):
def interior(x):
# ...
return interior

Sin embargo, es necesario localizar las funciones (y variables). fun1=fun1, fun2=fun2 garantizan el uso
de fun1 y fun 2 en un mbito local.
def componer(fun1, fun2):
def interior(x, fun1=fun1, fun2=fun2):
return fun1(fun2(x))
return interior

Python ofrece las funciones annimas, son funciones que no tienen nombre y pueden retornar valores, una
funcin annima se declara utilizando la palabra clave lambda:
def componer(f1, f2):
return lambda x, f1=f1, f2=f2: f1(f2(x))

5. Para finalizar. Las funciones y clases ms tiles se ponen en mdulos, que son en realidad ficheros de
texto legible en cdigo Python. Se puede importarlos y utilizarlos en sus propios programas. Por ejemplo, para
utilizar el mtodo split (dividir) del mdulo estndar string (cadena), puede hacer estas cosas:
import string
x = string.split(y)

o tambin
from string import split
x = split(y)

Para obtener ms informacin sobre la biblioteca de mdulos estndar, consultar www.python.org/doc/lib .


Todo el cdigo del mdulo/script se ejecuta cuando se importa. Si quiere que su programa sea tanto un
mdulo importable como un script ejecutable, puede aadir algo as al final:
if __nombre__ == "__main__": ejecutar()

Sirve para decir que si el mdulo se ejecuta como un script ejecutable (es decir, que no est siendo importado
por otro script o mdulo), se debe ejecutar la funcin ejecutar.
Y, si desea hacer un script ejecutable en UNIX, escriba esto como primera lnea para hacer que el script se
ejecute sin llamar a python explcitamente:
#!/usr/bin/env python

Finalmente, las excepciones sobre algunas operaciones como dividir por cero o leer de un archivo inexistente,
causan una condicin de error o excepcin, incluso, se pueden implementar excepciones del programa o
propias y lanzarlas en los momentos adecuados.
Si no se hace nada con la excepcin, el programa termina y muestra un mensaje de error. Esto se puede evitar
con una construccin try/except. Por ejemplo:
def dividirSeguro(a,b):
try:
return a/b
except ZeroDivisionError:
return None

es una excepcin estndar. En este caso, se podra haber mirado si b era cero, pero hay
muchos casos en los que no es posible. Adems, si no tuviramos la clusula try in dividirSeguro,
hacindola de este modo una funcin arriesgada, podramos hacer algo como:
ZeroDivisionError

try:
dividirInseguro(a,b)
except ZeroDivisionError:
print "Se ha intentado dividir por cero en dividirInseguro"

En casos en los que normalmente no debera haber problemas concretos, pero podran ocurrir, la utilizacin
de excepciones permite evitar tediosas comprobaciones.
Tomado de:
-

Tutorial de python: http://docs.python.org/tut/


Inmersin en python: http://www.diveintopython.org/
Un pequeo tutorial: http://users.servicios.retecal.es/tjavier/python/Pequeno_tutorial_de_Pyhton.html
Ejemplos del libro Python for Dummies http://ubuntuforums.org/showthread.php?t=593887

Lfg101.

S-ar putea să vă placă și