Alcance de las funciones definidas por el usuario
Se conoce como alcance (scope en inglés) de una función a la región del programa en la que una función definida por el usuario puede ser invocada. En Python, las funciones definidas por el usuario tienen un alcance local, lo que significa que solo pueden ser invocadas dentro del ámbito en el que fueron definidas. Esto implica que las funciones definidas por el usuario no pueden ser invocadas desde fuera de su ámbito de definición, a menos que sean importadas o llamadas desde otro ámbito.
Este mismo concepto se aplica para las variables definidas dentro de una función. Estas tienen un alcance local y solo pueden ser accedidas desde dentro de la función en la que fueron definidas. Si se intenta acceder a una variable definida dentro de una función desde fuera de esta, se generará un error de tipo NameError
indicando que la variable no está definida.
Analicemos el siguiente ejemplo para ilustrar el alcance de las funciones definidas por el usuario en Python:
Python | |
---|---|
Aquí la función definida
formatear_saludo()
no posee ningún parámetro indicado. Y por consiguiente, cada vez que sea llamada, no se pasará ningún argumento.Cuando se intente acceder, dentro de la función
formatear_saludo()
, a la variablenombre
que fue definida en la funciónmain()
, se generará un error de tipoNameError
ya que la variablenombre
no está definida en el ámbito de la funciónformatear_saludo()
. Solo existe y es accesible en el ámbito de la funciónmain()
.
Por lo tanto, si ejecutamos el código anterior, obtendremos un error de tipo NameError
en la línea 7, ya que la variable nombre
no está definida en el ámbito de la función formatear_saludo()
.
Esto se debe a que la variable nombre
fue definida en el ámbito de la función main()
y no puede ser accedida desde la función formatear_saludo()
.
Aquí está la salida que obtendríamos al ejecutar el código anterior:
¿Cuál es tu nombre? Pablo
Traceback (most recent call last):
File "c:\Users\usuario\hola_mundo.py", line 11, in <module>
main()
File "c:\Users\usuario\hola_mundo.py", line 4, in main
print(formatear_saludo())
^^^^^^^^^^^^^^^^^^
File "c:\Users\usuario\hola_mundo.py", line 8, in formatear_saludo
return f"Hola, {nombre}!"
^^^^^^
NameError: name 'nombre' is not defined
Así es como podemos observar el concepto de alcance, que se refiere a una variable que solo existe en el contexto en el que es definida.
Como nombre
es definida dentro de función main()
, solo existe y puede se accedida en dicha función.
Para solucionar este problema, podemos pasar la variable nombre
como argumento a la función formatear_saludo()
, tal como lo veníamos haciendo durante los temas vistos con anterioridad.
De esta manera, la función formatear_saludo()
podrá acceder a la variable nombre
que le es pasada como argumento.
Python | |
---|---|
Ahora, si ejecutamos el código anterior, obtendremos la salida esperada:
En resumen, el alcance de las funciones definidas por el usuario en Python es local, lo que significa que solo pueden ser invocadas dentro del ámbito en el que fueron definidas. Si se intenta acceder a una variable definida dentro de una función desde fuera de esta, se generará un error de tipo NameError
indicando que la variable no está definida. Para solucionar este problema, se pueden pasar las variables necesarias como argumentos a las funciones que las requieran.