Los módulos son librerías de funciones, archivos con extensión .py que contienen funciones, de manera que podemos utilizarlas en los scripts importándolas ya sea desde el propio script o desde otros módulos. El nombre del módulo es el nombre del fichero y dentro del módulo es accesible mediante la variable __name__.
Por ejemplo, el módulo fibo contiene dos funciones, fib() y print_fib(). El contenido de fibo.py es el siguiente:
def fib(n): "Devuelve la serie de Fibonacci hasta n" resultado = [] a = 0 b = 1 while b < n: resultado.append(b) a = b b = a + b return resultado def print_fib(n): "Imprime la serie de Fibonacci hasta n" print fib(n) |
Para utilizar las funciones del módulo fibo en el intérprete interactivo las importaremos con import y podremos acceder a ellas con fibo.fib() y fibo.print_fib():
>>> import fibo >>> fibo.print_fib(200) [1, 2, 4, 8, 16, 32, 64, 128] >>> print fibo.__name__ fibo |
De la misma manera podemos utilizar las funciones de un módulo en un script:
#!/usr/bin/python import fibo print fibo.fib(100) fibo.print_fib(200) |
… obtenemos:
$ python test.py [1, 2, 4, 8, 16, 32, 64] [1, 2, 4, 8, 16, 32, 64, 128] |
También podemos importar funciones concretas de un módulo:
>>> from fibo import print_fib |
… o todas:
>>> from fibo import * |
… en cuyo caso no se referencian mediante el nombre del módulo sino por su propio nombre:
>>> print_fib(200) [1, 2, 4, 8, 16, 32, 64, 128] |
Nota
En general es preferible import fibo que from fibo import *, ya que esto último da como resultado código menos legible y mayor probabilidad de conflictos de nombres.
Cuando se importa un módulo el intérprete busca el fichero en la lista de directorios dada por la variable sys.path, y en ese orden. El primer directorio de la lista (sys.path[0] = ”), es el directorio actual donde está ubicado el propio script:
>>> import sys >>> sys.path ['', '/usr/lib/python2.6', '/var/lib/python-support/python2.6', '/usr/local/lib/python2.6/dist-packages'] >>> sys.path.append('/mi/nueva/ruta') >>> sys.path ['', '/usr/lib/python2.6', '/var/lib/python-support/python2.6', '/usr/local/lib/python2.6/dist-packages', '/mi/nueva/ruta'] |
La función dir() enumera la lista de nombres definidos actualmente (todo tipo de nombres: variables, módulos, funciones, etc.):
>>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>> import fibo >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'fibo'] >>> dir(fibo) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'fib', 'print_fib'] |
Los nombres de las funciones y variables internas están definidos en el módulo estándar __builtin__:
>>> import __builtin__ >>> dir(__builtin__) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', ... 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip'] |
Módulos interesantes
Módulos interesantes | |
Tema | Módulo |
Interfaces gráficas | pyGtk pyQT PyKDE Pmw Tkinter 3000 Tix |
Bases de datos | MySQL-Python Gadfly psycopg kinterbasdb cx_Oracle pySQLite |
MSN Messenger | msnlib msnp |
Imágenes | PIL gdmodule VideoCapture |
Ciencias | scipy NumPy matplotlib |
Vídeo-juegos | Pygame pyOpenGL |
Jabber | jabberpy |
Web | scrape pythonweb mechanize Feed Parser |
Geo-localización | geoname.py |
Puerto serie | pySerial USPP |
Puerto paralelo | pyParallel |
Puerto USB | pyUSB |
Windows | ctypes pywin32 pywinauto pyrtf wmi |
PDA/GSM/Móviles | pymo pyS60 |
Sonido | pySonic pyMedia FMOD pyMIDI |
GMail | libgmail |
pyGoogle | |
Expect | pyExpect |
WordNet | pyWordNet |
Recursos
- Python Package Index: PyPI