Funciones definidas por el usuario
Definición de función y su utilidad
Una función en informática se refiere al conjunto de instrucciones y expresiones que realizan una tarea en particular aparte del programa desde donde son invocadas, incluso desde otros programas. Además las funciones también pueden responder a eventos, aceptar datos como parámetros y pueden eventualmente devolver datos de igual manera. Es importante destacar que las funciones solo se ejecutan en el momento en que son llamadas, cual permite reutilizar el mismo código de manera indefinida tantas veces como sea necesario. Otra gran ventaja que permite el uso de funciones es la posibilidad de dividir el programa en partes mas pequeñas creando segmentos de código para que trabajen en armonía unos con otros. En Python ya existen algunas funciones propias del lenguaje que están incorporadas en la biblioteca estándar. Sin embargo Python al igual que otros lenguajes de programación, no está limitado al uso exclusivo de las funciones incorporadas en su biblioteca.
Es importante mencionar que las funciones y métodos son sinónimos siempre y cuando la función este dentro de una clase. Esto se ve mas a detalle en el apartado de POO
Funciones definidas por el usuario
En Python es posible definir funciones adicionales personalizadas, también llamadas funciones definidas por el usuario. Para definir una función personalizada se usa la palabra reservada DEF, seguido del nombre de la función y entre paréntesis () los parámetros a recibir opcionalmente separados por coma y dos puntos (:). Es importante en la primera línea de la función dejar una indentación o sangrado para que Python reconozca el cuerpo de la función y el final de la misma. Entonces la sintaxis para definir una función personalizada es como sigue:
DEF <nombre de la función> (<parámetros opcionales>):
<instrucciones propias de la función>
return <valor opcional>
La instrucción RETURN es opcional, ya que como se dijo anteriormente, la devolución de valores en una función es opcional, por lo tanto si la función devuelve valores se usará RETURN seguido de los valores devueltos, y si no devuelve VALORES simplemente se omite.
Las reglas para definir el nombre de la función son las mismas que las que se vieron previamente para definir los nombres de las variables
Como podemos ver el paso de argumentos a las funciones al igual que la devolución de valores son opcionales. Sin embargo obligatorio en la definición de funciones el uso de la palabra reservada DEF antepuesta al nombre o identificador de la función y el uso de los 2 puntos (:) con las correspondientes instrucciones debidamente sangradas que componen el cuerpo de la función. También es obligatorio enviar los argumentos a la función con el tipo y la cantidad definida en caso de haber definido parámetros de entrada a la función, en caso contrario el intérprete devolverá un error- Veamos un ejemplo de este caso:
Resultado:
Traceback (most recent call last):
File "e:\Documentos\Desarrollos\Python\Curso-Python\10 Funciones definidas por el usuario.py", line 350, in <module>
print(suma())
TypeError: suma() missing 2 required positional arguments: 'a' and 'b'
Como podemos ver el error esta relacionado a que se requieren 2 argumentos que no están siendo enviados a la función como se esperaba. Veamos la solución a este problema:
Resultado:
5
Como podemos comprobar la función esta funcionando como se esperaba y sin errores.
Una vez definida la función basta con escribir el identificador o nombre de la función (y sus parámetros en caso que los tenga) para ejecutarla, tal cual como si fuera cualquier otra instrucción en Python de las que hemos visto previamente. Si no es invocada a función nunca va a ejecutarse. Hay que tomar en cuenta que se deben colocar los paréntesis al llamara una función aunque no se vayan a pasar parámetros. Veamos el siguiente ejemplo:
Resultado:
Hola mundo
Durante el desarrollo de un sistema es muy común que se presente la necesidad de crear funciones personalizadas que realicen una tarea en particular pero que se haga necesario postergar su codificación para después y seguir con el flujo del programa principal. Sin embargo Python no permite la creación de funciones vacías o sin al menos una línea de código dentro de ellas. Es por ello que existe la instrucción PASS, su sintaxis es simplemente la palabra reservada 'pass'. Veamos el siguiente ejemplo:
Resultado:
IndentationError: expected an indented block after function definition on line 104
El intérprete de Python erroja un error al no encontrar ninguna instrucción con el debido sangrado indicando el inicio del bloque de instrucciones de la función FuncionVacia(). De hecho sugiere que puede ser un error de sangrado al encontrar una instrucción al mismo nivel que la definición de la función. Sin embargo, si deseamos poder seguir trabajando en el programa principal pero dejando la función creada basta con usar la palabra reservada 'pass'. Veamos el siguiente ejemplo:
Resultado:
Se ejecuta el código sin problemas
Como podemos ver se ha ejecutado el código del programa principal, teniendo una función declarada sin instrucciones en su bloque de código salvo la que devuelve el flujo de la ejecución del programa al bloque principal donde se creó dicha función.
En el ejemplo anterior se puede observar el uso básico de funciones, veamos como sería el uso de parámetros en una función definida por el usuario en el siguiente ejemplo:
Resultado ingresando la cadena 'Cesar' por teclado cuando el programa lo solicita:
Ingrese su nombre:Cesar
Hola Cesar
Como podemos comprobar la función identificada con el nombre <saludar> ha aceptado como parámetro la cadena de caracteres ingresada por teclado a través de la variable sNombre, para posteriormente imprimirlo por pantalla a través de la función incorporada PRINT(). Una vez invocada la función definida pasando el parámetro 'Cesar', ésta ejecuta las instrucciones que se encuentren luego de los 2 puntos (:) y que esten dento del sangrado de la misma función.
Es muy importante mantener el sangrado de las instrucciones a fin de evitar errores en la definición de las funciones, tales como instrucciones que quedan fuera de la función o la inclusión errada de instrucciones externas, hay que recordar que Python va a entender que todas las instrucciones que encuentre a continuación de los dos puntos (:) forman parte del conjunto de instrucciones que componen la función, determinando el final del bloque de código al encontrar el sangrado restablecido antes de la declaración de la función.
En este apartado se ha hecho uso de la función incorporada en Python llamada INPUT(). PAra mas detalles de ésta función ver el apartado funciones incorporadas en Python.
Veamos otro ejemplo con retorno de valores:
Resultado ingresando los valores 3 y 2 por teclado cuando el programa solicita el ingreso de datos:
Ingrese el primer valor a sumar:3
Ingrese el segundo valor a sumar:2
La suma de 3 + 2 da como resultado 5
Como se puede observar, la función definida por el usuario con el nombre <sumar> ha aceptado 2 valores enteros definidos como parámetros de entrada en las variables x e y, luego ha almacenado el resultado de la operación suma en la variable identificada con el nombre 'resultado' y ha retornado dicho valor a través de dicha variable luego de la palabra reservada return. En el programa principal, desde donde se ha invocado la función <sumar>, se ha impreso por pantalla un mensaje que muestra la operación realizada, los valores ingresados por el usuario para realizar la operación y el resultado de dicha operación a través de la invocación de la función sumar() pasando como argumentos los 2 valores solicitados por teclado almacenados en las variables iValorA e iValorB.
Nota: existe una diferencia importante entre las palabras 'parámetro' y 'argumento' en lo que se refiere al uso de funciones en informática. Los parámetros son los elementos declarados en el prototipo de las funciones que admiten valores para ser procesados dentro de la función, mientras que los argumentos son los datos como tal que se son enviados a la función. En el ejemplo anterior, los parámetros serían x e y, ya que son los medios para recibir los datos a ser procesados, mientras que los argumentos serian iValorA e iValorb, ya que contienen efectivamente la data a ser procesada. De igual forma es importante destacar que los argumentos en tiempo de diseño se llaman argumentos formales y en tiempo de ejecución se llaman argumentos actuales. En el ejemplo anterior, y siguiendo la nomenclatura mencionada los argumentos actuales serian los números 3 y 2, correspondientes a los argumentos formales iValora e iValorB que van a ser recibidos por la función definida por el usuario SUMAR() a través de los parámetros x e y.
Paso de argumentos por valor y por referencia
Resultado:
(11, 21)
Como podemos comprobar Python ha modificado las variables externas a y b sumando una unidad como se especificó dentro de la función modifica_referencia.
Comentarios
Publicar un comentario