🐍Funciones
1. ¿Qué es una función?
En matemáticas, una función es una relación o asignación entre una o más entradas y un conjunto de salidas. Una función se suele representar así:
y = f(x)
Todos los lenguajes de programación modernos implementan el concepto de función. Sin embargo, en programación, las funciones son construcciones mucho más genéricas y versátiles que en la definición matemática mostrada anteriormente. Una función va a consistir en un bloque de código que encapsula una tarea específica o un grupo de tareas relacionadas. Las funciones permiten dividir programas complejos en fragmentos más pequeños y modulares.
var = "Hola mundo"
len(var)
10
len_var = len(var)
len_var
10
La función que se muestra anteriormente forma parte de un conjunto de funciones que están definidas en el interprete de Python y podemos utilizar siempre que lo necesitemos.
Para utilizar estas funciones no necesitamos conocer el detalle del código fuente que la implementa, únicamente necesitamos conocer su interfaz:
Qué argumentos recibe
Qué valores devuelve
Cuando invocamos la función a través de su nombre y le proporcionamos los argumentos necesarios, el interprete de Python automáticamente recorre el código fuente que define esta función y ejecuta las tareas pertinentes sobre los argumentos proporcionados. Cuando la función termina, la ejecución vuelve a la línea de código donde se invocó la función. La función puede devolver un valor de retorno que podemos utilizar a lo largo de nuestro código.
2. Definiendo funciones personalizadas
La sintaxis utilizada para definir funciones en Python es la siguiente:
def <nombre_funcion>([<parámetros>]):
<sentencia(s)>
El último elemento, <sentencia(s)>
, se denomina cuerpo de la función. El cuerpo es el bloque de sentencias en Python que se ejecutará cuando se llame a la función. El cuerpo de una función de Python se define por la sangría.
def mi_funcion(arg1, arg2):
print(arg1)
print(arg2)
La sintaxis utilizada para invocar una función es la siguiente: <nombre_funcion>([<argumentos>])
Los <argumentos>
son los valores que se pasan a la función. Se corresponden con los <parámetros>
en la definición de la función en Python.
mi_funcion ("Hola mundo", "Adios mundo")
Hola mundo
Adios mundo
print(1)
mi_funcion(2,3)
print(4)
1
2
3
4
Se pueden definir funciones que no reciban ningún argumento, pero los paréntesis siguen siendo necesarios. Tanto una definición de función como una llamada a una función deben incluir siempre paréntesis, incluso si están vacíos.
def funcion2():
print("Hola mundo")
print("Adios mundo")
funcion2()
Hola mundo
Adios mundo
3. Argumentos de las funciones
Los argumentos que le proporcionamos a una función en Python pueden ser de diferentes tipos.
3.1 Argumentos posicionales
La forma más sencilla de pasar argumentos a una función en Python es con argumentos posicionales (también llamados argumentos requeridos). En la definición de la función, debe especificarse una lista de parámetros separada por comas dentro de los paréntesis.
def funcion3(arg1, arg2, arg3):
print(arg1)
print(arg2)
print(arg3)
Los argumentos que le proporcionamos en la invocación de la función debe respetar el orden y el número de parámetros definidos.
funcion3("Texto 1", "Texto 2", "Texto 3")
Texto 1
Texto 2
Texto 3
funcion3("Texto 1", "Texto 2")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[19], line 1
----> 1 funcion3("Texto 1", "Texto 2")
TypeError: funcion3() missing 1 required positional argument: 'arg3'
Los parámetros se comportan como variables que están definidas de manera local a la función (únicamente en el cuerpo de la función). Cuando se invoca la función, los argumentos que se le proporcionan se asignan a los parámetros en el orden en el que estuvieran definidos.
def funcion4():
var = "Variable 'var' dentro de la función"
print(var)
var = "Variable 'var' fuera de la función"
funcion4()
print(var)
Variable 'var' dentro de la función
Variable 'var' fuera de la función
3.2. Argumentos de palabra clave
Otra forma de invocar una función en Python es indicando los argumentos de la forma <palabra clave>=<valor>
. En ese caso, cada <palabra clave>
debe coincidir con un parámetro en la definición de la función.
def mi_funcion(arg1, arg2):
print(arg1)
print(arg2)
var = "Hola mundo"
var2 = "Adios mundo"
mi_funcion(arg1=var, arg2=var2)
Hola mundo
Adios mundo
mi_funcion(arg1=var2, arg2=var)
Adios mundo
Hola mundo
Utilizar argumentos de palabra clave, nos exime de tener que respetar el orden de los parámetros definidos en la función
mi_funcion(arg2=var, arg1=var2)
Adios mundo
Hola mundo
mi_funcion(arg2=var, arg3=var2)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[25], line 1
----> 1 mi_funcion(arg2=var, arg3=var2)
TypeError: mi_funcion() got an unexpected keyword argument 'arg3'
Por otro lado, el número de argumentos debe seguir respetándose.
mi_funcion(var, arg2=var2)
Hola mundo
Adios mundo
Una de las cosas interesantes que nos permite hacer Python, es combinar argumentos posicionales y de palabra clave en la misma llamada a una función. En estos casos, los argumentos posicionales deben indicarse primero.
mi_funcion(arg1=var, var2)
Cell In[28], line 1
mi_funcion(arg1=var, var2)
^
SyntaxError: positional argument follows keyword argument
3.3 Parámetros con valores por defecto u opcionales
Si especificamos un parámetro en la definición de una función en Python utilizando la forma <nombre>=<valor>
, entonces <valor>
se convierte en un valor por defecto para ese parámetro.
Los parámetros definidos de esta manera se denominan parámetros por defecto u opcionales.
def mi_funcion(arg1, arg2="valor por defecto"):
print(arg1)
print(arg2)
mi_funcion("Hola mundo")
Hola mundo
valor por defecto
mi_funcion("Hola mundo", "Adios mundo")
Hola mundo
Adios mundo
4. Sentencia Return
Las funciones en Python pueden retornar un valor despues de haber ejecutado las sentencias de código definidas. Para devolver un valor, se debe utilizar la palabra return
dentro del cuerpo de la función.
Debemos de tener en cuenta varias cosas cuando utilizamos la palabra return
:
Cuando se ejecuta esta sentencia en Python, el intérprete termina inmediatamente la ejecución de la función y regresa a la línea de código desde dónde la hubiésemos invocado.
def mi_funcion():
print("Sentencia 1 dentro de mi_funcion")
print("Sentencia 2 dentro de mi_funcion")
return
print("Sentencia 1 fuera de mi_funcion")
mi_funcion()
print("Sentencia 2 fuera de mi_funcion")
Sentencia 1 fuera de mi_funcion
Sentencia 1 dentro de mi_funcion
Sentencia 2 dentro de mi_funcion
Sentencia 2 fuera de mi_funcion
Si indicamos definimos la palabra
return
de la siguiente formareturn <valor>
se retornará el<valor>
especificado en la llamada a dicha función.
def funcion2():
return "Valor de mi_funcion"
print("Esta sentencia nunca va a ejecutarse")
var = funcion2()
print(var)
Valor de mi_funcion
funcion2()
'Valor de mi_funcion'
funcion2()[0:5]
'Valor'
Si no indicamos el término
<valor>
en la sentenciareturn
se devuelve un tipo de datos conocido comoNone
def mi_funcion():
return
var = mi_funcion()
print (var)
None
Puede utilizarse la sentencia
return
para devolver varios valores utilizando la sintaxisreturn <valor1>,<valor2>,...,<valorn>
def mi_funcion():
return "Texto 1", "Texto 2", "Texto 3"
var1,var2,var3 = mi_funcion()
print(var1)
print(var2)
print(var3)
Texto 1
Texto 2
Texto 3
5. Docstrings
Cuando la primera declaración en el cuerpo de una función en Python es un string de la forma """texto"""
, se conoce como docstring de la función.
Los docstring se utilizan para proporcionar la documentación de una función. Puede contener el propósito de la función, los argumentos que toma, información sobre los valores de retorno, o cualquier otra información que se considere útil.
Existe un PEP (Python Enhancement Proporsal) que establece el estilo con el que deben definirse los docstrings: https://www.python.org/dev/peps/pep-0257/
def mi_funcion():
""" Esto es un docstring de la funcion """
print("Hola mundo")
def mi_funcion(arg1=0.0, arg2=0.0):
"""
Esto es una funcion para demostrar que es un docstring
Keyword arguments:
arg1 -- primer argumento de la función (por defecto 0.0)
arg2 -- segundo argumento de la función (por defecto 0.0)
"""
print(arg1)
return arg2
# Visualiza la interfaz de la función en Jupyter Notebook con Tab+Shift
mi_funcion()
Última actualización