Las funciones en Python, de forma similar a como sucede en otros lenguajes, nos permiten “empaquetar” un conjunto de instrucciones que realizan una funcionalidad concreta y poder llamarlas desde otras partes del código o desde otros scripts.
Definición de una función
Una función puede tener argumentos de entrada, aunque no es necesario indicar los tipos. El bloque de código se determina por el sangrado de las instrucciones de forma similar a las estructuras de control. Puede haber un valor de retorno o no y esto se indica con la sentencia return
La sintaxis para definir una función es la siguiente:
def nombre_funcion(argumentos):
bloque de operaciones de la función
return valor
Empleamos la palabra clave def, seguida del nombre de la función, y entre paréntesis se pasan los argumentos. Estos son variables con las que trabaja la función y cuando la llamamos le pasamos los valores de estos argumentos.
A continuación, viene el bloque de instrucciones, que tiene que ir indexado y finalmente la instrucción return que devuelve uno o varios valores.
Por ejemplo, la función validar_par, definida a continuación, admite el parámetro a y devuelve el valor True si a es par y False si a no es par.
#definición de la función
def validar_par(a):
if a % 2 == 0:
par = True
else:
par=False
return par
#llamada a la función
num=5
print(f"¿es par el número: {num}?")
print(f"Respuesta: {validar_par(num)}")
Los argumentos de una función puede ser cualquier tipo de datos válido en Python.
Para llamar a la función, sencillamente usamos su nombre y le pasamos los parámetros.
Argumentos por posición y por clave
Cuando llamamos a un método, es posible que tengamos que pasarle unos parámetros para que trabaje con ellos. También puede pasar que el método no admita parámetros, en cuyo caso no hay que pasarle nada.
Para pasarle parámetros a un método, tenemos dos opciones: argumentos posicionales y argumentos de palabra clave.
- Argumentos posicionales: No hay que indicar el nombre de los parámetros, y el método sabe cual es cual en función del orden en el que se le pasen.
- Argumentos de palabra clave: al pasar el parámetro indicamos su nombre y le damos un valor, de esta forma el orden en el que pasemos los parámetros puede ser cualquiera.
Ejemplo: función operaciones
#definición de la función
def operaciones (operando1, operando2, operacion):
resultado = 0
if operacion=="suma":
resultado = operando1+operando2
elif operacion=="resta":
resultado = operando1-operando2
elif operacion=="multiplicacion":
resultado = operando1*operando2
elif operacion=="division":
resultado=operando1*operando2
elif operacion=="potencia":
resultado=operando1**operando2
else:
print("operación no registrada")
return resultado
#llamada a la función por argumentos posicionales
res=operaciones(2,3,"multiplicacion")
print(res)
#llamada a la función por argumentos de palabra clave
res=operaciones(operacion="suma",operando2=4,operando1=10)
print(res)
En el ejemplo anterior, la primera llamada es por posición, y el orden en el que pasamos los parámetros es igual al orden en el que están definidos en la función.
res=operaciones(2,3,"multiplicacion")
No es necesario indicar que valor corresponde a cada parámetro, ya que esto lo marca la posición en la que están. En el ejemplo anterior, 2 corresponde a operando1, 3 a operando2 y “multiplicación” a operación.
Sin embargo, la segunda llamada al método es por palabra clave, es decir, indicamos el nombre del parámetro y le damos un valor.
res=operaciones(operacion="suma",operando2=4,operando1=10)
En este último caso, el orden no tiene importancia, puede ser cualquiera.
No podemos mezclar los dos: usamos uno u el otro.
Cuando usemos argumentos por palabra clave, tenemos que asegurarnos que escribimos los nombres exactos de los parámetros, tal y como aparecen en la definición de la función.
Valores por defecto para los argumentos
Para indicar un valor por defecto para un parámetro en la definición de una función, sencillamente asignamos dicho valor por defecto al citado parámetro.
Ejemplo: función alquilarCoche:
def alquilarCoche (edad, pagado, carnet=True):
if edad>=18 and pagado and carnet:
return True
else:
return False
En el ejemplo de arriba, asumimos que normalmente quien viene a alquilar coche tienen carnet de conducir. De esta forma, las siguientes llamadas a la función alquilarCoche son correctas:
print(alquilarCoche(21,True))
print(alquilarCoche(20,True,False))
print(alquilarCoche(edad=20,pagado=True))
print(alquilarCoche(edad=20,pagado=True, carnet=False))
Como sigue existiendo la posibilidad de llamar a la función por argumentos posicionales, los argumentos que tengan valores por defecto tienen que ir al final. La siguiente definición de la función alquilarCoche daría error:
def alquilarCoche (edad, pagado=True, carnet):
if edad>=18 and pagado and carnet:
return True
else:
return False
El mensaje de error es explicativo del error cometido: “Non-default argument follows default argument”
Non-default argument follows default argument
Número indefinido de argumentos
El número de argumentos puede ser especificado en la definición o bien emplear el carácter * antes del nombre del argumento, lo cual indica que no se conoce el número de argumentos. En tal caso, la función considera los argumentos pasados en la llamada como una tupla de argumentos.
Ejemplo de función con número variable de argumentos:
def sumatorio(*parametros):
resultado=0
for parametro in parametros:
resultado=resultado+parametro
return resultado
A esta función, podemos llamarla con distinto número de parámetros y nos devolverá la suma de todos los parámetros que le pasemos. Por ejemplo, las dos llamadas siguientes:
print(sumatorio(1,3,5))
print(sumatorio(1,5,7,9,11))
Pintan por pantalla los valores 9 y 33 respectivamente.
Una opción similar a la anterior es **parametros que permite trabajar con un numero de argumentos variable de tipo clave-valor que se reciben en la función en una tupla de diccionarios.
def datos_curso(**parametros):
for clave, valor in parametros.items():
print(f"{clave}: {valor}")
datos_curso(curso="Python",horas=30)
print("-----------------------------")
datos_curso(curso="Java y SQL",horas=40,creditos=4.5,
alumnos=["Juan","Maria","Elena"])
Lo que da como resultado:
curso: Python
horas: 30
-----------------------------
curso: Java y SQL
horas: 40
creditos: 4.5
alumnos: ['Juan', 'Maria', 'Elena']
NOTA:
Este post es parte de la colección “Python”. Puedes ver el índice de esta colección aquí.