Lenguaje creado por Guido Van Rossum en Holanda en 1991. Su nombre es un homenaje a los Monty Python.
Lenguaje interpretado multi-plataforma, orientado a objetos.
Resulta muy adecuado para gestión de textos.
Ampliamente utilizado en la web (Zope).
Aunque el código interpretado es más lento que el código compilado, hay que tener en cuenta que cuesta menos desarrollarlo y se usa, normalmente, en programas cortos, en los que no existen diferencias significativas por esta lentitud.
Python permite importar rutinas en lenguaje C, por ejemplo.
Siempre que se importa con éxito un módulo, el intérprete intenta generar un fichero binario con extensión pyc comprensible directamente por el intérprete (más rápido de cargar, y puede usarse para evitar distribuir código fuente).
Los programas en python suelen ser entre 2 y 4 veces más cortos que sus equivalentes en java.
Caracteres ">>>"
Indica que el intérprete de python espera que introduzcamos una orden usando el teclado.
Son textos que no van a ser traducidos por el intérprete.
Se marcan con el carácter # (todo lo que haya entre este carácter y el fin de línea es un comentario).
Operación |
Operador
|
Aridad | Asociatividad |
Precedencia
|
---|---|---|---|---|
Exponenciación |
**
|
Binario | Por la derecha |
1
|
Identidad |
+
|
Unario | - |
2
|
Cambio de signo |
-
|
Unario | - |
2
|
Multiplicación |
*
|
Binario | Por la izqda. |
3
|
División |
/
|
Binario | Por la izqda. |
3
|
Módulo (o resto) |
%
|
Binario | Por la izqda. |
3
|
Suma |
+
|
Binario | Por la izqda. |
4
|
Resta |
-
|
Binario | Por la izqda. |
4
|
Igual que |
==
|
Binario | - |
5
|
Distinto de |
!=
|
Binario | - |
5
|
Menor que |
<
|
Binario | - |
5
|
Menor o igual que |
<=
|
Binario | - |
5
|
Mayor que |
>
|
Binario | - |
5
|
Mayor o igual que |
>=
|
Binario | - |
5
|
Negación |
not
|
Unario | - |
6
|
Conjunción |
and
|
Binario | Por la izqda. |
7
|
Disyunción |
or
|
Binario | Por la izqda. |
8
|
"y" binario |
&
|
Binario | ||
"o" binario |
|
|
Binario | ||
"o exclusiva" binario |
^
|
Binario | ||
desplazamiento a izquierda de bits |
<<
|
Binario | ||
desplazamiento a derecha de bits |
>>
|
Binario |
variable = expresión
Identificador (nombre de variable): letras (del alfabeto inglés), dígitos y/o el carácter de subrayado (_). El primer carácter no debe ser un dígito, y el identificador no debe coincidir con una palabra reservada.
Mayúsculas y minúsculas son diferentes.
Estilo: Los nombres de variables deberían guardar relación con los datos del problema.
Toda variable debe estar inicializada antes de usarla.
Python es un lenguaje que implementa tipos de datos dinámicos, esto es, durante un programa una variable puede cambiar de tipo (asignándole otro). Además es un lenguaje fuertemente tipado, esto es, sus tipos se mantienen de forma consistente.
Existe para todos los operadores aritméticos normales (+=, -=, *=, /=, %=, **=) y binarios (&=, |=, ^=, <<=, >>=).
Ejemplo: i = i +1 es equivalente a i += i + 1
Es un valor especial para representar cuando no hay un valor.
Secuencia de caracteres encerrada entre comillas simples o dobles.
Son inmutables.
Secuencia |
Significado
|
---|---|
\newline |
No se incluye en la cadena (se usa para escribir cadenas que ocupen más de una línea)
|
\\ |
Escribe una \
|
\' |
Comilla simple
|
\" |
Comillas dobles
|
\a |
Sonido de campanilla (bell)
|
\b |
Retroceso (backspace)
|
\f |
Nueva página
|
\n |
Línea nueva
|
\r |
Retorno de carro
|
\t |
Tabulador horizontal
|
\v |
Tabulador vertical
|
\ooo |
Carácter ASCII con código octal ooo
|
\xhh |
Carácter ASCII con código hexadecimal hh
|
Si se precede la cadena por una r. En este tipo de strings, no se interpretan las secuencias de escape (las precedidas por un \).
Carácter |
Significado
|
---|---|
d, i |
Entero en decimal
|
o |
Entero en octal
|
x, X |
Entero en hexadecimal
|
e, E |
Número en coma flotante con exponente
|
f, F |
Número en coma flotante sin exponente
|
g, G |
Número en coma flotante con o sin exponente, según la precisión y la talla del exponente
|
s |
Transforma el objeto en cadena usando str
|
Para poder incluir en una cadena, por ejemplo, las comillas dobles deben venir precedidas del carácter \
Las cadenas son simplemente un tipo especial de secuencias (junto con las listas, tuplas y diccionarios). Todas las secuencias pueden ser troceadas usando la notación de slices.
Si entre los corchetes sólo hay un número positivo, se devuelve el elemento de la posición correspondiente (se cuenta desde cero). Cuando hay dos números, se devuelve la subsecuencia que comienza en el primero y llega hasta antes del último. Una manera de ver cómo se elige el subintervalo es la siguiente. Imagina que las posiciones corresponden a marcas entre los caracteres.
0 | 1 | 2 | 3 | 4 | 5 | 6 |
c | a | d | e | n | a | |
-6 | -5 | -4 | -3 | -2 | -1 |
Para saber qué se obtiene con c[i:j], bata con mirar entre las marcas correspondientes a i y j. Si se omite i, se asume que es cero; si se omite j, se asume que es la longitud de la cadena.
c[:i] + c[i:] es igual a c.
c[i:j:k]: subsecuencia que empieza en i e incluye a todos los elementos que hay desde la posición i cada k posiciones siempre que i+(k*n) < j
Un carácter es una cadena de longitud 1.
Conjunto ordenado de elementos, que pueden ser dispares, separados por comas.
No es lo mismo una lista de un elemento que el elemento solo.
Podemos asignar nuevos valores a partes de la lista, tanto a elementos individuales como a subsecuencias.
Los elementos de las listas pueden tener cualquier tipo; en particular, pueden ser listas.
Podemos hacer que una lista se contenga a sí misma.
Uso: print seguido de una secuencia de expresiones (separadas por comas) cuyo resultado queremos que salga por pantalla.
Si se añade una coma al final, no se incluye un salto de línea como fin de la ejecución.
El operador % puede usarse para formatear la salida.
Un bloque o secuencia de instrucciones estará identificado por compartir una misma indentación o sangrado. En las instrucciones complejas, el comienzo de un nuevo bloque de instrucciones vendrá precedido por ':'
if condición:
acción
acción
...
acción
Cuando condición es cierta (true, o distinta de 0) se ejecutarán las acciones del bloque asociado.
if condición:
acciones
else:
otras acciones
Cuando condición es falsa (false, o 0) se ejecutarán las acciones del bloque asociado.
if condición:
acciones
elif otra condición:
otras acciones
Es un else junto con otro if.
Instrucción vacía. Útil para aquellos en que la sintaxis requiera una instrucción, pero no queramos que se emplee.
while condición:
acción
acción
...
acción
for variable in serie de valores:
acción
acción
...
acción
La serie de valores debe ser una lista o una tupla.
Rompe el bucle, se sale de él, desde cualquier punto del mismo.
Es posible incluir un else al final de un bucle while. Las instrucciones de dicho else se ejecutarán sólo si no se ha acabado el bucle por medio de un break.
range([inicio, ] fin [, paso]): genera una lista de enteros que por defecto empieza en 0 (si no se ha especificado inicio) y acaba en fin - 1. Si se especifica un valor paso, cada elemento de la lista se genera sumándole paso al anterior.
Combinando range con len se pueden recorrer secuencias:
for i in range(len(a)):
print a[-i-1:]
from nombre módulo import símbolo
import nombre módulo
Algunos de los módulos que acompañan a la distribución de python son:
def nombre(lista de argumentos):
acción
acción
...
acción
return expresión
Hace que finalice la función, dando como valor asociada a la misma el resultado de evaluar la expresión.
Las variables son locales, a menos que se declaren explícitamente como globales (con global).
Un módulo será cualquier fichero con código python.
Si no se encuentra en alguna de las carpetas de los módulos estándar, hay que decirle a python que busque también en la carpeta en la que se encuentra:
>>> from sys import *
>>> path.append('/mi/nueva/ruta')
A partir de aquí, se trata igual que un módulo estándar.
La diferencia entre listas y tuplas es que en las últimas no se pueden modificar sus elementos, tan sólo consultarlos.
Estructuras de datos que almacenan secuencias de cualquier tipo de datos.
Son mutables (se pueden cambiar sus componentes).
Se crean por medio de una secuencia de valores separados por comas y delimitados por []
Los valores que componen la lista pueden ser de cualquier tipo, incluso otra lista.
Dada una variable de tipo lista (a la que se le ha asignado una lista), se puede acceder a los elementos de esa lista de diversas formas:
Son secuencias de datos similares a las listas, con la diferencia de que son no mutables (no se pueden cambiar sus componentes).
Creación y acceso similar a las listas, pero creadas delimitándolas por () y separando sus elementos por comas. Si la tupla tiene un sólo elemento, se pone éste seguido de una coma.
También llamados vectores o memorias asociativas.
Pares clave-valor donde clave puede ser cualquier objeto no mutable. Las claves han de ser únicas dentro de un diccionario.
Funcionan como vectores normales en los que los índices pueden ser cualquier tipo de objeto inmutable (números, cadenas y tuplas cuyos componentes sean inmutables).
Creación similar a la de una lista o tupla pero delimitando sus elementos por {}.
Diccionario vacío: {}
En este caso un elemento es un par <clave>:<valor>
Al igual que en las listas y tuplas, el acceso a los elementos es por medio de corchetes, sólo que en lugar de usar índices se accede por medio de la clave.
<var_diccionario>.has_key(): devuelve 1 si la clave que se le pasa como argumento está y cero en caso contrario.
<var_diccionario>.keys(): devuelve una lista con las claves de los elementos del diccionario <var_diccionario>.
<var_diccionario>.get(): recibe dos argumentos: el primero es la clave que se va a buscar y el segundo el valor que se devolverá en caso de no encontrarla (si no se especifica, devuelve None). En caso de encontrarla, devuelve el valor correspondiente a dicha clave.
Uso: Crear un fichero
Argumentos: nombre del fichero y modo de apertura ("r" para leer, y "w" para escribir).
El valor que devuelve open es la dirección del fichero que se asignará a una variable o descriptor de fichero que se usará para las operaciones sobre el mismo.
from urllib import *
f = urlopen('http://www.uji.es')
for linea in f:
print linea[:-1]
f.close()
Cierre del fichero previamente abierto.
<descriptor_de_fichero>.close()
Lee todo el fichero y lo devuelve en forma de cadena.
Argumento opcional: nº máximo de bytes a leer.
Si alcanza el fin de fichero devuelve la cadena vacía.
<descriptor_de_fichero>.read()
Lee una línea del fichero y lo devuelve en forma de cadena (incluyendo, si lo hay, el carácter de fin de línea).
Si alcanza el fin de fichero devuelve la cadena vacía.
<descriptor_de_fichero>.readline()
Devuelve una lista con todas las líneas del fichero (resultado de repetidas llamadas a readline()).
<descriptor_de_fichero>.readlines()
Escribe una cadena (argumento) en el fichero. Devuelve None.
<descriptor_de_fichero>.write(s)