single
Combinación de Argumentos Arbitrarios Posicionales y de Palabras Clave
Desliza para mostrar el menú
Considere una función que calcula el costo total de múltiples artículos, permitiendo pasar cualquier cantidad de precios y configuraciones opcionales mediante palabras clave, como descuentos o impuestos.
12345678910111213141516171819202122232425def calculate_total_cost(*prices, **settings): subtotal = sum(prices) discount = settings.get('discount', 0) tax = settings.get('tax', 0) discount_amount = subtotal * (discount / 100) taxed_amount = (subtotal - discount_amount) * (1 + tax / 100) print(f'Subtotal: ${subtotal:.2f}') if discount > 0: print(f'Discount: {discount}% (-${discount_amount:.2f})') else: print('No discount applied.') if tax > 0: print(f'Tax: {tax}% (+${taxed_amount - (subtotal - discount_amount):.2f})') print(f'Final total: ${taxed_amount:.2f}') print() # Examples of using the function calculate_total_cost(1000, 250, 50) calculate_total_cost(1200, 800, discount=10) calculate_total_cost(500, 750, 250, discount=5, tax=8)
En el código anterior, observe la línea settings.get('discount', 0).
Como settings recopila los argumentos de palabras clave en un diccionario estándar de Python, se utiliza el método .get() del diccionario para recuperar los valores de forma segura.
Normalmente, si intenta buscar una clave que no existe en un diccionario usando corchetes (como settings['discount']), Python generará un error y lanzará un KeyError. El método .get() evita esto permitiendo proporcionar un valor predeterminado alternativo.
La sintaxis funciona así:
dictionary.get(key, default_value)
key: el nombre de la configuración que se busca (por ejemplo, 'discount' o 'tax').
default_value: el valor que se devuelve si esa clave no fue pasada a la función.
Reglas para combinar argumentos arbitrarios
Argumentos posicionales arbitrarios (*args)
*args recopila todos los argumentos posicionales adicionales en una tupla.
En este ejemplo, la función puede recibir cualquier cantidad de precios de artículos sin necesidad de definirlos explícitamente.
Por ejemplo:
calculate_total_cost(500, 250, 100)
Aquí, *prices se convierte en (500, 250, 100).
Argumentos arbitrarios por palabra clave (**kwargs)
**kwargs recopila todos los argumentos nombrados (por palabra clave) en un diccionario.
Esto permite que la función acepte configuraciones adicionales nombradas como discount o tax, incluso si no fueron predefinidas.
Por ejemplo:
calculate_total_cost(1000, 500, discount=10, tax=5)
Aquí, **settings se convierte en {'discount': 10, 'tax': 5}.
Combinación de ambos
Se pueden usar tanto *args como **kwargs en la misma función para lograr máxima flexibilidad, permitiendo manejar cualquier cantidad de valores posicionales y cualquier combinación de configuraciones nombradas.
Siempre colocar *args antes de **kwargs en la firma de la función; invertir el orden resultará en un SyntaxError.
Desliza para comenzar a programar
Implementación de una función generate_report que acepte cualquier cantidad de calificaciones numéricas y configuraciones opcionales mediante palabras clave.
-
Utilizar
*argspara recopilar las calificaciones (nombrar el parámetroscores) y**kwargspara recopilar las configuraciones opcionales. -
Calcular el promedio de todas las calificaciones proporcionadas sumando todos los valores en scores y dividiendo por la cantidad de calificaciones:
Average=len(scores)sum(scores) -
Si existe una clave
'label'en**kwargs, usar su valor como título del informe; de lo contrario, usar'Report'. -
Si existe una clave
'passing_score'en**kwargs, comprobar si el promedio es mayor o igual a ese valor:- Si es así, agregar
'Status: Pass'al informe. - Si no, agregar
'Status: Fail'.
- Si es así, agregar
-
Devolver el resultado como una cadena formateada:
'{label} | Average: {avg:.2f} | {status}'. Si no se proporciona'passing_score', omitir la parte del estado:'{label} | Average: {avg:.2f}'.
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