Python Language Incarico distruttivo


Esempio

Nei compiti, puoi dividere un Iterable in valori usando la sintassi "decompressione":

Distruzione come valori

a, b = (1, 2)
print(a)
# Prints: 1
print(b)
# Prints: 2

Se tenti di decomprimere più della lunghezza del iterabile, riceverai un errore:

a, b, c = [1]
# Raises: ValueError: not enough values to unpack (expected 3, got 1)
Python 3.x 3.0

Distruzione come lista

È possibile decomprimere un elenco di lunghezza sconosciuta utilizzando la seguente sintassi:

head, *tail = [1, 2, 3, 4, 5]

Qui, estraiamo il primo valore come scalare e gli altri valori come un elenco:

print(head)
# Prints: 1
print(tail)
# Prints: [2, 3, 4, 5]

Che è equivalente a:

l = [1, 2, 3, 4, 5]
head = l[0]
tail = l[1:]

Funziona anche con più elementi o elementi alla fine dell'elenco:

a, b, *other, z = [1, 2, 3, 4, 5]
print(a, b, z, other)
# Prints: 1 2 5 [3, 4]

Ignorare i valori nei compiti distruttivi

Se ti interessa solo un determinato valore, puoi usare _ per indicare che non sei interessato. Nota: questo sarà ancora impostato su _ , solo la maggior parte delle persone non lo usa come variabile.

a, _ = [1, 2]
print(a)
# Prints: 1
a, _, c = (1, 2, 3)
print(a)
# Prints: 1
print(c)
# Prints: 3
Python 3.x 3.0

Ignorare le liste in compiti distruttivi

Infine, puoi ignorare molti valori usando la sintassi *_ nell'assegnazione:

a, *_ = [1, 2, 3, 4, 5]
print(a)
# Prints: 1

che non è molto interessante, in quanto è possibile utilizzare l'indicizzazione nell'elenco. Dove è bello mantenere il primo e l'ultimo valore in un compito:

 a, *_, b = [1, 2, 3, 4, 5]
 print(a, b)
 # Prints: 1 5

o estrai più valori contemporaneamente:

 a, _, b, _, c, *_ = [1, 2, 3, 4, 5, 6]
 print(a, b, c)
 # Prints: 1 3 5