Categoria: Programacion Tema: Python Titulo: Funciones en python
Fecha del Tema: 2012-09-23 22:43:49 Funciones Una función es un fragmento de código con un nombre asociado que realiza una serie de tareas y devuelve un valor. A los fragmentos de código que tienen un nombre asociado y no devuelven valores se les suele llamar procedimientos. En Python no existen los procedimientos, ya que cuando el programador no especifica un valor de retorno la función devuelve el valor None (nada), equivalente al null de Java. Además de ayudarnos a programar y depurar dividiendo el programa en partes las funciones también permiten reutilizar código. En Python las funciones se declaran de la siguiente forma: <? def mi_funcion(param1, param2): print param1 print param2 ?> Es decir, la palabra clave def seguida del nombre de la función y entre paréntesis los argumentos separados por comas. A continuación, en otra lÃnea, indentado y después de los dos puntos tendrÃamos las lÃneas de código que conforman el código a ejecutar por la función. También podemos encontrarnos con una cadena de texto como primera lÃnea del cuerpo de la función. Estas cadenas se conocen con el nombre de docstring (cadena de documentación) y sirven, como su nombre indica, a modo de documentación de la función. <? def mi_funcion(param1, param2): â??â??â??Esta funcion imprime los dos valores pasados como parametros""" print param1 print param2 ?> Esto es lo que imprime el opeardor ? de iPython o la función help del lenguaje para proporcionar una ayuda sobre el uso y utilidad de las funciones. Todos los objetos pueden tener docstrings, no solo las funciones, como veremos más adelante. Volviendo a la declaración de funciones, es importante aclarar que al declarar la función lo único que hacemos es asociar un nombre al fragmento de código que conforma la función, de forma que podamos ejecutar dicho código más tarde referenciándolo por su nombre. Es decir, a la hora de escribir estas lÃneas no se ejecuta la función. Para llamar a la función (ejecutar su código) se escribirÃa: mi_funcion(â??hola", 2) Es decir, el nombre de la función a la que queremos llamar seguido de los valores que queramos pasar como parámetros entre paréntesis. La asociación de los parámetros y los valores pasados a la función se hace normalmente de izquierda a derecha: como a param1 le hemos dado un valor â??hola" y param2 vale 2, mi_funcion imprimirÃa hola en una lÃnea, y a continuación 2. Sin embargo también es posible modificar el orden de los parámetros si indicamos el nombre del parámetro al que asociar el valor a la hora de llamar a la función: mi_funcion(param2 = 2, param1 = â??hola") El número de valores que se pasan como parámetro al llamar a la función tiene que coincidir con el número de parámetros que la función acepta según la declaración de la función. En caso contrario Python se quejará: <? >>> mi_funcion(â??hola") Traceback (most recent call last): File â??<stdin>", line 1, in <module> TypeError: mi_funcion() takes exactly 2 arguments (1 given) ?> También es posible, no obstante, definir funciones con un número variable de argumentos, o bien asignar valores por defecto a los parámetros para el caso de que no se indique ningún valor para ese parámetro al llamar a la función. Los valores por defecto para los parámetros se definen situando un signo igual después del nombre del parámetro y a continuación el valor por defecto: <? def imprimir(texto, veces = 1): print veces * texto ?> En el ejemplo anterior si no indicamos un valor para el segundo parámetro se imprimirá una sola vez la cadena que le pasamos como primer parámetro: <? >>> imprimir(â??hola") hola si se le indica otro valor, será este el que se utilice: >>> imprimir(â??hola", 2) holahola ?> Para definir funciones con un número variable de argumentos coloca- mos un último parámetro para la función cuyo nombre debe preceder- se de un signo *: <? def varios(param1, param2, *otros): for val in otros: print otros varios(1, 2) varios(1, 2, 3) varios(1, 2, 3, 4) ?> Esta sintaxis funciona creando una tupla (de nombre otros en el ejemplo) en la que se almacenan los valores de todos los parámetros extra pasados como argumento. Para la primera llamada, varios(1, 2), la tupla otros estarÃa vacÃa dado que no se han pasado más parámetros que los dos definidos por defecto, por lo tanto no se imprimirÃa nada. En la segunda llamada otros valdrÃa (3, ), y en la tercera (3, 4).
Funciones Una función es un fragmento de código con un nombre asociado que realiza una serie de tareas y devuelve un valor. A los fragmentos de código que tienen un nombre asociado y no devuelven valores se les suele llamar procedimientos. En Python no existen los procedimientos, ya que cuando el programador no especifica un valor de retorno la función devuelve el valor None (nada), equivalente al null de Java. Además de ayudarnos a programar y depurar dividiendo el programa en partes las funciones también permiten reutilizar código. En Python las funciones se declaran de la siguiente forma: <? def mi_funcion(param1, param2): print param1 print param2 ?> Es decir, la palabra clave def seguida del nombre de la función y entre paréntesis los argumentos separados por comas. A continuación, en otra lÃnea, indentado y después de los dos puntos tendrÃamos las lÃneas de código que conforman el código a ejecutar por la función. También podemos encontrarnos con una cadena de texto como primera lÃnea del cuerpo de la función. Estas cadenas se conocen con el nombre de docstring (cadena de documentación) y sirven, como su nombre indica, a modo de documentación de la función. <? def mi_funcion(param1, param2): â??â??â??Esta funcion imprime los dos valores pasados como parametros""" print param1 print param2 ?> Esto es lo que imprime el opeardor ? de iPython o la función help del lenguaje para proporcionar una ayuda sobre el uso y utilidad de las funciones. Todos los objetos pueden tener docstrings, no solo las funciones, como veremos más adelante. Volviendo a la declaración de funciones, es importante aclarar que al declarar la función lo único que hacemos es asociar un nombre al fragmento de código que conforma la función, de forma que podamos ejecutar dicho código más tarde referenciándolo por su nombre. Es decir, a la hora de escribir estas lÃneas no se ejecuta la función. Para llamar a la función (ejecutar su código) se escribirÃa: mi_funcion(â??hola", 2) Es decir, el nombre de la función a la que queremos llamar seguido de los valores que queramos pasar como parámetros entre paréntesis. La asociación de los parámetros y los valores pasados a la función se hace normalmente de izquierda a derecha: como a param1 le hemos dado un valor â??hola" y param2 vale 2, mi_funcion imprimirÃa hola en una lÃnea, y a continuación 2. Sin embargo también es posible modificar el orden de los parámetros si indicamos el nombre del parámetro al que asociar el valor a la hora de llamar a la función: mi_funcion(param2 = 2, param1 = â??hola") El número de valores que se pasan como parámetro al llamar a la función tiene que coincidir con el número de parámetros que la función acepta según la declaración de la función. En caso contrario Python se quejará: <? >>> mi_funcion(â??hola") Traceback (most recent call last): File â??<stdin>", line 1, in <module> TypeError: mi_funcion() takes exactly 2 arguments (1 given) ?> También es posible, no obstante, definir funciones con un número variable de argumentos, o bien asignar valores por defecto a los parámetros para el caso de que no se indique ningún valor para ese parámetro al llamar a la función. Los valores por defecto para los parámetros se definen situando un signo igual después del nombre del parámetro y a continuación el valor por defecto: <? def imprimir(texto, veces = 1): print veces * texto ?> En el ejemplo anterior si no indicamos un valor para el segundo parámetro se imprimirá una sola vez la cadena que le pasamos como primer parámetro: <? >>> imprimir(â??hola") hola si se le indica otro valor, será este el que se utilice: >>> imprimir(â??hola", 2) holahola ?> Para definir funciones con un número variable de argumentos coloca- mos un último parámetro para la función cuyo nombre debe preceder- se de un signo *: <? def varios(param1, param2, *otros): for val in otros: print otros varios(1, 2) varios(1, 2, 3) varios(1, 2, 3, 4) ?> Esta sintaxis funciona creando una tupla (de nombre otros en el ejemplo) en la que se almacenan los valores de todos los parámetros extra pasados como argumento. Para la primera llamada, varios(1, 2), la tupla otros estarÃa vacÃa dado que no se han pasado más parámetros que los dos definidos por defecto, por lo tanto no se imprimirÃa nada. En la segunda llamada otros valdrÃa (3, ), y en la tercera (3, 4).