Domina los argumentos dinámicos con args en Python para crear funciones más flexibles, especialmente al integrar múltiples APIs de noticias con parámetros variables como query, section o from_date. Aquí verás cómo capturar argumentos posicionales, por qué el orden importa y cómo declarar parámetros obligatorios como la API key.
¿Qué son los argumentos dinámicos args en Python?
Los argumentos dinámicos permiten recibir un número variable de parámetros posicionales. En Python se definen con un asterisco y el nombre convencional args. Internamente, args es una tupla: inmutable, ordenada y accesible por índice.
Se definen con un asterisco antes del nombre del parámetro.
Se almacenan como tupla inmutable.
El orden de los argumentos posicionales es crucial.
¿Cómo se usan args con ejemplos de código?
defejemplo_args(*args):print(f"args: {args}")print(f"type: {type(args)}")# Llamadas de ejemploEjemplo = ejemplo_args
Ejemplo(1,2,3)Ejemplo("Hola","mundo")Ejemplo()# sin parámetros
La impresión muestra la representación de una tupla.
El tipo reportado es tuple.
¿Cómo aplicar args en un client de noticias?
Cuando integras varias APIs con requisitos distintos, args ayuda a unificar llamadas mientras mantienes API key como parámetro obligatorio. Se mostraron dos variantes: un client para News API y otro para Guardian, cada uno con parámetros distintos como query, section o from_date, y configuraciones como timeout en 30 y retries en 3.
Para combinar comprehensions y el uso de *args de manera eficaz en Python, puedes definir una función que acepte un número variable de argumentos y utilice una comprensión de listas para procesarlos. Por ejemplo:
defsumar(*args):returnsum([x for x in args ifisinstance(x,(int,float))])
En este caso, sumar acepta cualquier cantidad de números y solo suma aquellos que son de tipo int o float. Esto demuestra un buen uso de *args y comprehension para mantener el código limpio y legible.
"""Funcion para la suma de los parametros variables"""def suma_numeros(*args):returnsum(args)print(suma_numeros(1,2,3)) # Salida:6print(suma_numeros(10,20,30,40)) # Salida:100
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 inargs:if not isinstance(value,(int, float)): raise TypeError(f"Invalid type for value: {value}")returnsum(args)
Genial! buena solución!
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 ValueErrorasve:print(f"Error: {ve}")suma_args(1,2,3,4,5,"que pasa si viene texto ?")
Muy buen uso del try... sigue practicando
# Ejerciciodef sumar_numeros(*args):"""Suma todos los números pasados como argumentos.""" total =0print(f"Argumentos recibidos (tupla): {args}") # Muestra la tupla
for num inargs: total += num
return total
# Ejemplos de uso:print("La suma es:",sumar_numeros(10,20,30,25,40,5)) # Salida:(10,20,30)=130print("La suma es:",sumar_numeros(5,15,25,35,45,55,65,75,85,95)) # Salida:(5,15,25,35)=500print("La suma es:",sumar_numeros()) # Salida:()=0
Buen trabajo!
def suma_arg(*arg): total =0for sumas inarg: total += sumas
return total
Buen trabajo!
def sumadora_parametros(*args): total=0for numero inargs: total += numero
return total
#opcion 1print(sumadora_parametros(1,2,3,4,5))#opcion 2resultado=sumadora_parametros(1,2,3,4,5,6)print(resultado)
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.
Gracias por reportarlo. Lo llevo al equipo encargado
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
defsuma_arg(*args): total =0for 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"""
Buen trabajo!
Ahora intenta sumar todos los args sin que le tome más tiempo cada vez que agregues nuevos argumentos.
# 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)
mi solucion:
def add_nume(*args):
suma = 0
print(f"Add: {args}")
for parmas in args:
suma +=parmas
print("++++")
print(suma)
add_nume(1,2,3,4,5)
Solución:
print("")print("----------- SUMAR 5 NUMEROS ------------")print("")def sumar_numeros(*args):try: numeros =0for numero inargs: numeros =sum(numero)return numeros
except ValueError:print("Por favor ingrese un numero valido...")numeros_usuario =[]for x inrange(1,5): z =int(input(f"Ingrese el numero {x}: ")) numeros_usuario.append(z)print("")print("----------- RESULTADO ----------------")print("")print(sumar_numeros(numeros_usuario))print("")
Mi solución:
"""
Hacer una función que sea capaz de sumar la cantidad de números que le pases como parámetros
"""
def sumatoria_args(*args): resultado =0for num inargs:try: resultado +=float(num) except ValueError:print(f"'{num}' no es un número, se omite el resultado de la suma.")continuereturn resultado
print(sumatoria_args(2,3,"Hola",7,12,3.14,"-4"))
Pensé en cómo hacerlo con comprehensions, pero entiendo que sólo se puede devolver algún formato como listas, tuplas o sets, no un único valor como el de una sumatorio. ¿Es así?
Supongo que con algún tipo de lambda se puede realizar en una sola línea. Pero no sé cómo son en Python aún. Excelente clase :)
Abajo mi solución:
def args_addition(*args): total =0for arg inargs: total += arg
return total
print(args_addition(2,2,2,2))#Resultado es 8