Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Combinazione di Argomenti Arbitrari Posizionali e Keyword | Argomenti Arbitrari
Tutorial Sulle Funzioni in Python
Sezione 3. Capitolo 3
single

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 argomenti keyword, come sconti o tasse.

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)

Nel codice sopra, si nota la riga settings.get('discount', 0). Poiché settings raccoglie gli argomenti keyword in un normale dizionario Python, si utilizza il metodo .get() del dizionario per recuperare i valori in modo sicuro.

Normalmente, se si tenta di cercare una chiave che non esiste in un dizionario usando le parentesi quadre (come settings['discount']), Python genera un errore KeyError. Il metodo .get() evita questo problema permettendo di fornire un valore predefinito di fallback.

La sintassi funziona così:

dictionary.get(key, default_value)

key: il nome dell'impostazione che si sta cercando (ad esempio, 'discount' o 'tax').
default_value: il valore restituito se quella chiave non è stata passata alla funzione.

Regole per la combinazione di argomenti arbitrari

Argomenti posizionali arbitrari (*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 come discount o tax, anche se non sono 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.

Note
Nota

Posizionare sempre *args prima di **kwargs nella firma della funzione: invertire l'ordine causerà un SyntaxError.

Compito

Scorri per iniziare a programmare

Implementare una funzione generate_report che accetti un numero qualsiasi di punteggi numerici e impostazioni opzionali tramite parole chiave.

  1. Utilizzare *args per raccogliere i punteggi (denominare il parametro scores) e **kwargs per raccogliere le impostazioni opzionali.

  2. Calcolare la media di tutti i punteggi forniti sommando tutti i valori in scores e dividendo per il numero di punteggi:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Se è presente una chiave 'label' in **kwargs, utilizzare il suo valore come titolo del report; altrimenti utilizzare 'Report'.

  4. Se è presente una chiave 'passing_score' in **kwargs, verificare se la media è maggiore o uguale a questo valore:

    • In caso affermativo, aggiungere 'Status: Pass' al report.
    • In caso contrario, aggiungere 'Status: Fail'.
  5. Restituire il risultato come stringa formattata: '{label} | Average: {avg:.2f} | {status}'. Se non viene fornito 'passing_score', omettere la parte relativa allo status: '{label} | Average: {avg:.2f}'.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 3
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt