30 - Funciones: con cantidad variable de parámetros

Otra variante en la declaración de una función en Python es la definición de una cantidad variable de parámetros.

Para definir una cantidad variable de parámetros debemos anteceder el caracter asterísco (*) al último parámetro de la función.

Problema 1:

Confeccionar una función que reciba entre 2 y n (siendo n = 2,3,4,5,6 etc.) valores enteros, retornar la suma de dichos parámetros.

Programa: ejercicio143.py

Ver video

def sumar(v1,v2,*lista):
    suma=v1+v2
    for x in range(len(lista)):
        suma=suma+lista[x]
    return suma


# bloque principal

print("La suma de 1+2")
print(sumar(1,2))
print("La suma de 1+2+3+4")
print(sumar(1,2,3,4))
print("La suma de 1+2+3+4+5+6+7+8+9+10")
print(sumar(1,2,3,4,5,6,7,8,9,10))

Para este problema definimos tres parámetros en la función,el primeros y el segundo reciben enteros y el tercero recibe una tupla (por ahora pensemos que una tupla es lo mismo que una lista, más adelante veremos sus diferencias):

def sumar(v1,v2,*lista):
    suma=v1+v2
    for x in range(len(lista)):
        suma=suma+lista[x]
    return suma

Sumamos los dos primeros valores y luego recorremos la lista y también sumamos sus elementos.

Cuando llamamos a la función sumar podemos hacerlo enviando solo dos parámetros (la lista está vacía en este caso):

print(sumar(1,2))

Podemos llamar la función enviando 4 parámetros, en este caso la lista tiene dos elementos:

print(sumar(1,2,3,4))

Y en general podemos llamar la función enviando cualquier cantidad de enteros:

print(sumar(1,2,3,4,5,6,7,8,9,10))

Desempaquetar una lista o tupla

Puede ser que tengamos una función que recibe una cantidad fija de parámetros y necesitemos llamarla enviando valores que se encuentran en una lista o tupla. La forma más sencilla es anteceder el caracter * al nombre de la variable:

Ver video

def sumar(v1, v2, v3):
    return v1 + v2 + v3

li=[2, 4, 5]
su=sumar(*li)
print(su)

La función 'sumar' tiene 3 parámetro y la llamamos con la sintaxis:

su=sumar(*li)

Con el caracter asterisco estamos haciendo que se descomponga la lista en sus tres elementos:

su=sumar(li[0], li[1], li[2])

Problema propuesto

  • Confeccionar una función que reciba una serie de edades y me retorne la cantidad que son mayores o iguales a 18 (como mínimo se envía un entero a la función)

    Ver video

Solución
ejercicio144.py

def cantidad_mayores18(edad1,*edades):
    cant=0
    if edad1>=18:
        cant=cant+1
    for x in range(len(edades)):
        if edades[x]>=18:
            cant=cant+1
    return cant


# bloque principal

print("La cantidad de personas mayores a 18 son:", cantidad_mayores18(23,6,8,19,24))