single
Argumentos Posicionales Arbitrarios
Desliza para mostrar el menú
Ya conoces los argumentos posicionales y opcionales. Pero cuando una función puede recibir muchas entradas o no las conoces de antemano, puedes usar argumentos posicionales arbitrarios. Estos permiten que una función acepte cualquier cantidad de valores.
Cada argumento puede ser cualquier estructura de datos (lista, diccionario, etc.). Los argumentos arbitrarios permiten pasar tantos objetos de este tipo como sea necesario.
Para definir argumentos posicionales arbitrarios, coloca un asterisco * antes del nombre del parámetro. Ejemplo:
12345678# Define function with arbitrary positional arguments named values def calculate_sum(*values): return sum(values) # Test the function using different number of arguments print(calculate_sum(1, 2, 3)) print(calculate_sum(1, 2, 3, 4)) print(calculate_sum(1, 2, 3, 4, 5))
Aquí, *values recopila todos los argumentos posicionales pasados en una tupla. Dentro de la función, se utiliza el nombre de la variable sin *. El resultado es correcto sin importar cuántos argumentos se proporcionen.
Aunque cualquier nombre funciona, la forma común y legible es *args.
1234567891011121314def example_function(*args): print(type(args)) print(args) for arg in args: print(arg) print('Call without arguments:') example_function() print('\nCall with one argument:') example_function(1) print('\nCall with multiple arguments:') example_function(1, 2, 3, 'hello', [4, 5, 6])
Como se muestra:
- Sin argumentos →
argses(); - Un argumento →
(1,); - Varios argumentos → todos los valores aparecen en una tupla, por ejemplo,
(1, 2, 3, 'hello', [4, 5, 6]).
*args se comporta como cualquier otra tupla, brindando total flexibilidad al manejar múltiples entradas.
Dado que *args es simplemente una tupla, se puede aplicar cualquier lógica a sus valores, incluyendo condicionales. Por ejemplo, después de sumar todos los precios, es posible verificar el total y aplicar diferentes reglas según el resultado.
Manejo de argumentos vacíos
Debido a que *args recopila las entradas en una tupla, existe la posibilidad de que un usuario llame a tu función sin pasar ningún argumento (example_function()). En este caso, args será una tupla vacía: ().
Es una buena práctica comprobar si *args está vacío antes de procesar los datos. Esto se puede hacer fácilmente porque las tuplas vacías se consideran "falsy" en Python.
A continuación se muestran dos formas comunes de manejar una tupla *args vacía.
Uso de if not args
Puedes usar if not args para detectar una tupla vacía y gestionarla de inmediato, por ejemplo, devolviendo 0 o un mensaje personalizado.
1234567891011def calculate_average(*prices): # Checking if the tuple is empty if not prices: return 'No prices provided!' # If it's not empty, proceed with the calculation return sum(prices) / len(prices) # Testing the function print(calculate_average(10, 20, 30)) # Output: 20.0 print(calculate_average()) # Output: No prices provided!
Comprobación de la longitud con len()
De manera alternativa, puedes verificar si el número total de argumentos es igual a cero utilizando la función len():
1234567def strict_sum(*values): if len(values) == 0: print('Warning: No values received.') return 0 return sum(values) print(strict_sum()) # Output: Warning: No values received. -> 0
Desliza para comenzar a programar
Implementar una función calculate_total que calcule el precio total de los artículos en un carrito, aplicando descuentos según el monto total.
- Utilizar argumentos posicionales arbitrarios llamados prices en la función
calculate_total. - Si no se proporcionan argumentos, devolver
'Your cart is empty.'. - Los descuentos son mutuamente excluyentes – aplicar solo el mayor descuento aplicable:
- Aplicar un 20% de descuento si el total es $200 o más.
- Aplicar un 10% de descuento si el total es $100 o más.
- No aplicar descuento en otros casos.
- Devolver el total final como una cadena formateada:
'Final total: $X.XX'.
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla