Documente Academic
Documente Profesional
Documente Cultură
(Versin 0.8)
Medelln/Colombia: 30/septiembre/2014
Autor
DEIMER OZUNA VIDAL
Contactar al correo
deimerov@outlook.com
Compartir bajo la Misma Licencia Si altera o transforma esta obra, o genera una
obra derivada, slo puede distribuir la obra generada bajo una licencia idntica a sta.
This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International
License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or
send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041,
USA.
INTRODUCCIN
Siendo sincero, casi nunca me gusta leer las introducciones de los libros me
aburro rpidamente leyndolas porque hablan de temas muy generales que
probablemente no entender y termino irrevocablemente saltndomelas. Pero ese
soy yo tal vez usted sea menos perezoso. Bueno empecemos!
Python es un lenguaje de programacin que fue creado por Guido van Rossum.
Python es un lenguaje interpretado, con tipado dinmico, fuertemente tipado,
multiplataforma y orientado a objetos.
Lenguaje interpretado
Un lenguaje interpretado se ejecuta utilizando un programa intermedio
denominado intrprete, En la ejecucin del cdigo escrito por usted el intrprete
hace las veces de traductor entre el cdigo escrito por usted y el lenguaje que
puede entender una computadora.
Tipado dinmico
Decir que Python presenta tipado dinmico quiere decir que no es necesario
declarar el tipo de dato que se le va a asignar a una determinada variable, adems
el valor al que alude dicha variable puede cambiar si usted le asigna otro tipo de
dato. Por ejemplo:
Ahora apellido pasa a tener como valor 3.14 (el cual es un tipo de dato llamado
float)
Fuertemente tipado
No es permitido operar a una variable como si fuera de un tipo distinto al que
tiene, por lo que es preciso convertir de forma explcita dicha variable al nuevo tipo
previamente:
Como se puede observar no se puede sumar un dato tipo cadena con un dato tipo
numrico (sea float, int complex). Pero si se convierte a A en un tipo de dato
numrico, es posible realizar tal operacin, como sigue a continuacin.
Multiplataforma
Python puede ser usado en: GNU/Linux, Windows, Mac OS, etc
Orientado a objetos
Los objetos, es lo primero en lo que haremos nfasis, an no es tiempo de
empezar con ellos, es ms, cuando se me presentan temas de importancia crucial
en la introduccin de un libro, lo que yo suelo hacer es saltrmelos. Pienso que es
un tema muy importante como para pretender explicarlo en 4 renglones.
HERRAMIENTA DE TRABAJO
Lo primero que debe hacer es descargar Python, puede hacerlo aqu:
https://code.google.com/p/pythonxy/
Luego, descargar la interfaz que mejor le guste a usted para Python, hay muchas
opciones, te presento algunas:
Ninja IDE
Pycharm
http://www.jetbrains.com/pycharm/
http://ninja-ide.org/
OBJETOS
Tal vez ya has usado a la ligera la palabra dato, te parece lgico pensar que -20 es
un dato, que la palabra NATALIA es un dato y que obviamente -20 y NATALIA
son dos tipos de datos distintos... y tal vez intuyas que a estas cosas a las que
usted se refiere como datos se pueden someter a ciertas manipulaciones; por
ejemplo, a -20 le podras sacar su valor absoluto, o dividirlo por otro nmero etc. A
NATALIA podras agregarle otra letra o repetir la palabra las veces que quieras:
NATALIANATALIANATALIA o podras convertirla en minsculas, en fin; intuyes
que esos datos pueden someterse a ciertas manipulaciones.
Tal vez pienses que -20 y sus manipulaciones son cosas que se almacenan de
forma independiente, es decir, que -20 es una cosa y sus manipulaciones son otra
cosa.
Bien aqu viene el cambio de paradigma
Resulta que esos datos a los que desde este momento vas a llamar atributos y
esas manipulaciones a las que se pueden someter esos datos las vas a llamar
mtodos, y que esos atributos y esos mtodos conforman un nico ente, a ese
nico ente se le denominar: Objeto.
Y as ser cuando quieras crear un nuevo tipo de objeto (lo que hasta no hace
mucho usted considerara; crear un nuevo tipo de datos que responda a ciertas
manipulaciones), bien cuando usted quiera crear un nuevo tipo de objeto en
Python, tendr que dotarlo de atributos y programar sus mtodos y esas dos
cosas (atributos y mtodos) estarn encapsuladas por decirlo as, en cada objeto
que usted cree.
Veamos a continuacin algunos atributos y mtodos que contiene el objeto -20 en
Python:
Objeto -20 en Python
Propiedades
Mtodos
__abs__
numerator
__add__
real
imag
__float__
Escalares
Entre stos tenemos a los objetos enteros (tipo int), a los objetos decimales (tipo
float) y a los objetos complejos (tipo complex). Si se desea saber el tipo de objetos
que se tiene, se procede as:
Nota 1: El comando int convierte un objeto tipo float en un objeto tipo int, sin
embargo, el redondeo de int puede ser al alza o a la baja segn el ordenador en
que se ejecute, por lo que es mejor usar un comando adicional para estar
completamente seguro de que el resultado arrojado sea el deseado.
Nota 2: El comando int tambin puede transformar un objeto tipo cadena (que
slo tenga nmero entero) a un dato tipo int.
Booleanos
Python ofrece un tipo de objeto especial que permite expresar slo dos valores:
cierto y falso. El valor cierto se expresa con True y el valor falso con False. Son
los valores lgicos o booleanos. Ejemplo
A la variable resultado_comparacion se le desea asignar el resultado de la
sentencia 4>3
En realidad los booleanos son una subclase del tipo int, observa a continuacin:
Secuenciales
Un objeto escalar es un elemento nico, sin embargo, un objeto secuencial se
compone de una sucesin de elementos (nmeros, espacios en blanco, en
definitiva; cualquier conjunto de caracteres), dentro de stos se encuentran: Las
cadenas (las cadenas van entrecomilladas), las listas (van entre corchetes) y las
tuplas (van entre parntesis). Ms adelante veremos en detalle estos tipos de
objetos
Ejemplos de cadena
Natalia
2334
Ejemplo de tupla
(2.6, 5, Catalina, False, 76j, Sandra)
Ejemplo de lista
OPERADORES
Operador suma: +
Operador resta: -
Operador divisin: /
OPERADOR
==
!=
<>
<
<=
>
>=
SIGNIFICADO
Es igual que
Es distinto de
Es menor que
Es menor o igual que
Es mayor que
Es mayor o igual que
Lo nico que por ahora deseo que captes, es que de esos objetos bsicos, slo
las listas y las tuplas (en ciertos casos muy especiales) permiten modificar la
zona de memoria donde fueron almacenados dichos objetos, es decir, que si
almacenas a una lista en cierta zona de memoria; esa zona de memoria es
susceptible de cambio; a lo mejor querras agregarle un nmero a tu lista
almacenada o un caracter o eliminarle un elemento etc. Pero vuelvo y repito, slo
puede hacerle esto a las listas y a las tuplas (en ciertos casos muy especiales)
porque si almacenas al objeto hola en cierta zona de memoria; esa zona de
memoria Python la toma automticamente como inmutable; ya no podrs agregar
una letra o eliminar varias letras en esa zona de memoria etc. Lo mismo pasa
con los objetos escalares (int, float, complex) una vez almacenes al objeto 45 en
cierta zona de memoria, esa zona de memoria pasa a ser inviolable para Python.
Caso en que varias etiquetas apuntan al mismo objeto lista o al mismo objeto
tupla.
Por eso es muy importante tener en mente que las etiquetas slo eso son,
etiquetas lo importante es saber a qu objeto almacenado apuntan y por tanto
es indistinto con cul etiqueta hubiese hecho tal cambio.
Ahora ensayemos los casos en los que las etiquetan apuntan a distintas zonas de
memoria.
Agreguemos 5555 al objeto que apunta la etiqueta LISTA con el mtodo append()
Es obvio que suceda esto! ya que al fin de cuenta LISTA y OTRA_LISTA son
objetos distintos, ya que apuntan a zonas de memoria distintas y slo se modific
a la zona de memoria a la que apuntaba la etiqueta LISTA.
TIPOS DE IGUALDADES
Habamos dicho, que es posible que un objeto tenga varias etiquetas, por lo que
tal vez ests preocupado en saber cundo dos etiquetas representan en realidad
un mismo objeto, es decir, quieres saber si dichas etiquetas apuntan a la misma
zona de memoria; o tal vez ests ansioso por saber cundo dos etiquetas apuntan
a zonas de memoria distintas pero los objetos all guardados; presentan idnticos
atributos y se pueden someter a los mismos mtodos.
4. Escapes
La barra invertida se denomina carcter de escape y es un carcter especial, ya
que indica que el siguiente carcter tiene un significado diferente del usual. Dos
escapes son especialmente tiles: \n y \t
El escape \n es un salto de lnea y el escape \t es un tabulador horizontal
6. Indexacin
Cuando sea necesario acceder a cada uno de los caracteres de una cadena se
puede hacer uso de un operador de indexacin. El ndice del elemento al que se
desea acceder debe encerrarse entre corchetes, la cadena puede indexarse de
izquierda a derecha (empezando con ndice 0) o de derecha a izquierda
(empezando con ndice -1).
Como se puede observar al usar el comando type podemos constatar que el tipo
de dato ha pasado de ser escalar (int o float) a ser de cadena (string)
9. Convertir a minscula o a mayscula una cadena o una zona de la cadena
Como se puede observar en cada celda no se almacena el carcter como tal, sino
la referencia a dicho carcter. Obviamente si por ejemplo a la variable c se le
asigna otro valor, entonces apuntar a otra zona de memoria; a,b y d seguirn
apuntando a la zonas de memoria iniciales.
1. Concatenacin de listas
2. Repeticin de listas
3. Tamao de listas
4. Indexacin
Supongamos que se desea acceder al carcter v localizado en la cadena Olivo
en la lista L mostrada a continuacin. Este es el esquema de pensamiento para
acceder a dicha letra:
Obviamente es cierto que son idnticas, ya que sus elementos son iguales (ojo
que el orden de los elementos es importante). Sin embargo hay que tener en
mente que no todas las variables apuntan a la misma zona de memoria, como se
puede constatar a continuacin.
Esto es muy importante, ya que si se modifica cierta zona de memoria, todas las
variables que apunten a dicha zona arrojarn dicho valor modificado.
Como c apunta a una zona de memoria diferente sigue intacta. Por tanto se puede
concluir que las variables como tal son slo formas de acceder a una zona de
memoria determinada.
Nota: Como se explic anteriormente, en realidad las celdas no guardan al
carcter como tal sino la referencia a dicho carcter. Por ejemplo como se observa
a continuacin, la primera letra a de Natalia con la primera letra a de Sandra son
en realidad el mismo objeto.
Ten presente que tal comando es para buscar elementos de una lista, hola es
un elemento de la lista L mas no la letra l la cual es un elemento de la cadena
como tal.
Cambiar elementos
Se puede cambiar un elemento de la lista sea por otro valor escalar o por una
cadena o incluso por una sublista.
Las cadenas siguen siendo inmutables, observa lo que sucede cuando se intenta
cambiar la l de la palabra hola por j
Para borrar un elemento o una zona de una lista se usa el comando del
Lo explicado de forma detallada en listas se aplica a las tuplas, por lo que slo se
dar un breve repaso.
Concatenar tuplas
Repetir tuplas
Tamao de tuplas
Indexacin
La diferencia entre tuplas y listas es que las primeras son inmutables y las
segundas son mutables. Por ejemplo, a continuacin se intent cambiar al primer
elemento de la tupla y Python se quej.
Sin embargo cuando se tiene una lista dentro de una tupla slo la lista es
modificable, el resto de elementos de la tupla permanecern inalterables.
En la consola:
En Windows: Se ejecuta import os y luego se ejecuta os.system('cls')
En GNU/Linux: Se ejecuta import os y luego se ejecuta os.system('clear')
Para el script: Primero se tiene que detectar el SO en que corre el script, para
ello se digita:
import os
Entonces se tiene que ingresar el valor del radio de nuestro crculo y presionar
enter:
Sentencias iterativas: Con stas se logra que ciertas instrucciones se repitan una
cantidad determinada de veces.
1. Sentencia condicional if
En particular fjate en la lnea print Hola mundo, en el primer script esta lnea no
est cobijada por ningn condicional; por lo que saldr siempre que ejecutemos el
script independiente del valor de NUM, en el segundo script esta lnea est
cobijada en la condicin de los nmeros mayores que 100, por tanto es obvio que
no salga al ejecutarse el programa, ya que la variable NUM vale 90.
2. Bucle while
Hay que tener muy presente tres cosas:
Hay que disear las instrucciones para que se repitan una cantidad finita de
veces, porque si no estaramos ante un bucle infinito.
3. Bucle for
Hay que precisar que el enfoque de Python para el bucle for se centra en la idea
de que la variable que en este caso se llam elemento no toma el valor de los
ndices de la secuencia en cada iteracin, sino que va tomando el valor de cada
elemento en cada iteracin hasta recorrer toda la secuencia.
Por ejemplo en el siguiente script, la variable deimer en la primera iteracin
tomar el valor de Sara, en la segunda iteracin el de Catalina y as
sucesivamente.
FUNCIONES y PROCEDIMIENTOS
Una funcin es un fragmento de cdigo asociado con un nombre, que realiza una
serie de tareas y devuelve un objeto, ese objeto puede ser escalar (int, float,
complex) o un objeto secuencial (cadena, lista o tupla).
A los fragmentos de cdigo que tienen un nombre asociado y no devuelven
objetos se les suele llamar procedimientos. En Python estrictamente hablando no
existen los procedimientos, ya que aunque el programador no especifique un valor
de retorno; se devolver None.
1. Definir una funcin
Una funcin en Python se define as:
False
dependiendo a que condicin ingres y
la ejecucin de la funcin terminar
inmediatamente.
2. Definir un procedimiento
Dependiendo si tiene o no parmetros un procedimiento se define as:
Al invocar el procedimiento al
que llamamos mayor_que_dos
la cadena Hola mundo jams
se imprimir, porque una vez que
se llegue al return la ejecucin
de dicho procedimiento terminar
inexorablemente.
Pero observa un detalle, para qu disear una funcin como la mostrada en ese
esquema?, la idea es que la funcin slo trabaje con los parmetros x,y,z y genere
sus propias variables locales (mediante asignaciones como lo hace v,w,a) sin
estar usando valores de variables globales que no fueron ingresadas como
argumentos (como lo hace q al usar a la variable global c).
Ejemplo aclaratorio 1:
Observemos el siguiente script, para constatar que Python diferencia una variable
global de una local (aunque tengan el mismo nombre)
Ejemplo aclaratorio 2
Veamos cmo sucede el paso de parmetros al invocar a una funcin o
procedimiento. En el siguiente esquema los parmetros del procedimiento son x,
y y los argumentos son las variables globales a y b
Ejemplo aclaratorio 3
Con lo aprendido en ejemplo anterior, analicemos el siguiente script
Fjate en otro detalle, hay una b local (de valor 499) y una b global (de valor 99),
pero despus slo sobrevive la b global, ya que la b local se destruye al finalizar
la ejecucin de la funcin.
Supongamos que estamos elaborando un script (al que hemos guardado con el
nombre de ensayo) y necesitamos invocar a la funcin cubo y a la funcin
volumen_gas_ideal, para ello procedemos como se muestra a continuacin:
4. Un consejo final:
Desde una funcin o procedimiento es posible imprimir informacin directamente
en pantalla (usando print) o pedir que ingreses informacin del teclado (usando
input o raw_input), pero slo hazlo cuando el propsito de esa funcin o de ese
procedimiento sea precisamente mostrar esa informacin o leer lo que ingresas.
De lo contrario, es mejor que imprimas la informacin que quieras mostrar o que
pidas los datos desde el programa principal, no desde la funcin o procedimiento.
IMPORTACIN DE MDULOS
En el ltimo ejemplo de la seccin anterior, importamos un mdulo que contena
unas funciones que habamos definido, pero nos limitamos a importarlo cuando
tanto el script principal y el script secundario (el mdulo de funciones) estaban en
la misma carpeta.
Imaginemos que estamos trabajando en un script principal y tenemos varios
scripts secundarios que pueden estar en otras carpetas o subcarpetas, deseamos
importar algo de ellos, a lo mejor un mdulo entero o una funcin en particular que
tengamos definida en algn mdulo, o una constante etc. Para poderlos importar
necesitamos que esas carpetas o subcarpetas dejen de serlo y se conviertan en
paquetes. Cmo hacer esto?, muy simple, en la carpeta o subcarpeta DEBE
estar un archivo llamado __init__.py dicho archivo puede estar incluso vaco, pero
es necesario que se encuentre presente en nuestra carpeta o subcarpeta; para
que stas sean tratadas de all en ms como paquetes y poder con ello; hacer
importaciones. Veamos el siguiente esquema:
A lo mejor deseas usar una constante que tienes definida en el modulo1.py que
se encuentra en el paquete llamado subpaquete1
from paquete1.subpaquete1.modulo1 import CONSTANTE_DESEADA
import numpy as np
Ahora la pregunta del milln: Todo esto suena muy bien pero Cmo decirle a
Python que cree mis propios objetos?...estoy ansioso por empezar a crearlos!.
La respuesta del milln: Debes aprender a crear un objeto-clase
OBJETO-CLASE
El objeto-clase ser la madre que parir (por decirlo as) a tus objetos
(denominados objetos-instancia) y al proceso de parto lo llamaremos
instanciacin. Todos los objetos-instancia que para el objeto-clase tendrn
atributos comunes (llamados atributos de objeto-clase) pero tambin podrn tener
atributos particulares (llamados atributos de objeto-instancia) que los distinguir de
sus hermanos (de otros objetos-instancia); eso lo lograremos con el mtodo
denominado: __init__
Los mtodos son funciones, pero dentro de un objeto-clase se denominan
mtodos, los atributos bien sean atributos de objeto-clase o atributos de objetoinstancia son variables o constantes, pero dentro de un objeto-clase se denominan
atributos.
Hoy me siento imaginativo. pues bien, Sonia es una hermosa mujer de ojos
azules, tiene una piel que se asemeja al color tenue de una tarde (ella es morena)
y tiene una preciosa nariz aguilea, la cuestin es que Sonia quiere tener hijos, y
todos los hijitos de Sonia heredarn esos atributos, pero tambin tendrn atributos
particulares que los diferenciarn de sus hermanos.
Un objeto-clase (Sonia en este caso), tendr la estructura bsica siguiente:
Bien, Sonia va alimentar a su Bebe1 porque comenz a llorar, cmo hace Sonia
eso?. Bueno ya Bebe1 contiene un mtodo para ello:
Bebe1.dejar_de_llorar(200)
Sonia le dio 200 mL de leche a su hijito qu crees que suceder?...yo creo que
seguir llorando ya que cumple las dos condiciones (mL_de_leche <300 and
comportamiento == cascarabia) que tiene el condicional del mtodo invocado.
S que te estars preguntado qu es ese self extrao que aparece all, pues mira,
en el instante del parto de cada hijito de Sonia (la instanciacin del objeto-clase) y
cada vez que un hijito acceda a uno de sus mtodos; Python a cada hijito de Sonia
le coloca otra etiqueta: self
En el parto (instanciacin)
Lo que usted ve
Bebe1 = Sonia(pelonegro, delgado, cascarabia,)
Por tanto cualquier punto que se cree con la anterior clase heredar dichos
mtodos, aunque en este caso no colocamos atributos de objeto-clase. Bien,
creemos a nuestro primer punto.
Listo, eso es todo. Ya creamos a nuestro primer punto. Tal vez quieras acceder a
los mtodos y atributos de tu objeto-instancia, por ejemplo, en spyder version2.2.5
despus de escribir la etiqueta del objeto-instancia creado seguido de un punto
(punto del teclado de tu computador para que no te confundas) se nos despliega
un men donde nos muestra los atributos y mtodos que tiene nuestro objetoinstancia PUN1. Observa:
Lo ves? Espero que ahora si me creas cuando te insist hasta el cansancio que
un objeto contiene tanto atributos (en este caso cord_x, cord_y) como mtodos
(en este caso cord_polar, mostrar_punto). Ya hablaremos despus de las otras
cosas que se ven all (que son mtodos heredados del objeto-clase object) .
Acceder al mtodo cord_polar
Si creas otro punto del objeto-clase Punto, puedes acceder de la misma forma a
sus atributos y sus mtodos. Por ejemplo si etiquetas al otro punto como PUN2
entonces podrs acceder a un mtodo o a un atributo as:
PUN2.atributo PUN2.metodo()
HERENCIA Y POLIMORFISMO
No hace mucho hablbamos de mi musa Sonia, pues bien, resulta que Sonia
tambin hered atributos de su madre llamada Object (ciertamente no es un
nombre muy femenino que digamos), y dichos atributos los heredarn tambin los
descendientes de Sonia (sus objetos-instancia).
De hecho en Python todos los objetos son descendientes del objeto-clase Object.
No me crees?, hagamos varias pruebas:
Observa que se tienen dos mtodos con la misma etiqueta (el mtodo area) y l
se comporta de una forma cuando se aplica al objeto-instancia del objeto-clase
Cuadrado y se comporta de otra forma cuando se trata del objeto-instancia del
objeto clase Rectangulo, a esto se le llama polimorfismo.
BIBLIOGRAFA
LIBRO INPRESCINDIBLE PARA INICIARSE EN PYTHON
[1] Marzal, Andres. Gracia, Isabel : Introduccin a la programacin con Python.
2003
Este no es el fin, ni el principio del fin, pero puede ser el fin del
principio - Winston Churchill