python-parametros-funcion

Parámetros y argumentos de funciones en Python

Los parámetros de una función son variables que se utilizan para pasar información a la función cuando se llama. Los parámetros permiten que las funciones sean más flexibles y reutilizables al permitirles trabajar con diferentes datos en cada llamada.

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

En este ejemplo, parametro1 es un parámetro obligatorio y parametro2 tiene un valor por defecto.

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 en Python. 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.

Si no se proporciona un valor para estos parámetros al llamar a la función, se utilizará el valor predeterminado.

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("Juan")  # Salida: Hola, Juan

Parámetros con nombre

Los parámetros con nombre son parámetros que se pasan a la función utilizando su nombre. 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.
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="Juan", edad=30, ciudad="Madrid")
# Salida:
# nombre: Juan
# edad: 30
# ciudad: Madrid

Uso de * y ** al llamar una Función

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], y al llamar sumar(*valores), los elementos de la lista se desempaquetan y se pasan como argumentos a la función sumar, por lo que 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, donde 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}, y al llamar sumar(**diccionario), los elementos del diccionario se desempaquetan y se pasan como argumentos a la función sumar, donde la clave "a" se asigna al parámetro a, la clave "b" se asigna a b y la clave "c" se asigna a c, por lo que 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. Esto significa 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.

  • Si es un tipo básico, la función invocada no podrá modificar el argumento que recibe
  • Si es una referencia, sí podrá modificar el argumento que recibe.

Esto puede tener implicaciones en la forma en que las funciones manejan los argumentos mutables, como las listas y diccionarios.

Ejemplos

Primero veamos el comportamiento cuando pasamos un tipo básico, por ejemplo un 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 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]