La idea detrás de las funciones en Python (y en general de cualquier lenguaje de programación) coincide con la idea de una función matemática. Antes de pasar directo a trabajar con funciones en Python recordemos un poco sobre la teoría de funciones en matemáticas.
Una función $f(x)=y$ nos arroja el valor de la ordenada $y$ correspondiente al valor de $x$, donde a $x$ se le conoce como variable independiente y a $y$ variable dependiente. Asimismo, $x$ es el párametro de la función $f$. Por ejemplo, si consideramos la función $f(x)=x^{2}$, podemos asignarle el valor de $2$ al parámetro de la función $f$ y obtener como resultado
$$ f(2)=2^{2}=4 $$donde la función $f$ sigue la instrucción
Otro ejemplo puede ser la función $g(x)=\sqrt{x} + 1$, donde $g$ sigue las instrucciones:
donde, por ejemplo, podemos calcular $g(4)=\sqrt{4}+1=2+1=3$. De esta última función podemos recordar el concepto de dominio. El dominio de una función son los valores admisibles que puede tomar la variable independiente $x$. Por ejemplo, de la función $g(x)$ podemos notar que $-4$ no es un valor admisible para el parámetro $x$ pues no existe (dentro de los números $\mathbb{R}$) raíz cuadrada de números negativos.
Por otro lado, también es posible tener funciones multivariadas que reciban más de un parámetro como variables independientes. Por ejemplo la función $h(x,y)=\sqrt{x^{2}+y^{2}}$.
Ahora bien, con base en todo lo dicho anteriormente podemos implementar dichas ideas a las funciones dentro de Python .
Para crear una función en Python utilizaremos la palabra reservada def
y la sintaxis básica para crearla es
def nombre_de_la_funcion(lista de parámetros):
"""descripción de lo que hace la función (opcional)"""
instrucciones
.
.
.
así, podemos pensar las funciones en Python como funciones matemáticas que reciben parámetros de distintos tipos de datos (no sólo numéricos) y que pueden realizar diversas instrucciones (no sólo cálculos numéricos).
Veamos un primer ejemplo de una función que realice un saludo, para ello emplearemos una función sin parámetros:
# no colocaremos parámetros en esta función
# Definimos la función saludo
def saludo():
# instrucciones:
print("Hola!")
# podemos llamar a la función empleando
saludo()
Hola!
Cada que llamemos a la función saludo()
se ejecutarán las instrucciones que definimos dentro de ella. Pasemos ahora a realizar una función con un parámetro, en este caso será un saludo personalizado:
# definimos una variable nombre
tu_nombre = input("¿Cuál es tu nombre?")
# definimos la función de saludo personalizado
def saludo_personalizado(nombre):
# instrucciones:
print("Hola", nombre)
print("¡Bienvenido!")
# llamamos a la función
saludo_personalizado(tu_nombre)
¿Cuál es tu nombre?Luis Hola Luis ¡Bienvenido!
# también podemos ejecutar
saludo_personalizado("Pedro")
print("_" * 30)
print()
saludo_personalizado("Pablo")
Hola Pedro ¡Bienvenido! ______________________________ Hola Pablo ¡Bienvenido!
Donde la función recibe como parámetro un nombre y nos devuelve, mediante una serie de instrucciones, un saludo personalizado. Notemos la importancia de darle un nombre apropiado a nuestra función de acuerdo a lo que hace, además, el nombre del parámetro es importante para saber qué es lo que podemos asignarle a nuestra función; aunque denominamos nombre
al parámetro de la función, en realidad podemos escribir cualquier cosa pero siempre es importante escribir el código de una buena forma (y/o aplicando las buenas prácticas) para que otras personas puedan entenderlo o que en un futuro nosotros mismo podamos entenderlo.
Ahora bien, hasta ahora hemos estado trabajando con dos tipos de funciones en Python:
print()
, input()
, etcétera; donde la función print()
recibe como parámetro un tipo de dato y realiza la instrucción de mostrar ese dato en la consola de salida; la función input()
recibe como parámetro un tipo de dato y realiza como instrucción el almacenamiento de dicho dato.Podemos crear una función de varios parámetros para mejorar el saludo personalizado
# recabamos alguna información del usuario
tu_nombre = input("¿Cuál es tu nombre?")
tu_apellido = input("¿Cuál es tu apellido")
# definimos la función de dos parámetros
def saludo_personalizado_2(nombre,apellido):
# instrucciones:
print("Hola", nombre, apellido)
print("Bienvenido")
# llamamos a la función
saludo_personalizado_2(tu_nombre, tu_apellido)
¿Cuál es tu nombre?Luis ¿Cuál es tu apellidoApáez Hola Luis Apáez Bienvenido
Básicamente es así como podemos trabajar con las funciones en Python, es importante recalcar que las funciones en programación no sólo se ocupan en un contexto matemático, sino que podemos realizar muchas otras instrucciones y crear una gran diversidad de funciones, tal es el caso de las funciones que definimos anteriormente.
Ahora, para que la idea quede un poco más clara veamos ejemplos de funciones matemáticas en Python. Definamos la función $f(x)=x^{2}$ como
# función cuadrática
def fun_cuadratica(x):
# Instrucciones:
y = x ** 2
print(y)
luego, podemos hacer la evaluación $f(2)=2^{2}=4$ llamando a nuestra función
fun_cuadratica(2)
4
También podemos tener una función (matemática) multivariable $g(x,y)=\sqrt{x^{2}+y^{2}}$
# definimos nuestra función g:
def fun_g(x,y):
# Instrucciones:
z = x ** 2 + y ** 2
print(z)
# llamamos a nuestra función con x=2 y y=3 (por ejemplo)
fun_g(2,3)
13
Veamos ahora otro ejemplo de función. Lo que realizaremos será crear una función que convierta un cierto número de grados en radianes (Recuerda que $180^{\circ}$ equivale a $\pi$ radianes y para realizar las conversiones correspondientes utilizamos la unidad $\frac{\pi}{180^{\circ}}$).
import numpy as np
# definimos la variable correspondiente a la unidad de conversión
unidad = np.pi / 180
# creamos la función:
def conversion(grados):
radianes = grados * unidad
print(radianes)
# veamos por ejemplo
conversion(360)
6.283185307179586