Jose Antonio Pinto Gimeno
"""Funcion para la suma de los parametros variables""" def suma_numeros(*args): return sum(args) print(suma_numeros(1, 2, 3)) # Salida: 6 print(suma_numeros(10, 20, 30, 40)) # Salida: 100
¿Alguna vez necesitaste pasar un número variable de argumentos a una función sin saber de antemano cuántos serían? Los *args en Python resuelven justo eso: te permiten recibir una cantidad flexible de parámetros usando un asterisco. Esta lección es ideal para quienes programan en Python y quieren escribir funciones más dinámicas y reutilizables.
El punto de partida es claro. Hasta ahora definimos argumentos con nombre y se los pasamos a las funciones según lo que necesitemos. Pero, ¿qué pasa cuando no sabes si vas a enviar uno, dos o diez argumentos? Ahí entran en juego los argumentos dinámicos [0:17].
¿Por qué necesitas argumentos dinámicos en una función?
Imagina que construyes una aplicación que obtiene noticias desde una API. En el archivo main.py definimos una función llamada news_api_client que recibe varios parámetros: el api_key, la query, el timeout con valor por defecto de 30, y los retries en 3, que son los reintentos si la aplicación llega a fallar [0:44].
Pero aquí viene lo interesante. Queremos que la aplicación no dependa de una sola API. Por eso simulamos una segunda función, guardian_client, que usa la API de The Guardian y requiere parámetros distintos: api_key, section, from_date, timeout en 30 y el número de intentos [1:40].
Dos APIs, dos conjuntos de parámetros diferentes. Una pide query, la otra pide section y from_date. Si tratáramos de resolver esto solo con condicionales, el código se complicaría rápido. Python ofrece una salida más limpia: definir estas variables como dinámicas [2:30].
¿Qué son los *args en Python? Son una forma de recibir un número variable de argumentos en una función usando un asterisco antes del nombre. Python los agrupa en una tupla, sin importar cuántos valores le pases.
¿Cómo funcionan los *args y por qué son una tupla?
Para entenderlo a fondo, creamos una función de ejemplo llamada ejemplo_args. La idea es imprimir todos los argumentos que lleguen. ¿Cómo recibe esa lista dinámica? Le pones un asterisco y el nombre: *args [3:10].
Por convención, en casi todo el código base se usa la palabra args para referirse a la lista dinámica de todos los parámetros que llegan a una función. No es obligatorio ese nombre, pero sí es un estándar que todos reconocen.
Al ejecutar la función pasando tres valores (uno, dos y tres), el print muestra esos datos agrupados. Y aquí está el detalle clave: cuando imprimes el type de args, Python te dice que es una tupla [4:10].
¿Por qué una tupla y no una lista? Porque estos campos no pueden estar nombrados, así que Python los guarda como una secuencia ordenada e inmutable. No la puedes modificar, pero sí la puedes recorrer y usar cuando la necesites.
¿Cuál es la diferencia entre una tupla y una lista en *args? Los *args siempre llegan como tupla, que es inmutable. Una lista sí se puede modificar; la tupla de *args no, aunque puedes leer todos sus valores.
Lo mejor de esto es que puedes llamar a la función con tres argumentos, con dos como "Hola mundo", o incluso sin ningún argumento, y el código seguirá funcionando sin errores.
¿Cómo combinar argumentos obligatorios con *args?
Al trabajar con parámetros dinámicos, muchas veces necesitas validaciones. En nuestro caso, el api_key es obligatorio para ambas APIs. La solución es colocarlo al inicio de la función, antes de *args [5:50].
Y aquí el orden importa muchísimo. Observa qué pasa paso a paso:
api_key después de *args, Python no sabe dónde terminan los argumentos dinámicos y toma un valor equivocado.api_key, Python lo toma como el primer valor de la secuencia, por ejemplo el "hola".api_key como primer parámetro posicional, antes del asterisco.Cuando colocas api_key de primero, ese valor se asigna correctamente al primer dato que envías al llamar la función [7:20]. Son parámetros posicionales, y por eso su ubicación define cómo Python los interpreta.
¿Y qué pasa si llamas la función sin ese valor obligatorio? Obtienes un error claro: Python te dice que la función requiere un argumento posicional llamado api_key. Si no lo envías, el código falla [8:10].
Esta combinación es poderosa: defines lo que es obligatorio de forma explícita y dejas abierta la puerta para recibir cualquier argumento extra que las distintas APIs necesiten. Así, tanto news_api_client como guardian_client pueden recibir solo lo que requieren sin romper el diseño.
Como práctica, crea una función capaz de sumar la cantidad de números que le pases como argumentos usando *args. Publica tu resultado en los comentarios y cuéntame cómo lo resolviste.
Jose Antonio Pinto Gimeno
"""Funcion para la suma de los parametros variables""" def suma_numeros(*args): return sum(args) print(suma_numeros(1, 2, 3)) # Salida: 6 print(suma_numeros(10, 20, 30, 40)) # Salida: 100
Francisco Ponce
Jeje creo que de momento no hay links en la sección de recursos, los dejo por acá en lo que los suben
Y dejo mi solución:
def sum_of_ints(*args): for value in args: if not isinstance(value, (int, float)): raise TypeError(f"Invalid type for value: {value}") return sum(args)
Luis Martinez
ProfesorGenial! buena solución!
Juan Antonio Chavez
Luis Martinez
ProfesorBuen trabajo!
Angel Daniel Mendieta Castillo
def suma_args(*args): """Suma los numeros que vengan en los args""" try: if not all(isinstance(arg, (int, float)) for arg in args): raise ValueError("Todos los argumentos deben ser numeros") print(sum(args)) except ValueError as ve: print(f"Error: {ve}") suma_args(1, 2, 3, 4, 5, "que pasa si viene texto ?")
Luis Martinez
ProfesorMuy buen uso del try... sigue practicando
David Alejandro Villa Posada
Me podrías explicar a profundidad que es args
*args es el comodín de Python para cuando no sabes cuántos argumentos va a recibir tu función. En lugar de limitar la cantidad de parámetros de antemano, el asterisco empaqueta todos los valores adicionales que le pases en una tupla ordenada.
Lo importante es que los parámetros fijos van siempre antes, porque Python asigna las posiciones en orden. ¿Quieres que pongamos esto a prueba con un ejercicio rápido?
Carlos alexis Perez
def suma_arg(*arg): total = 0 for sumas in arg: total += sumas return total
Luis Martinez
ProfesorBuen trabajo!
Carlos Daniel Meza Herrera
Son solo 2 sentencias, muy fácil:
def sumar(*args): print(sum(args)) sumar(5, 6) # Salida: 11
Yessid Paniagua
def suma(*args): return sum(int(x) for x in args) print(suma(1, 2, 3, 4))
David perez
def suma(*args):
return sum(args)
print(suma(4, 5.31, 7))
Oswaldo Yagual
def sumadora_parametros(*args): total= 0 for numero in args: total += numero return total #opcion 1 print(sumadora_parametros(1,2,3,4,5)) #opcion 2 resultado= sumadora_parametros(1,2,3,4,5,6) print(resultado)
Daniel Alfredo García Serna
Existe un error con este reto de la clase, esta opción genera un error con cualquiera de las otras opciones, ninguna es compatible para que lo tengan presente mientras le dan solución.
Luis Martinez
ProfesorGracias por reportarlo. Lo llevo al equipo encargado
Yancey Poveda Espinoza
Mi función:
import random def sum_arcs_param(*args): return f"La suma total es de {sum(args)}" print( sum_arcs_param(random.randint(1, 100), 20, 30, 40) ) # Output: La suma total es de
Allan Isaac Lopez Serrano
def suma_arg(*args): total = 0 for num in args: total += num return total """Ejemplo de Uso""" print("La suma total es de: ", suma_arg(2, 4, 8, 16, 32)) """Resultado recibido: 62"""
Luis Martinez
ProfesorBuen trabajo! Ahora intenta sumar todos los args sin que le tome más tiempo cada vez que agregues nuevos argumentos.
Gerardo Javier Valle Navarro
Aquí esta mi aporte:
def suma_numeros(*args): return sum(args) resultado = suma_numeros(1, 15, 10, 4, 5) print(f"La suma es: {resultado}")
Luis Martinez
ProfesorBuen aporte! Si gue practiacndo. Intenta remplazar sum con tu propio código para practicar.
Jesús Guaita
def sumar(*args):
return sum(args)
Jhon Anderson Galeano Santillana
las preguntas están mal diseñadas ya que solo queda una opción y la pone incorrecta.
Luis Martinez
ProfesorGracias por reportarlo, lo llevo al equipo encargado
Jesus Juma
def suma_args(*args):
resultado = 0
for nums in args:
resultado += nums
return resultado
print(suma_args(10,5,20,15))
Dave Juanes
def all\_args\_add(\*args): print(sum(args)) all\_args\_add(1, 2, 3, 4, 5)
Eladio Antonio Gil Moreno
# practica: suma la cantidad de numeros pasados como parametros
def suma_numeros(*args):
suma = 0
for i in args:
suma += i
print(f"La sumatoria es: {suma}")
suma_numeros(1, 2, 3)
# Ejercicio def sumar_numeros(*args): """Suma todos los números pasados como argumentos.""" total = 0 print(f"Argumentos recibidos (tupla): {args}") # Muestra la tupla for num in args: total += num return total # Ejemplos de uso: print( "La suma es:", sumar_numeros(10, 20, 30, 25, 40, 5) ) # Salida: (10, 20, 30) = 130 print( "La suma es:", sumar_numeros(5, 15, 25, 35, 45, 55, 65, 75, 85, 95) ) # Salida: (5, 15, 25, 35) = 500 print("La suma es:", sumar_numeros()) # Salida: () = 0