Manual de Python: Funciones y módulos
Funciones y módulos
Funciones
Las funciones se definen con la palabra clave def.
def fib(n): "Funcion que 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 print fib(100)
... obtenemos:
$ python test.py [1, 2, 4, 8, 16, 32, 64]
La primera línea del cuerpo de la función puede ser una constante de cadena: es la documentación de la función o docstring y se almacena en __doc__. Para acceder a su valor haremos:
print fib.__doc__
... obtenemos:
$ python test.py
Funcion que devuelve la serie de Fibonacci hasta n
La sentencia return <valor> sale de la función devolviendo un valor. Si utilizamos return sin argumentos en medio de la función, sale de la misma y devuelve None.
Para definir argumentos con valor por defecto haremos:
def confirmar(indicador, intentos=4, pass="admin"):
Módulos
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']
Deja un comentario