Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Guía de aprendizaje de python, Tesinas de Programación C

guia practica para programar con python

Tipo: Tesinas

2019/2020

Subido el 31/10/2020

pedro-imfante
pedro-imfante 🇨🇴

1 documento

1 / 77

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Guía de aprendizaje de Python
Release 2.0
Guido van Rossum
Fred L. Drake, Jr., editor
16 de octubre de 2000
BeOpen PythonLabs
Correo electrónico: [email protected]
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d

Vista previa parcial del texto

¡Descarga Guía de aprendizaje de python y más Tesinas en PDF de Programación C solo en Docsity!

Guía de aprendizaje de Python

Release 2.

Guido van Rossum

Fred L. Drake, Jr., editor

16 de octubre de 2000

BeOpen PythonLabs

Correo electrónico: [email protected]

BEOPEN.COM TERMS AND CONDITIONS FOR PYTHON 2.

BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1

  1. This LICENSE AGREEMENT is between BeOpen.com (“BeOpen”), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization (“Licensee”) accessing and otherwise using this software in source or binary form and its associated documentation (“the Software”).
  2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee.
  3. BeOpen is making the Software available to Licensee on an “AS IS” basis. BEOPEN MAKES NO REPRESEN- TATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTA- BILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
  4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVI- SED OF THE POSSIBILITY THEREOF.
  5. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
  6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of Cali- fornia, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the “BeOpen Python” logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page.
  7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement.

CNRI OPEN SOURCE LICENSE AGREEMENT

Python 1.6 is made available subject to the terms and conditions in CNRI’s License Agreement. This Agreement together with Python 1.6 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1012. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1012. CWI PERMISSIONS STATEMENT AND DISCLAIMER

Copyright c© 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved.

Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.

STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFT- WARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CON- SEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

ÍNDICE GENERAL

CAPÍTULO

UNO

Abriendo el apetito

Si en alguna ocasión has escrito un guion para intérprete de órdenes (o shell script ) de UNIX^1 largo, puede que conoz- cas esta sensación: Te encantaría añadir una característica más, pero ya es tan lento, tan grande, tan complicado... O la característica involucra una llamada al sistema u otra función accesible sólo desde C. El problema en sí no suele ser tan complejo como para transformar el guion en un programa en C. Igual el programa requiere cadenas de longitud variable u otros tipos de datos (como listas ordenadas de nombres de fichero) fáciles en sh, pero tediosas en C. O quizá no tiene tanta soltura con C.

Otra situación: Quizá tengas que trabajar con bibliotecas C diversas y el ciclo normal C escribir-compilar-probar- recompilar es demasiado lento. Necesitas desarrollar software con más velocidad. Posiblemente has escrito un progra- ma al que vendría bien un lenguaje de extensión y no quieres diseñar un lenguaje, escribir y depurar el intérprete y adosarlo a la aplicación.

En tales casos, Python puede ser el lenguaje que necesitas. Python es simple, pero es un lenguaje de programación real. Ofrece más apoyo e infraestructura para programas grandes que el intérprete de órdenes. Por otra parte, también ofrece mucha más comprobación de errores que C y, al ser un lenguaje de muy alto nivel , tiene incluidos tipos de datos de alto nivel, como matrices flexibles y diccionarios, que llevarían días de programación en C. Dados sus tipos de datos más generales, se puede aplicar a un rango de problemas más amplio que Awk o incluso Perl , pero muchas cosas son, al menos, igual de fáciles en Python que en esos lenguajes.

Python te permite dividir su programa en módulos reutilizables desde otros programas Python. Viene con una gran colección de módulos estándar que puedes utilizar como base de tus programas (o como ejemplos para empezar a aprender Python). También hay módulos incluidos que proporcionan E/S de ficheros, llamadas al sistema, sockets y hasta interfaces a IGU (interfaz gráfica con el usuario) como Tk.

Python es un lenguaje interpretado, lo que ahorra un tiempo considerable en el desarrollo del programa, pues no es necesario compilar ni enlazar. El intérprete se puede utilizar de modo interactivo, lo que facilita experimentar con características del lenguaje, escribir programas desechables o probar funciones durante el desarrollo del programa de la base hacia arriba. También es una calculadora muy útil.

Python permite escribir programas muy compactos y legibles. Los programas escritos en Python son típicamente mucho más cortos que sus equivalentes en C o C++, por varios motivos:

  • Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia.
  • El agrupamiento de sentencias se realiza mediante sangrado (indentación) en lugar de begin/end o llaves.
  • No es necesario declarar los argumentos ni las variables.

Python es ampliable : si ya sabes programar en C, es fácil añadir una nueva función o módulo al intérprete, para realizar operaciones críticas a la máxima velocidad o para enlazar programas en Python con bibliotecas que sólo están (^1) En Windows, el intérprete de órdenes se corresponde con la ventana MS-DOS y los guiones con los archivos ‘.bat’, aunque la potencia de los guiones UNIX es mucho mayor.

disponibles en forma binaria (como bibliotecas de gráficos específicas del fabricante). Una vez enganchado, puedes enlazar el intérprete Python a una aplicación escrita en C y utilizarlo como lenguaje de macros para dicha aplicación.

A propósito, el nombre del lenguaje viene del espectáculo de la BBC “Monty Python’s Flying Circus” (el circo ambulante de Monty Python) y no tiene nada que ver con desagradables reptiles. Hacer referencias a sketches de Monty Python no sólo se permite: ¡es recomendable!

1.1 Por dónde seguir

Ahora que estás emocionado con el Python, querrás examinarlo con más detalle. Como la mejor manera de aprender un lenguaje es utilizarlo, desde aquí te invitamos a hacerlo.

En el siguiente capítulo se explica la mecánica de uso del intérprete. Es información un tanto aburrida, pero esencial para probar los ejemplos posteriores.

El resto de la guía presenta varias características del sistema y del lenguaje Python mediante ejemplos, empezando por las expresiones, sentencias y tipos de datos sencillos, pasando por las funciones y los módulos, para finalizar con una primera visión de conceptos avanzados, como excepciones y clases definidas por el usuario.

2 Capítulo 1. Abriendo el apetito

2.1.1 Traspaso de argumentos

El intérprete pasa el nombre del guion y los argumentos, si los conoce, mediante la variable sys.argv, que es una lista de cadenas. Su longitud es al menos uno (cuando no hay guion y no hay argumentos, sys.argv[0] es una cadena vacía). Cuando el guion es ’-’ (es decir, la entrada estándar), sys.argv[0] vale ’-’. Cuando se utiliza -c orden , sys.argv[0] vale ’-c’. Las opciones tras -c orden no las utiliza el intérprete Python, sino que quedan en sys.argv para uso de la orden.

2.1.2 Modo interactivo

Cuando se leen órdenes desde una tty, se dice que el intérprete está en modo interactivo. En este modo, espera a la siguiente orden con el indicador principal , que suele se tres signos ‘mayor’ (‘>>>’ ). Para las líneas adicionales, se utiliza el indicador secundario , por omisión tres puntos (‘... ’).

El intérprete muestra un mensaje de bienvenida con su número de versión e información de derechos de copia, antes de mostrar el primer indicador, por ejemplo:

python Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>>

Las líneas de continuación son necesarias al introducir construcciones milti-línea. Por ejemplo, echa un visatazo a esta sentencia if:

>>> la_tierra_es_plana = 1 >>> if la_tierra_es_plana: ... print "¡Cuidado, que te caes!" ... ¡Cuidado, que te caes!

2.2 El intérprete y su entorno

2.2.1 Gestión de errores

Cuando ocurre un error, el intérprete muestra un mensaje de error y una traza de la pila. En el modo interactivo, después vuelve al indicador principal. Si la entrada venía de un fichero, sale con un resultado distinto de cero tras mostrar la traza de la pila (las excepciones gestionadas con una sentencia except en una construcción try no son errores en este contexto). Existen errores no capturables que hacen que se cierre el intérprete con un resultado distinto de cero. Por ejemplo, esto ocurre con las inconsistencias internas y, en algunos casos, al quedarse sin memoria. Todos los mensajes de error se escriben en la salida de error estándar (la pantalla, si no se redirige a un fichero u otra cosa). La salida del programa se escribe en la salida estándar (que también es la pantalla, salvo en el caso mencionado antes).

Si se teclea el carácter de interrupción (suele ser Control-C o DEL) en el indicador principal o secundario se cancela la entrada y se hace volver el indicador primario^1. Si se intenta interrumpir mientras se ejecuta una orden, se activa la excepción KeyboardInterrupt, que puede ser gestionada por una construcción try. (^1) Puede haber problemas con el paquete GNU readline que impidan esto.

4 Capítulo 2. Utilización del intérprete Python

2.2.2 Guiones Python ejecutables

En sistemas UNIX tipo BSD, los guiones Python se pueden hacer ejecutables directamente, como guiones de línea de órdenes, poniendo la línea

#! /usr/bin/env python

(suponiendo que el intérprete está en el $PATH del usuario) al principio del guion y dándole al guion permisos de ejecución. ‘#!’ deben ser los primeros caracteres del fichero. Observa que la almohadilla, ‘#’, se utiliza para iniciar un comentario en Python.

2.2.3 El fichero de arranque interactivo

Al usar Python interactivamente, suele ser útil que se ejecuten algunas órdenes estándar cada vez que se arranca el intérprete. Se puede lograr esto poniendo en la variable de entorno $PYTHONSTARTUP el nombre del fichero que contiene las órdenes de arranque. Esto se parece a la característica ‘.profile’ de la línea de órdenes de UNIX o al fichero ‘autoexec.bat’ de MS-DOS.

Este fichero sólo se lee en sesiones interactivas, no cuando Python lee órdenes de un guion, ni cuando se utiliza ‘/dev/tty’ como fuente explícita de órdenes (lo que hace que se comporte casi como una sesión interactiva). Estas órdenes se ejecutan en el mismo espacio nominal que las órdenes, para que los objetos definidos o módulos importados se puedan usar sin necesidad de cualificarlos en la sesión interactiva. También puede cambiar los indicadores principal y secundario (sys.ps1 y sys.ps2) usando este fichero.

Si deseas leer un archivo de arranque adicional del directorio actual puedes programarlo así en el fichero de arranque global, es decir ‘if os.path.isfile(’.pythonrc.py’): execfile(’.pythonrc.py’)’. Si deseas utilizar el fichero de arranque en un guion, debes hacerlo explícitamente dentro del guion:

import os nombreFich = os.environ.get(’PYTHONSTARTUP’) if nombreFich and os.path.isfile(nombreFich): execfile(nombreFich)

2.2. El intérprete y su entorno 5

CAPÍTULO

TRES

Introducción informal a Python

En los siguientes ejemplos, la entrada y la salida se distinguen por la presencia o ausencia de indicadores (‘>>> ’ y ‘... ’). Para repetir el ejemplo debe teclear todo lo que sigue al indicador, cuando aparezca el indicador. Las líneas que no empiezan por un indicador son la salida del intérprete. Observa que un indicador secundario solo en una línea indica que debe teclear una línea en blanco. Esto se utiliza para finalizar una orden multi-línea.

Muchos de los ejemplos de este manual, incluidos los que se escriben interactivamente, incluyen comentarios. Los comentarios en Python empiezan por el carácter almohadilla, ‘#’, y se extienden hasta el final de la línea física. Se puede iniciar un comentario al principio de una línea o tras espacio en blanco o código, pero no dentro de una constante literal. Una almohadilla dentro de una cadena es, simplemente, una almohadilla.

Ejemplos:

éste es el primer comentario

fiambre = 1 # y éste

... ¡y un tercero!

cadena = "# Esto no es un comentario."

3.1 Python como calculadora

Vamos a probar algunas órdenes simples de Python. Arranca el intérprete y espera a que aparezca el indicador principal, ‘>>>’ (no debería tardar mucho).

3.1.1 Números

El intérprete funciona como una simple calculadora: Tú tecleas una expresión y él muestra el resultado. La sintaxis de las expresiones es bastante intuitiva: Los operadores +, - , * y / funcionan como en otros lenguajes (p. ej. Pascal o C). Se puede usar paréntesis para agrupar operaciones. Por ejemplo:

>>> 2+ 4 >>> # Esto es un comentario ... 2+ 4 >>> 2+2 # un comentario junto al código 4 >>> (50-5*6)/ 5 >>> # La división entera redondea hacia abajo: ... 7/ 2 >>> 7/-

Al igual que en C, se usa el signo de igualdad ‘=’ para asignar un valor a una variable. El valor de una asignación no se escribe:

>>> ancho = 20 >>> alto = 5* >>> ancho * alto 900

Se puede asignar un valor simultáneamente a varias variables:

>>> x = y = z = 0 # Poner a cero ’x’, ’y’ y ’z’ >>> x 0 >>> y 0 >>> z 0

La coma flotante funciona de la manera esperada. Los operadores con tipos mixtos convierten el operando entero a coma flotante:

>>> 4 * 2.5 / 3.

>>> 7.0 / 2

También funcionan de la manera esperada los números complejos: Los números imaginarios se escriben con el sufijo ‘j’ o ‘J’. Los números complejos con una parte real distinta de cero se escriben ‘( real + imag j)’, y se pueden crear con la función ‘complex( real , imag )’.

8 Capítulo 3. Introducción informal a Python

>>> ’fiambre huevos’ ’fiambre huevos’ >>> ’L\’Hospitalet’ "L’Hospitalet" >>> "L’Hospitalet" "L’Hospitalet" >>> ’"Sí," dijo.’ ’"Sí," dijo.’ >>> ""Sí," dijo." ’"Sí," dijo.’ >>> ’"En L\’Hospitalet," dijo.’ ’"En L\’Hospitalet," dijo.’

Las cadenas pueden ocupar varias líneas de diferentes maneras. Se puede impedir que el final de línea física se inter- prete como final de línea lógica mediante usando una barra invertida, por ejemplo:

hola = "Esto es un texto bastante largo que contiene\n varias líneas de texto, como si fuera C.\n Observa que el espacio en blanco al principio de la línea es significativo.\n" print hola

mostraría lo siguiente:

Esto es un texto bastante largo que contiene varias líneas de texto, como si fuera C. Observa que el espacio en blanco al principio de la línea es significativo.

O se pueden encerrar las cadenas entre comillas triples emparejadas: """ o ’’’. No es necesario poner barra invertida en los avances de línea cuando se utilizan comillas triples; serán incluidos en la cadena.

print """ Uso: cosilla [OPCIONES] -h Mostrar este mensaje de uso -H NombreServidor Nombre del servidor al que conectarse """

presenta:

Uso: cosilla [OPCIONES] -h Mostrar este mensaje de uso -H NombreServidor Nombre del servidor al que conectarse

El intérprete muestra los resultados de las operaciones con cadenas como se escriben a la entrada: Entre comillas y con las comillas y otros caracteres raros escapados por barras invertidas, para mostrar el valor exacto. La cadena se encierra entre comillas dobles si contiene una comilla simple y no contiene comillas dobles, si no, se encierra entre comillas simples (se puede utilizar print para escribir cadenas sin comillas ni secuencias de escape).

Se puede concatenar cadenas (pegarlas) con el operador + y repetirlas con *:

10 Capítulo 3. Introducción informal a Python

>>> palabra = ’Ayuda’ + ’Z’ >>> palabra ’AyudaZ’ >>> ’<’ + palabra*5 + ’>’ ’’

Dos literales juntos se concatenan automáticamente. La primera línea de arriba se podría haber escrito ‘palabra = ’Ayuda’ ’Z’’. Esto sólo funciona con literales, no con expresiones de cadena arbitrarias.

>>> import string >>> ’cad’ ’ena’ # <- Esto vale ’cadena’ >>> string.strip(’cad’) + ’ena’ # <- Esto vale ’cadena’ >>> string.strip(’cad’) ’ena’ # <- Esto no vale File "", line 1 string.strip(’cad’) ’ena’ ^ SyntaxError: invalid syntax

Se puede indexar una cadena. Como en C, el primer carácter de una cadena tiene el índice 0. No hay un tipo carácter diferente; un carácter es una cadena de longitud uno. Como en Icon, las subcadenas se especifican mediante la notación de corte : dos índices separados por dos puntos.

>>> palabra[4] ’a’ >>> palabra[0:2] ’Ay’ >>> palabra[2:4] ’ud’

A diferencia de las cadenas en C, las cadenas de Python no se pueden cambiar. Si se intenta asignar a una posicion indexada dentro de la cadena se produce un error:

>>> palabra[0] = ’x’ Traceback (innermost last): File "", line 1, in? TypeError: object doesn’t support item assignment >>> palabra[:-1] = ’Choof’ Traceback (innermost last): File "", line 1, in? TypeError: object doesn’t support slice assignment

Sin embargo crear una nueva cadena con el contenido combinado es fácil y eficaz:

>>> ’x’ + palabra[1:] ’xyudaZ’ >>> ’Choof’ + word[-1:] ’ChoofZ’

3.1. Python como calculadora 11

tiene el índice n , por ejemplo:

+---+---+---+---+---+---+ | A | y | u | d | a | Z | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -

La primera fila de números da la posición de los índices 0..5 de la cadena; la segunda da los índices negativos corres- pondientes. El corte desde i hasta j consta de todos los caracteres entre los bordes etiquetados i y j , respectivamente.

Para los índices no negativos, la longitud del corte es la diferencia entre los índices, si los dos están entre límites. Por ejemplo, la longitud de palabra[1:3] es 2.

La función interna len() devuelve la longitud de una cadena:

>>> s = ’supercalifragilisticoexpialidoso’ >>> len(s) 32

3.1.3 Cadenas Unicode

A partir de Python 2.0, el programador dispone de un nuevo tipo de datos para almacenar datos de texto: el objeto Unicode. Se puede usar para almacenar y manipular datos Unicode (consulte http://www.unicode.org) y se integra bien con los objetos de cadena existentes, proporcionando conversiones automáticas si se da el caso.

La codificación Unicode tiene la ventaja de proporcionar un ordinal para cada sistema de escritura utilizado en textos antiguos y modernos. Anteriormente, había sólo 256 ordinales para los caracteres escritos y se solía asociar los textos a una página de códigos, que hacía corresponder los ordinales con los caracteres escritos. Esto llevaba a una gran confusión, especialmente en lo relativo a la internacionalización (comúnmente escrito ‘i18n’ — ‘i’ + 18 characters

  • ‘n’) del software. Unicode resuelve estos problemas definiendo una página de códigos única para todos los sistemas de escritura.

Crear cadenas Unicode en Python es tan simple como crear cadenas normales:

>>> u’Muy buenas’ u’Muy buenas’

La ‘u’ minúscula frente a la comilla indica que se ha de crear una cadena Unicode. Si deseas incluir caracteres especiales dentro de la cadena, lo puedes hacer mediante la codificación Unicode-Escape de Python. El siguiente ejemplo muestra cómo:

>>> u’Muy\u0020buenas’ u’Muy buenas’

La secuencia de escape u0020 indica que se ha de insertar el carácter Unicode con ordinal hexadecimal 0x0020 (el espacio) en la posición indicada.

El resto de los caracteres se interpretan utilizando sus ordinales respectivos directamente como ordinales Unicode. Como ocurre que los primeros 256 ordinales de Unicode coinciden con la codificación estándar Latin-1 utilizada en

3.1. Python como calculadora 13

muchos países occidentales^1 , el proceso de introducir Unicode se ve muy simplificado.

Para los expertos, existe también un modo en bruto, como para las cadenas normales. Se debe preceder la cadena con una ‘r’ minúscula para que Python utilice la codificación En bruto-Unicode-Escape. Sólo aplicará la conversión citada uXXXX si hay un número impar de barras invertidas frente a la ‘u’.

>>> ur’Muy\u0020buenas’ u’Muy buenas’ >>> ur’Muy\u0020buenas’ u’Muy\\u0020buenas’

El modo en bruto es útil cuando hay que meter gran cantidad de barras invertidas, como en las expresiones regulares.

Además de estas codificaciones estándar, Python proporciona un conjunto completo de modos de crear cadenas Uni- code basándose en una codificación conocida.

La función interna unicode() proporciona acceso a todos los codecs (codificadores/descodificadores) Unicode registrados. Algunas de las codificaciones más conocidas a las que pueden convertir estos codecs son Latin-1 , ASCII , UTF-8 y UTF-16. Los últimos dos son codificaciones de longitud variable que permiten almacenar caracteres Unicode de 8 o 16 bits. Python usa UTF-8 como codificación por defecto. Ésto se hace patente cuando se presentan cadenas Unicode o se escriben en ficheros.

>>> u"äöü" u’\344\366\374’ >>> str(u"äöü") ’\303\244\303\266\303\274’

Si tienes datos en una codificación específica y quieres obtener la correspondiente cadena Unicode a partir de ellos, puedes usar la función interna unicode() con el nombre de la codificación como segunod argumento.

>>> unicode(’\303\244\303\266\303\274’,’UTF-8’) u’\344\366\374’

Para reconvertir la cadena Unicode a una cadena con la codificación original, los objetos proporcionan un método encode().

>>> u"äöü".encode(’UTF-8’) ’\303\244\303\266\303\274’

3.1.4 Listas

Python utiliza varios tipos de datos compuestos , que se utilizan para agrupar otros valores. El más versátil es la lista , que se puede escribir como una lista de valores (elementos) separada por comas entre corchetes. Los elementos de una lista no tienen que ser todos del mismo tipo. (^1) En España, Windows utiliza WinANSI, que es muy parecido a Latin-1. MS-DOS y Windows en consola utilizan una codificación propia, denominada OEM a veces, en la que no coinciden algunos caracteres, en concreto las letras acentuadas). Supongo que esto coincide con otros países en los que se habla castellano. Las distribuciones de Linux actuales (2000) utilizan Latin-1 siempre.

14 Capítulo 3. Introducción informal a Python