Inturiasgary’s Blog

mayo 12, 2010

Módulos en Python

Filed under: Python — inturiasgary @ 6:42 pm

Si sale del intérprete de Python y entra de nuevo, las definiciones que ha hecho (funciones y variables) se pierden. Por lo tanto, si desea escribir un programa algo más largo, es mejor usar un editor de texto para preparar la entrada para el intérprete y ejecutarlo con ese archivo como entrada en su lugar. Esto se conoce como la creación de un script. A medida que su programa se hace más largo, puede dividirlo en varios archivos para facilitar su mantenimiento. También puede utilizar una función que ha escrito en varios programas sin copiar su definición en cada programa.

Para apoyar esto, Python tiene una forma de poner definiciones en un archivo y utilizarlos en una secuencia de comandos o en una instancia interactiva del intérprete.  Este archivo se denomina un módulo, las definiciones de un módulo se pueden importar a otros módulos o dentro del módulo principal (la colección de variables que se tiene acceso a un programa ejecutado en el nivel superior y en el modo de calculadora).

Un módulo es un archivo que contiene definiciones y declaraciones de Python. El nombre del archivo es el nombre del módulo con el sufijo. py anexado. Dentro de un módulo, el nombre del módulo (como cadena) está disponible como el valor de la variable global __name__. Por ejemplo, utilice su editor de texto favorito para crear un archivo llamado fibo.py en el directorio actual con el siguiente contenido:

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print b,
        a, b = b, a+b

def fib2(n): # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result


Ahora ingrese al interprete Python e  importe el módulo con el siguiente comando:

>>> import fibo

Ahora usando en nombre del módulo podemos acceder a sus funciones como por ejemplo:

>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

si se va a hacer uso de una función con frecuencia, se puede asignar a un nombre local:

>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

Uso de la clausula else en declaraciones de bucle en Python

Filed under: Python — inturiasgary @ 5:18 pm

Las declaraciones de bucle podrían tener una clausula else; que se ejecuta cuando el bucle termina por agotamiento de la lista (con for) o cuando la condición se vuelve false (con while), pero no cuando el bucle es terminado por una declaración break. Ejemplificaremos en el siguiente bucle, que realiza la búsqueda de números primos:

>>> for n in range(2, 10):
… for x in range(2, n):
…     if n % x == 0:
…         print n, ‘equals’, x, ‘*’, n/x
…        break
…     else:
…         # loop fell through without finding a factor
…         print n, ‘is a prime number’

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

Strings Unicode en Python

Filed under: Python — inturiasgary @ 5:00 pm

En Python 2.0 y en sus versiones posteriores un nuevo tipo de dato para almacenar texto esta disponible al programador: el objeto Unicode. Este puede ser usado para almacenar y manipular datos Unicode (referencia http://www.unicode.org/) y se integra bien con los objetos de cadena existentes, siempre que las auto conversiones sean necesarias.
Unicode tiene la ventaja de proporcionarnos un ordinal para cada personaje en cada script utilizado en los textos antiguos y modernos. Anteriormente había solo 256 caracteres ordinales posibles para la secuencia de comandos. Los textos estaban vinculados normalmente a una página de código que asignaba los ordinales a los caracteres. Esto llevó a la confusión muy especialmente con respecto a la internacionalización (normalmente escrito como i18n — ‘i’ + 18 characters + ‘n’) de software. Unicode resuelve estos problemas mediante la definición de una página de códigos para todos los scripts.
La creación de caracteres Unicode en Python e tan simple como la creación normal:

>>> u’Hola Mundo !’
u’Hola Mundo !’

El pequeño ‘u’ en el principio del mensaje indica que una cadena Unicode es creada. Si quisiéramos incluir caracteres especiales en la cadena, podríamos realizarlo usando la codificación Python Unicode-Scape. El siguiente ejemplo nos muestra como:

>>> u’Hola\u0020Mundo !’
u’Hola Mundo !’

La salida de la secuencia \u0020 indica que se inserta un caractér Unicode con el valor ordinal 0x0020 (El caractér espacio) en la posición dada.
Otros caracteres son interpretados usando sus respectivos valores ordinales como ordinales Unicode. Si tienes cadenas literales en la codificación estandard Latin-1 que es usado mayormente en los paises del lado oeste, tu encontraras conveniente que los pocos 256 caracteres de Unicode son los mismos que los 256 caracteres del Latin-1.
Para los expertos, hay también el modo raw. para usarlos se debe colocar al principio ‘ur’ el cual dirá que está haciendo uso de la codificación Raw-Unicode-Escape.
ejemplo:

>>> ur’Hola\u0020Mundo!’
u’Hola Mundo !’
>>> ur’Hola\\u0020Mundo !’
u’Hola\\\\u0020Mundo !’

Aparte de estas codificaciones estandard, Python provee un conjunto de formas para la creacion de cadenas Unicode basándonos en codificaciones conocidas.
La función unicode() nos provee acceso a todos los codecs (COdificador y DECodificadores) Unicode. Algunos de esto como ser Latin-1, ASCII, UTF-8, y UTF-16.
Ejemplo:

>>> u”abc”
u’abc’
>>> str(u”abc”)
‘abc’
>>> u”äöü”
u’\xe4\xf6\xfc’
>>> str(u”äöü”)
Traceback (most recent call last):
File “”, line 1, in ?
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)

Crea un blog o un sitio web gratuitos con WordPress.com.