Quick link to menu (Bottom of page)

Servidor Web de Carlos Carrascosa Casamayor

Python

"Python ha sido parte importante de Google desde el principio, y lo sigue siendo a medida que el sistema crece y evoluciona. Hoy día, docenas de ingenieros de Google usan Python y seguimos buscando gente diestra en este lenguaje."


Peter Norvig, director de calidad de búsquedas de Google Inc.

Introducción

Historia

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).

Consideraciones a tener en cuenta

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.

Prompt

Caracteres ">>>"

Indica que el intérprete de python espera que introduzcamos una orden usando el teclado.

Expresiones

Espacios en blanco

  • No se pueden poner en medio de un número.
  • No se pueden poner al principio de una expresión.

Comentarios

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).

Operadores

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    

Tipos de Datos

  • Enteros
    • Ejemplo 1:
        • >>> 3 / 2
        • 1
    Ejemplo 2:
        • >>> 3.0 / 2
        • 1.5
  • Floats
    • Números en coma flotante: constan de dos partes (mantisa y exponente)
      • Ejemplo: 2e3 (mantisa 2 y exponente 3) = 2 * (10 elevado a 3) = 1000
  • Lógicos o Booleanos
    • True / False
    • Operadores no asociativos:
      • Ejemplo: 2<3<4 es equivalente a (2<3) and (3<4)
  • Caracteres
    • Cualquier símbolo entre comillas simples (') o dobles (")
      • Ejemplo:
        • >>> p = 'A'
        • >>> p = "A"
    • Funciones:
      • ord( <carácter> )
        • Devuelve la posición en la tabla ASCII del carácter pasado como argumento
        • Ejemplo:
          • >>> ord( p )
          • 65
      • chr( <número> )
        • Devuelve el carácter cuya posición en la tabla ASCII es el número que recibe como argumento
        • Ejemplo:
          • >>> chr( 65 )
          • 'A'
          • >>> chr( ord( 'A' ) )
          • 'A'
  • Cadenas (strings)
    • Secuencia de caracteres delimitado por comillas simples (') o dobles (")
      • Ejemplo 1:
        • >>> nombre = "Pepe"
        • >>> nombre + ' Gil'
        • 'Pepe Gil'
      • Ejemplo 2:
        • >>> 'C' * 3
        • 'CCC'
      • Ejemplo 3:
    >>>(4*'<'+nombre+'>'*4)*2
        • '<<<<Pepe>>>><<<<Pepe>>'

Variables

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.

Asignación con operador

Existe para todos los operadores aritméticos normales (+=, -=, *=, /=, %=, **=) y binarios (&=, |=, ^=, <<=, >>=).

Ejemplo: i = i +1 es equivalente a i += i + 1

El Valor None

Es un valor especial para representar cuando no hay un valor.

Cadenas

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

Raw strings

Si se precede la cadena por una r. En este tipo de strings, no se interpretan las secuencias de escape (las precedidas por un \).

Operaciones

  • Concatenación: +
  • Repetición de cadenas: *
    • Necesita dos datos: uno de tipo cadena y otro de tipo entero.
    • Resultado: concatenación de la cadena consigo misma tantas veces como indique el número entero.
  • Longitud de una cadena: len
  • Operador %:
    • Operando izquierdo: cadena con indicaciones de formato simlares al printf.
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
    • Operando derecho: expresión o tupla.
    • Resultado: cadena resultante de sustituir las marcas de formato en el operando izquierdo por el valor o valores del operando derecho.
  • Módulo string:
    • replace(subcadena_original, subcadena_destino)

Caracteres Especiales

Para poder incluir en una cadena, por ejemplo, las comillas dobles deben venir precedidas del carácter \

Subsecuencias

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.

Listas

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.

Operaciones

  • Como las cadenas, tienen las operaciones +, * y len().
  • split(): Devuelve una lista a partir de una cadena, donde ha separado la cadena en elementos usando como separador el espacio en blanco.
  • split(separador): Igual que el anterior pero especificando el separador.

entrada / salida

print

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.

Estructuras de
control

Bloque de instrucciones

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 ':'

Sentencias condicionales

if

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.

else

if condición:

acciones

else:

otras acciones

Cuando condición es falsa (false, o 0) se ejecutarán las acciones del bloque asociado.

elif

if condición:

acciones

elif otra condición:

otras acciones

Es un else junto con otro if.

pass

Instrucción vacía. Útil para aquellos en que la sintaxis requiera una instrucción, pero no queramos que se emplee.

Sentencias de repetición

while

while condición:

acción
acción
...
acción

for-in

for variable in serie de valores:

acción
acción
...
acción

La serie de valores debe ser una lista o una tupla.

break

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.

funciones

Predefinidas

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:]

Importación de módulos

from nombre módulo import símbolo

import nombre módulo

Módulos estándar

Algunos de los módulos que acompañan a la distribución de python son:

  • calendar: Funciones de calendario.
  • commands: Permite usar comandos propios de sistemas unix.
  • os: Permite usar comandos del sistema operativo independientes del sistema que sea.
  • getopt: Permite pasar argumentos en la línea de comandos.
  • math: Biblioteca matemática estándar.
  • cmath: Biblioteca matemática para números complejos.
  • ftplib: Permite la conexión e interacción con un servidor FTP remoto.
  • pickle y cpickle: Permiten guardar cualquier estructura de datos en un fichero, incluso en formato texto.
  • random: Biblioteca para generación de números aleatorios.
  • strings: Funciones de tratamiento y manejo de cadenas.
  • curses.

Definición

def nombre(lista de argumentos):

acción
acción
...
acción

return

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).

Definición de Módulos

Un módulo será cualquier fichero con código python.

Importación de módulos de usuario

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.

listas y tuplas

La diferencia entre listas y tuplas es que en las últimas no se pueden modificar sus elementos, tan sólo consultarlos.

Listas

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.

Acceso a valores

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:

  • <var_lista>[<índice>]: accede al elemento de la lista en la posición indicada por índice (teniendo en cuenta que el primer elemento es el 0).
  • <var_lista>[: <fin_índice>]: devuelve la sublista formada por los elementos desde el inicial hasta fin_índice - 1, es decir, tantos elementos como indica fin_índice comenzando desde el principio de la lista.
  • <var_lista>[<ini_índice> : <fin_índice> ]: devuelve la sublista formada por los elementos desde el ini_índice hasta fin_índice - 1.
  • <var_lista>[<ini_índice> :]: devuelve la sublista formada por los elementos desde el ini_índice hasta el final de la lista original.

Tuplas

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.

diccionarios

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.

ficheros

open

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()

close

Cierre del fichero previamente abierto.

<descriptor_de_fichero>.close()

read

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()

readline

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()

readlines

Devuelve una lista con todas las líneas del fichero (resultado de repetidas llamadas a readline()).

<descriptor_de_fichero>.readlines()

write

Escribe una cadena (argumento) en el fichero. Devuelve None.

<descriptor_de_fichero>.write(s)

Enlaces
Ejemplos

Comentarios, sugerencias, ...

Menu:

Take me back to the top.