Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Combinación de Argumentos Arbitrarios Posicionales y de Palabras Clave | Argumentos Arbitrarios
Tutorial de Funciones en Python
Sección 3. Capítulo 3
single

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.

12345678910111213141516171819202122232425
def 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.

Note
Nota

Siempre colocar *args antes de **kwargs en la firma de la función; invertir el orden resultará en un SyntaxError.

Tarea

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.

  1. Utilizar *args para recopilar las calificaciones (nombrar el parámetro scores) y **kwargs para recopilar las configuraciones opcionales.

  2. Calcular el promedio de todas las calificaciones proporcionadas sumando todos los valores en scores y dividiendo por la cantidad de calificaciones:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Si existe una clave 'label' en **kwargs, usar su valor como título del informe; de lo contrario, usar 'Report'.

  4. 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'.
  5. 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

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

some-alt