Los parámetros de una función son variables que podemos pasarle a la función al invocarla, para que las use. Los parámetros permiten que las funciones sean más flexibles y reutilizables.
La sintaxis básica para definir una función con parámetros en Python es la siguiente:
def nombre_de_la_funcion(parametro1, parametro2, ...):
# bloque de código de la función que utiliza los parámetros
parametro1
,parametro2
,… son los parámetros de la funcion
Veamos un ejemplo:
def saludar(nombre):
print("Hola", nombre)
# Llamando a la función con un argumento
saludar("Luis") # Salida: Hola Luis
Aquí definimos una función llamada saludar
que toma un parámetro llamado nombre
. Dentro de la función, se imprime un saludo “Hola” seguido del nombre que se pasa como argumento.
Ahora, si llamo a la función con el parámetro Luis
, esto provoca que la función se ejecute y muestre el mensaje Hola Luis como salida.
Más información sobre Parámetros de una función leer más
Tipos de parámetros en Python
Parámetros posicionales
Los parámetros posicionales son los parámetros más comunes. Se definen en el orden en que aparecen en la lista de parámetros de la función y se pasan a la función en el mismo orden.
def suma(a, b):
resultado = a + b
return resultado
# Llamada a la función con parámetros posicionales
resultado_suma = suma(5, 3)
print(resultado_suma) # Salida: 8
Parámetros con valores predeterminados
Los parámetros con valores predeterminados son parámetros que tienen un valor asignado por defecto en la definición de la función.
def saludar(nombre="Mundo"):
print("Hola,", nombre)
# Llamada a la función sin proporcionar un valor para el parámetro
saludar() # Salida: Hola, Mundo
# Llamada a la función con un valor para el parámetro
saludar("Luis") # Salida: Hola, Luis
Si no se proporciona un valor para estos parámetros al llamar a la función, se utilizará el valor predeterminado.
Parámetros con nombre
Los parámetros con nombre son parámetros que se pasan a la función utilizando su nombre (en lugar de su posición).
Esto permite cambiar el orden de los parámetros o incluso omitir algunos de ellos.
def saludar(nombre, saludo="Hola"):
print(saludo + ",", nombre)
# Llamada a la función con parámetros con nombre
saludar(nombre="Ana") # Salida: Hola, Ana
saludar(saludo="Buenos días", nombre="Pedro") # Salida: Buenos días, Pedro
Parámetros de longitud variable
Python permite definir funciones que aceptan un número variable de parámetros utilizando *args
y **kwargs
.
*args
: Se utiliza para pasar una lista de argumentos posicionales
def suma_numeros(*args):
resultado = sum(args)
return resultado
# Llamada a la función con una cantidad variable de argumentos
resultado_suma = suma_numeros(1, 2, 3, 4, 5)
print(resultado_suma) # Salida: 15
**kwargs
: Se utiliza para pasar un diccionario de argumentos de palabra clave (keywords arguments)
def imprimir_info(**kwargs):
for clave, valor in kwargs.items():
print(clave + ":", valor)
# Llamada a la función con argumentos con nombre
imprimir_info(nombre="Luis", edad=30, ciudad="Madrid")
# Salida:
# nombre: Luis
# edad: 30
# ciudad: Madrid
Uso de * y ** al llamar una función Avanzado
Cuando tenemos una lista o diccionario y queremos pasar sus elementos como argumentos a una función, podemos usar *
y **
respectivamente.
- El operador
*
se utiliza cuando queremos desempaquetar los elementos de una lista y pasarlos como argumentos a una función.
def sumar(a, b, c):
return a + b + c
valores = [1, 2, 3]
print(sumar(*valores)) # Resultado: 6
Aquí,
valores
es una lista que contiene[1, 2, 3]
- Al llamar
sumar(*valores)
, los elementos de la lista se desempaquetan y se pasan como argumentos a la funciónsumar
- Es decir, es equivalente a llamar
sumar(1, 2, 3)
El operador **
se utiliza de manera similar, pero para desempaquetar los elementos de un diccionario y pasarlos como argumentos a una función.
En este caso, las claves del diccionario se convierten en nombres de parámetros y los valores del diccionario se asignan a esos parámetros.
diccionario = {"a": 1, "b": 2, "c": 3}
print(sumar(**diccionario)) # Resultado: 6
Aquí,
diccionario
es un diccionario que contiene{"a": 1, "b": 2, "c": 3}
- Al llamar
sumar(**diccionario)
, los elementos del diccionario se desempaquetan y se pasan como argumentos a la funciónsumar
, - La clave
"a"
se asigna al parámetroa
, la clave"b"
se asigna ab
y la clave"c"
se asigna ac
- Es decir, es equivalente a llamar
sumar(a=1, b=2, c=3)
Paso por valor o por referencia
En Python, el paso de argumentos a funciones se realiza siempre por valor (es decir, que la función siempre recibe una copia del argumento).
Pero el comportamiento será diferente si lo que pasamos es un tipo básico o una referencia.
- En un tipo básico, la función invocada no podrá modificar el argumento que recibe
- En un tipo referencia, sí podrá modificar el argumento que recibe.
Vamos a verlo con un ejemplo. Primero veamos el comportamiento cuando pasamos un tipo básico. Por ejemplo, pasamos número entero (int
) a la función modificar_numero()
.
Dentro de la función, multiplicamos el número por 2. Esta modificación no afecta al número original fuera de la función.
# Ejemplo con un tipo básico (int)
def modificar_numero(numero):
numero = numero * 2
numero_original = 5
modificar_numero(numero_original)
print("Número original después de llamar a la función:", numero_original) # Resultado: 5
Ahora veamos lo que pasa con un tipo referencia, por ejemplo una lista que pasamos como referencia a la función modificar_lista()
.
Dentro de la función, añadimos el número 4 a la lista. La modificación realizada dentro de la función se refleja en la lista original fuera de la función.
# Ejemplo con una referencia (lista)
def modificar_lista(lista):
lista.append(4)
lista_original = [1, 2, 3]
modificar_lista(lista_original)
print("Lista original después de llamar a la función:", lista_original) # Resultado: [1, 2, 3, 4]