Saltar a contenido

Implementación de una función definida por el usuario

Recién acabamos de crear nuestra función hola():

Python
def hola():
    print("¡Hola!")

¿Dónde colocar las funciones definidas por el usuario?

Ahora queremos agregar esta función a nuestro programa principal, pero ¿dónde deberíamos colocarla?

Supongamos lo siguiente:

Python
1
2
3
4
5
# Código principal
nombre = input("¿Cuál es tu nombre? ")
hola()
print(nombre)

Python

# Definiciones de funciones de usuario
def hola():
    print("¡Hola!")

Uno de los aspectos importantes de definir sus propias funciones es que la escribes una vez y la puedes utilizar una y mil veces durante tu programa.

Y estaría muy bueno que, ahora que tu función está definida, te olvides de como es su funcionamiento y que te limites simplemente a llamarla en cualquier parte de tu programa. Y entonces puedas sacarla de tu vista, digamos, bajarla varias líneas de código para que no te entorpezca tu programa principal. Pero, ¿qué pasa si la colocas al final de tu programa? ¿Funcionará? ¿O deberías colocarla al principio? ¿O en medio de tu programa? ¿O en cualquier parte? ¿O en todas partes? ¿O en ninguna parte?

Si volvemos al código de arriba y lo ejecutamos, obtendremos un error similar al siguiente:

Terminal (Entrada/Salida)
¿Cuál es tu nombre? Pablo
Traceback (most recent call last):
  File "c:\Users\usuario\hola_mundo.py", line 2, in <module>
    hola()
    ^^^^
NameError: name 'hola' is not defined

¿Por qué ocurre esto? Porque la función hola() no está definida en el programa en el momento en que se la llama.

En este punto, aunque podemos dar por sentado que la función hola() existe, incluso estando más abajo en el archivo del programa o, como veremos más adelante, incluso si está en otro archivo completamente diferente, en el instante que se ejecute el programa con el intérprete de Python y el control del flujo pase por la primera línea de código que llame a la función, obtendremos un error de nombre (NameError en inglés) que nos indicará que hola() no está definido.

El problema aquí, es que Python interpreta las líneas de código de arriba hacia abajo, de izquierda a derecha. Por lo tanto, no puede saber de la existencia de una función definida en una línea posterior a la primera línea que la llame por el simple hecho de que aún no ha llegado a esa línea de código.

El intérprete de Python si usa una función, esta ya debe existir, es decir estar definida, en el momento en que sea llamada.

¡Para recordar!

Las funciones definidas por el usuario en Python se pueden agregar en cualquier parte del programa, siempre que se encuentren antes que en la línea donde sean llamadas por primera vez, pero es una buena práctica colocarlas al principio del programa, antes de cualquier otra instrucción que las invoque.

De esta manera, se asegura que la función esté definida antes de ser llamada, así como también se mantiene el código más organizado y fácil de leer.

Con esta buena práctica en mente, repasemos ahora como queda nuestro programa:

Python
1
2
3
4
5
6
7
8
9
# Definiciones de funciones de usuario
def hola():
    print("¡Hola!")


# Código principal
nombre = input("¿Cuál es tu nombre? ")
hola()
print(nombre)

Llamada a función definida por el usuario

Se denomina llamada a función (call function en inglés) al momento en que se invoca a una función definida por el usuario en un programa pasando los argumentos necesarios, si es que los requiere. En ese momento, el flujo de ejecución del programa se desplaza al bloque de código de la función y se ejecutan las instrucciones que contiene.

Al finalizar su ejecución, por el motivo que fuere, la función puede retornar un valor o simplemente finalizar su ejecución sin devolver nada. En ese momento, el flujo de ejecución del programa regresa al punto donde se invocó la función y continúa su ejecución normal.

Si retorna un valor, este puede ser almacenado en una variable o utilizado directamente en el programa, según sea necesario. El destino de ese valor dependerá de la lógica del programa en la línea de código que invocó a la función.

Ejecución de la función definida por el usuario

Siguiendo con nuestro programa, en la línea 1 definimos la función hola(), que simplemente imprime un mensaje de saludo en pantalla.

Luego, en la línea 7, solicitamos al usuario que ingrese su nombre y lo almacenamos en la variable nombre.

A continuación, en la línea 8, invocamos a la función hola(), lo que significa que se ejecutará el bloque de código que contiene la función a partir de la línea 3 que en este caso es solo esa línea, cuya tarea es imprimir el mensaje de saludo en pantalla.

Finalmente, en la línea 9, imprimimos en pantalla el nombre ingresado por el usuario.

Terminal (Entrada/Salida)
¿Cuál es tu nombre? Pablo
¡Hola!
Pablo

Y así concluye la ejecución de nuestro programa, que ahora incluye una función definida por el usuario que imprime un mensaje de saludo en pantalla.

A ver si entendiste: ¿nuestro programa contiene una función o una subrutina?
Haz clic aquí para conocer la respuesta
  • [ ] Función
  • [x] Subrutina

Las subrutinas son bloques de código que realizan una tarea específica y pueden ser llamadas y ejecutadas desde otros lugares en el programa.

En Python, las subrutinas se implementan de igual manera que las funciones.

La diferencia principal entre una función y una subrutina es que una función retorna (return en inglés) un valor (resultado), mientras que una subrutina no devuelve nada.

Y nuestra función hola() no retorna ningún valor, solo imprime un mensaje en pantalla, por lo que técnicamente es una subrutina y no una función.

¡Para recordar!

Una función es un bloque de código que realiza una tarea específica y puede ser reutilizada en diferentes partes de un programa.

Tiene un nombre que la identifica seguido de paréntesis, y puede recibir argumentos que almacenará en parámetros que se utilizan dentro de la función para realizar su tarea.

Al finalizar su tarea, puede devolver un valor o simplemente finalizar su ejecución sin devolver nada (en este último caso, no sería una función si no una subrutina1).

Referencias:


  1. Una subrutina en Python es un bloque de código que realiza una tarea específica y puede ser llamada y ejecutada desde otros lugares en el programa.
    En Python, las subrutinas se implementan de igual manera que las funciones.
    La diferencia principal entre una función y una subrutina es que una función retorna (return en inglés) un valor (resultado), mientras que una subrutina no devuelve nada.