single
Combinazione di argomenti arbitrari posizionali e keyword
Scorri per mostrare il menu
Considera una funzione che calcola il costo totale di più articoli permettendo di passare un numero qualsiasi di prezzi e impostazioni opzionali tramite parole chiave come sconti o tasse.
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)
Regole per combinare argomenti arbitrari
Argomenti arbitrari posizionali (*args)
*args raccoglie tutti gli argomenti posizionali extra in una tupla.
In questo esempio, la funzione può accettare un numero qualsiasi di prezzi degli articoli senza doverli definire esplicitamente.
Ad esempio:
calculate_total_cost(500, 250, 100)
Qui, *prices diventa (500, 250, 100).
Argomenti Arbitrari per Parola Chiave (**kwargs)
**kwargs raccoglie tutti gli argomenti nominati (per parola chiave) in un dizionario.
Questo permette alla funzione di accettare impostazioni aggiuntive nominate come discount o tax, anche se non erano state predefinite.
Ad esempio:
calculate_total_cost(1000, 500, discount=10, tax=5)
Qui, **settings diventa {'discount': 10, 'tax': 5}.
Combinazione di Entrambi
È possibile utilizzare sia *args che **kwargs nella stessa funzione per ottenere la massima flessibilità — consentendo di gestire qualsiasi numero di valori posizionali e qualsiasi combinazione di impostazioni nominate.
Inserire sempre *args prima di **kwargs nella firma della funzione – invertendo l'ordine si otterrà un SyntaxError.
Scorri per iniziare a programmare
Implementare una funzione generate_report che accetti un numero qualsiasi di punteggi numerici e impostazioni opzionali tramite parole chiave.
- Utilizzare
*argsper raccogliere i punteggi (denominare il parametroscores) e**kwargsper raccogliere le impostazioni opzionali. - Calcolare la media di tutti i punteggi forniti.
- Se è presente una chiave
"label"in**kwargs, utilizzare il suo valore come titolo del report; altrimenti utilizzare"Report". - Se è presente una chiave
"passing_score"in**kwargs, verificare se la media è maggiore o uguale a tale valore:- In caso affermativo, aggiungere
"Status: Pass"al report. - In caso contrario, aggiungere
"Status: Fail".
- In caso affermativo, aggiungere
- Restituire il risultato come stringa formattata:
"{label} | Average: {avg:.2f} | {status}". Se non viene fornito alcun"passing_score", omettere la parte relativa allo status:"{label} | Average: {avg:.2f}".
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione