Documente Academic
Documente Profesional
Documente Cultură
Conocer"
software librehttp://amantesdelsoftwarelibre.wordpress.com/elegancia-programacion-python/
Logo de Python
http://www.python.org
Python fue creado por Guido van Rossum ( http://www.python.org/~guido/).
Esta inspirado por el popular grupo cómico británico Monty Pythony es considerado un
lenguaje de alto nivel, es por ello que se facilita la lectura de su código.
——————————————————————————————————————————
———————————–
Python es ideal para:
http://www.python.org/download/
Editores de Python
Spe, idle, Komodo. Pero se puede usar cualquier editor de texto plano conocido
como el vim, nano, gedit, kate, quanta entre otros.
——————————————————————————————————————————
———————————–
which python
El resultado de esto es la primera linea que colocamos en nuestro script como
se verá a continuación:
#!/usr/bin/python
print “Hola mundo!”
——————————————————————————————————————————
———————————–
Comentarios en python
Comentarios de una sola linea
Se coloca con el carácter #
Ejemplo:
“”"
Este es un comentario de varias lineas
Este es un comentario de varias lineas
Este es un comentario de varias lineas
“”"
——————————————————————————————————————————
———————————–
Operadores
Operadores Relacionales
> mayor que
< menor que
>= mayor o igual que
<= menor o igual que
!= distinto
== igual
Operadores Arítmeticos
+ suma (usado para números y para concatenar cadenas)
- resta
* multiplicación
/ división
% modulo o resto
Operadores Lógicos
and y lógico
or o lógico
not no lógico
——————————————————————————————————————————
———————————–
Sentencias y bloques
Las sentencias acaban en nueva línea, NO en ( ; ).
Los bloques son indicados por tabulación que sigue a una sentencia acabada en ‘:’.
E.j. (bloque.py):
#!/usr/bin/python
name = “Luis1″ # asignación de valor a variable
if name == “Luis”:
print “Hola Luis”
else:
print “¿Quién eres?”
print “¡No eres Luis!”
$ python bloque.py
Salida del terminal:
¿Quién eres?
¡No eres Luis!
——————————————————————————————————————————
———————————–
sentencia1
sentencian
else:
sentencia11
sentencia nn
Sentencia if: (Doble)
if condicion:
sentencia1
sentencian
else:
sentencia11
sentencia nn
Sentencia if: (múltiple)
if condicion:
sentencia1
sentencian
elif condicion:
sentencia11
sentencia nn
——————————————————————————————————————————
———————————–
Control de Bucles o sentencias iterativas
for: se utiliza para iterar sobre los miembros de una secuencia.
Se puede usar sobre cualquier tipo de datos que sea una secuencia (lista, tupla,
diccionario). La función range crea una secuencia descrita por ([start,] end [,step]),
donde los campos start y step son opcionales. Start es 0 y step es 1 por defecto.
Ej. bucle.py
for x in range(1,5):
print x
$ python bucle.py
1234
while: es otra sentencia de repetición. Ejecuta un bloque de código hasta que una
condición es falsa.
while condicion:
sentencia1
sentencian
Por ejemplo:
reply = ‘repite’
>>> while reply == ‘repite’:
print ‘Hola’
reply = raw_input(‘Introduce “repite” para hacerlo de nuevo’)
break: nos sirve para salir de un bucle, sirve para pasar a la próxima iteracion
dejando sin ejecutar lo que se encuentra por debajo de el.
——————————————————————————————————————————
———————————–
Identificadores
Sirven para nombrar variables, funciones y módulos . Deben empezar con un carácter
no numérico y contener letras seguido de números y ‘_’ .
No se debe usar una plabara reservada del lenguaje para los identificadores.
Palabras Reservadas:
and elif global or assert else if pass break except import print
class exec in raise continue finally is return def for lambda try del
from not while
——————————————————————————————————————————
———————————–
Tipos de Datos
Numéricos (integer, long integer, floatingpoint, and complex)
Strings
Listas
Tuplas
Diccionarios
Numéricos (integer, long integer, floatingpoint, and complex). Consiste en usar
expresiones númericas sin delimitarlos entre comillas dobles o simples.
La función int, long, float lo que me hace es una conversión si es posible al tipo de
datos en caso contario me lanzara una excepción.
>>> x = 4
>>> int (x)
4
>>> long(x)
4L
>>> float(x)
4.0
>>> complex (4, .2)
(4+0.2j)
Strings, delimitados por un par de (‘, ” ). Dos string juntos sin delimitador se unen
——————————————————————————————————————————
———————————–
Listas
Es un conjunto ordenado de valores, en el cual cada valor va identificado por un índice.
Las listas son similares a las cadenas de texto (strings), que son conjuntos
ordenados de caracteres, excepto en que los elementos de una lista pueden
ser de cualquier tipo.
Las listas y las cadenas, y otras cosas que se comportan como conjuntos ordenados,
se llaman secuencias.
Para terminar, hay una lista especial que no contiene elementos.
Se la llama lista vacía y se representa [].
La sintaxis para acceder a los elementos de una lista es la misma que para acceder a
los caracteres de una cadena: el operador corchetes [].
La expresión dentro de los corchetes especifica el índice. Recuerde que los índices
siempre comienzan en cero:
Indexadas por un entero comienzan en 0:
ejemplo:
>>> meses = ["Enero", "Febrero"]
>>> print meses[0]
Enero
——————————————————————————————————————————
———————————–
Matrices
Es común usar listas anidadas para representar matrices. Por ejemplo, la matriz:
123
789
456
Puede ser representada como:
>>>meses=["enero","Febrero"]
>>> meses.append(“Marzo”)
>>> print meses
['Enero', 'Febrero', 'Marzo']
Dos puntos (:) es el operador de rodajas, permite trabajar con una porción de la lista,
el elemento indicado por el segundo parámetro no se incluye:
>>> print meses[1:2]
['Febrero']
Para usar una lista como una pila, se pueden usar append y pop:
>>> items.append(555)
>>> items [1, 4, 6, 555]
>>> items.pop( )
Nota: Para mayor documentación sobre las metodos que se le pueden aplicar a una
lista pydoc list
——————————————————————————————————————————
———————————–
>>> meses=["Enero","Febrero"]
>>> meses1=["Marzo","Abril"]
>>> meses.append(meses1)
>>> print meses
['Enero', 'Febrero', ['Marzo', 'Abril']]
meses.append(1)
>>> print meses
['Enero', 'Febrero', ['Marzo', 'Abril'], 1]
——————————————————————————————————————————
———————————–
Funcion range
st=range(20) #Esta funcion lo que me crea es una lista que va
desde el 0 al 19. no incluye
el 20
>>> lst=range(20)
>>> print lst
Ejemplo:
range(0,20,4)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>print lst[5:15:2] #imprime comenzando en la posición 5 hasta el
15 sin incuirlo con un
paso de 2
[5, 7, 9, 11, 13]
>>>
——————————————————————————————————————————
———————————–
Cadenas y listas
Dos de las funciones más útiles del módulo string tienen que ver con listas de
cadenas.
Tuplas
Son tipo de datos iguales que la listas pero con la salvedad que no se
pueden modificar.
En otras palabras, las cadenas son inmutables y las listas son mutables.
En Python hay otro tipo llamado tupla que es similar a una lista salvo en que es
inmutable.
Sintácticamente, una tupla es una lista de valores separados por comas:
>>> tupla = ’a’, ’b’, ’c’, ’d’, ’e’
Aunque no es necesario, la convención dice que hay que encerrar las tuplas entre
paréntesis:
>>> t1 = (’a’,)
>>> type(t1)
<type ’tuple’>
Sin la coma, Python trata (’a’) como una cadena entre paréntesis:
>>> t2 = (’a’)
>>> type(t2)
<type ’string’>
El operador índice selecciona un elemento de la tupla.
>>> tupla=(“a”,”b”,”c”,”d”,”e”)
>>> tupla[0]
‘a’
Y el operador de porción elementos.
>>> tupla[1:3]
(‘b’, ‘c’)
Asignaciones multiples
Diccionarios
Diccionarios {} arrays asociativos o mapas, indexados por una clave, el valor puede ser
cualquier objeto Python, la clave normalmente es un objeto inmutables:
if mydict.has_key(‘altura’):
print ‘Nodo encontrado’
Lo mismo se podría hacer:
if ‘altura’ in mydict:
print ‘Nodo encontrado’
Las claves deben ser tipos inmutables (Es decir que los valores se pueden modificar),
no hay forma de saber como esta ordenado
dc={“lclave”:”valor”,”lista”:[1,2,3,4],”tupla”:([1,2,3],4),4:”entero”}
Algunos metodos aplicados a este tipo de datos (ayuda en consola pydoc dict)
clear(…)
| D.clear() > None. Remove all items from D.
| copy(…)
| D.copy() > a shallow copy of D
| get(…)
| D.get(k[,d]) > D[k] if k in D, else d. d defaults to None.
|
| has_key(…)
| D.has_key(k) > True if D has a key k, else False
|
| items(…)
| D.items() > list of D’s (key, value) pairs, as 2tuples
iteritems(…)
| D.iteritems() > an iterator over the (key, value) items of D
¡ iterkeys(…)
| D.iterkeys() > an iterator over the keys of D |
Algunos metodos aplicados a este tipo de datos (ayuda en consola pydoc dict)
itervalues(…)
| D.itervalues() > an iterator over the values of D
| keys(…)
| D.keys() > list of D’s keys
| pop(…)
| D.pop(k[,d]) > v, remove specified key and return the corresponding value
| If key is not found, d is returned if given, otherwise KeyError is raised
| popitem(…)
| D.popitem() > (k, v), remove and return some (key, value) pair as a
| 2tuple; but raise KeyError if D is empty
| setdefault(…)
| D.setdefault(k[,d]) > D.get(k,d), also set D[k]=d if k not in D
| update(…)
| D.update(E, **F) > None. Update D from E and F: for k in E: D[k] = E[k]
| (if E has keys else: for (k, v) in E: D[k] = v) then: for k in F: D[k] = F[k]
|
| values(…)
| D.values() > list of D’s values
——————————————————————————————————————————
———————————–
Funciones en Python
Se usa la palabra reservada def seguido del identificador de la funcióny entre
paréntesis los parametro; o sin parametros en caso de que no los tenga.(ojo se aplican
las mismas
reglas a este identificador como si fuese una variable)def nombre_funcion(par1,
par2,.., parn,): cuerpo return valor_retorno # en caso de que la función me retorne o
no un parámetro
Forma de invocar a la función
nombre_funcion(arg1, arg2,.., argn,)
def myfunc(a,b):
sum = a + b
return sum
print myfunc (5,6)
En python tambien se le pueden colocar a los parametros de la función
valores por defectos. En caso de que se llame la función y se le pase el argumento
correspondiente en la función el parametro será reemplazado por el argumento.
#
# funcionvaloresdefecto.py
#
def myfunc(a=4,b=6):
sum = a + b
return sum
print myfunc()
print myfunc(b=8) # a es 4, sobreescribir b a 8
Pasando una tupla como parámetro. A las funciones tambien se les puede
pasar una tupla como argumento. Pero entonces el el parametro dentro de la
función debe ir precedido por un asterisco (*)
#
#Pasando una tupla a una función en el momento en que se invoca
# funcionvaloresdefecto.py
#
def var_param(*parametros):#le estamos pasando una tupla
print “parametros es %s” %type(parametros)
for i in parametros:
print i,#la , lo que hace es que se imprima uno al lado del
otro
var_param(2,3,([1,2,3],7))
Pasando una lista como argumento: Se debe preceder los argumentos de la función
por un asterisco (aunque no en este caso es opcional) al igual que sus parametros.
#
#Pasando una a una lista a una función en el momento en que se invoca
# funcionvaloresdefecto2.py
#
def var_param(parametros):#le estamos pasando una tupla
print “parametros es %s” %type(parametros)
for item in parametros:
print item#la , lo que hace es que se imprima uno al lado
del otro
lista=[2,3,([1,2,3],7)]
var_param(lista)
#Nota: La lista se transfoma en una tupla
Módulos en Python
Módulos: es una colección de métodos en un fichero que acaba en .py. El nombre del
fichero determina el nombre del módulo en la mayoría de los casos.
Uso de un módulo: En otro escript aparte invoco al modulo. Donde modulo es el
nombre que se le dio al fichero. Invocando a un modulo se puede hacer de dos
maneras:
import nombre_modulo
from nombre_modulo import metodo1, metodo2, …, metodo n
E.j. modulo.py:
def one(a):
print “in one”,a
def two (c):
print “in two” ,c
Ejemplo 1 Ejemplo2
import modulo from modulo import one
modulo.one(2) one(2)
Listando los procedimientos de un modulo en la consola interactiva
>>> import modulo
>>> dir(modulo)
['__builtins__', '__doc__', '__file__', '__name__', 'one', 'two']
Donde los que aparecen sin los guiones de pisos son los procedimientos que tiene ese
modulo .
Tambien se pueden saber los modulos que tiene un archivo.(En un script de la
siguiente manera)
import modulo
dir(modulo)
Forma de incluir un modulo en la ruta donde python coloca los módulosimport sys
f=open(”nombrefichero”,”r”)
Abriendo un fichero en modo de ecritura .
f=open(”nombrefichero”,”w”)
Abriendo un fichero en modo de escritura conservando el contenido del mismo
f=open(”nombrefichero”,”a”)
Cerrando un fichero
f.close()
——————————————————————————————————————————
———————————–
Encurtidos.
Para poner valores en un archivo, debe convertirlos en cadenas. Ya ha visto cómo
hacerlo con str:
>>> f = open(“test.pck”,”r”)
>>> x = pickle.load(f)
>>> x
12.3
>>> type(x)
<type ’float’>
>>> y = pickle.load(f)
>>> y
[1, 2, 3]
>>> type(y)
<type ’list’>
Cada vez que invocamos load obtenemos un valor del archivo, completo con su tipo
original.
——————————————————————————————————————————
———————————–
Excepciones en python
Las excepciones es el método usado por Python para controlar los errores de
compilación de nuestros programas y tener control sobre ellos, para que de este modo
podamos evitar que termine la ejecución de un programa de forma fortuita.Para tener
este control Python nos proporciona 3 sentencias:
try: Esta palabra le indica al compilador que las siguientes sentencias pueden lanzar
excepciones.
#
exp.py
#
a=”Hola”
b=10
a=a+b
$ python exp.py
Traceback (most recent call last):
File “exp.py”, line 3, in ?
a=a+b
TypeError: cannot concatenate ‘str’ and ‘int’ objects
except: Es la palabra reservada que nos ofrece python para saber que a partir
de allí sera el tratamiento de errores para las excepciones que encontremos dentro del
try
Ejemplo:
try:
a=”Hola”
b=10
a=a+b
except:
print “Error”
finally: Es la encargada de seguir el programa despues de controlar las excepciones
print “Error”
finally: Es la encargada de seguir el programa despues de controlar las excepciones
——————————————————————————————————————————
———————————–
class nombreClase(ClaseHereda1,ClaseHereda2):
ejemplo:
Class Persona:
Sintáxis general de una clase:
class nombre_clase:
métodos_especiales
otros_métodos
Sintáxis general de una clase sin métodos:
class nombre_clase:
pass
Importar
a)Importar clases
sintaxis:
import nombreClase
Sintaxis:
from nombreClase import nombreMétodo1,.., nombreMétodon
Constructor
Es un tipo especial de método que se encarga de crear un objeto o instancia de un tipo
en concreto de la clase.
En python tiene el siguiente formato
Sintaxis:
def__init__(párametrosDE entrada1,..,párametrosDE entradan):
Ejemplo:def__init__(self):
Para llamar ese constructor desde fuera de la clase se utiliza el nombre de la clase que
quiere instanciar a un objeto
Sintaxis
nuevoObjeto=nombreClase(parámetrosDe Entrada1,…,Parametros de EntradaN)
Ejemplo:
persona1=Persona(‘Ana’,'Ramirez’,programador)
Class Persona:
def __init__(self):#self es una variable; el primer parametro es la clase misma
——————————————————————————————————————————
———————————–
phyton y blender
¿Estamos tod@s despiert@s? ¿Si? Tú, el del fondo, deja de charlar ya y céntrate! Bien... como
supongo que Blender ya lo controlamos todos, vamos a abrir Blender, y haremos una división
en la pantalla, para escribir nuestro script. Rompemos (Split) la pantalla y seleccionamos que
sea del tipo Text Editor. En el menú Text seleccionamos New y ya tenemos un editor de
texto bien bonito.
Ahora vamos a hacer algo rapidito para que veamos si todo funciona como debe... escribimos
dijo:
print "Hola, Blender"
Bien, supongamos que todo ha salido bien, que es lo más seguro: Blender detecta tu Python, y
la miniprueba ha salido correcta.
Vamos a hacer algo más interesante: quiero hacer un cartelito con su botón de OK.
Resulta que Blender controla su interface también desde Python, es decir, podemos hacer
programas que hagan cosas en Blender y/o en el Game Engine, y lanzarlos cuando queramos
nosotros, o bien cuando se de una condición en el Game Engine.
De momento, vamos a borrar lo que escribimos en el Text Editor... y escribimos esto
(poned las mayúsculas que veis aquí, que Python es muy sensible):
dijo:
import Blender
Blender.Draw.PupBlock ("Hola", ["Esto es la linea 1", "y esta la linea
2"])
Ejecutamos con ALT + P, o bien como antes. Vemos que nos sale un cuadro con un OK? Si?
BIEN!
Analicemos el código... nos ponemos las gafas y vemos:
dijo:
import Blender
Esto carga en Python la librería de Blender, digamos que dice a Python que cargue las
instrucciones de Blender. Si no lo pones, Python no sabe que puede manejar Blender.
dijo:
Blender.Draw.PupBlock ("Hola", ["Esto es la linea 1", "y esta la linea 2"])
Esta es la linea que hace que salga nuestro cuadro.
Como véis, llama a la librería Blender, luego a una parte de esa librería (Draw), y después a un
comando de la librería Draw, PupBlock. Lo que va entre paréntesis son los argumentos de la
función, es decir, lo que quieres que escriba, línea por línea. Con esto nos vamos a conformar
por hoy.
dijo:
Resumen de la lección:
Usamos archivos de texto con código Python para controlar Blender.
ALT + P Ejecuta lo que escribimos
ALT + Q Detiene el script
import Blender permite a Python manejar los comandos de Blender
Blender.Draw.PupBlock ("Título", ["Linea 1", "Linea 2", "Línea 3"]) sirve para hacer un
cuadro de texto con su botón OK y las líneas que queramos.