Lo scopo di * e ** in Python

Najwa Riyaz 30 gennaio 2023
  1. La definizione di * in Python
  2. La definizione di ** in Python
  3. gli usi di * e ** nelle chiamate di funzione in Python
Lo scopo di * e ** in Python

Questo articolo spiega lo scopo di * e ** in Python.

In Python, usiamo il singolo asterisco (*) e il doppio asterisco (**) per indicare un numero variabile di argomenti.

Possiamo passare qualsiasi numero di argomenti in una funzione Python in uno dei seguenti modi.

  1. Argomenti posizionali (*)
  2. Argomenti delle parole chiave (**)

La definizione di * in Python

Usa il simbolo * in Python per consentire un numero variabile di argomenti/parametri posizionali alla funzione.

Segui l’esempio qui sotto.

def function_singleasterix(*someargs):
    for i in someargs:
        print(i)

Ora, il codice del driver, con list o tuple è il seguente.

listdata = ["Alex", "Tom", "John", "Alice"]
function_singleasterix(listdata)

Produzione:

['Alex', 'Tom', 'John', 'Alice']

Usa argomenti solo posizionali se non vuoi che gli utenti conoscano il nome dei parametri.

Ad esempio, è consigliabile utilizzare variabili solo posizionali nelle API: questo evita interruzioni in caso di modifiche all’API se il nome del parametro viene modificato.

La definizione di ** in Python

Usa il simbolo ** in Python per consentire un numero variabile di argomenti/parametri di parole chiave alla funzione. Si noti che l’argomento dopo deve essere un elemento di mappatura (coppia chiave-valore del dizionario), non una tupla o un elenco.

Segui il codice di esempio qui sotto.

def function_doubleasterix(**keywordargs):

    print("The keys in the kwargs dicionary are -", keywordargs.keys())
    print("The values in the kwargs dicionary are -", keywordargs.values())

    print("--The key value assignment in the 'keywordargs' dictionary are as follows--")
    for key, value in keywordargs.items():
        print("%s == %s" % (key, value))

Nell’esempio sopra, keywordargs è associato a un dizionario come nel programma sottostante.

function_doubleasterix(SNo001="Alex", SNo002="Tom")

Produzione:

The keys in the 'keywordargs' dicionary are - dict_keys(['SNo001', 'SNo002'])
The values in the 'keywordargs' dicionary are - dict_values(['Alex', 'Tom'])
--The key value assignment in the 'keywordargs' dictionary are as follows--
SNo001 == Alex
SNo002 == Tom

Nell’esempio sopra, **keywordargs fornisce argomenti di parole chiave come coppie chiave-valore del dizionario.

gli usi di * e ** nelle chiamate di funzione in Python

I simboli * e ** vengono utilizzati anche nelle chiamate di funzione. Usali per passare un numero variabile di argomenti a una funzione usando uno dei seguenti.

  • una lista - *
  • una tupla - *
  • un dizionario - **

Ecco alcuni esempi che puoi seguire.

Chiama la funzione con una variabile lista come input. Usa * come segue

varlist = ["Tom", "John", "Alice"]
functiondef(*varlist)

Chiama la funzione con una variabile dizionario come input. Usa ** come segue

vardict = {"a": "Tom", "b": "John", "c": "Alice"}
functiondef(**vardict)

Chiama la funzione con una variabile tuple come input. Usa * come segue

vartuple = ("Tom", "John", "Alice")
functiondef(*vartuple)

L’output per tutti i casi precedenti è:

SNo1 = Tom
SNo2 = John
SNo3 = Alice