Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Curiosità sulle tuple

francesco.dev (33560 points)
21 51 129
in Programmare in Python by (33.6k points)

Buonasera ragazzi,

Oggi vi porto un interrogativo molto interessante e di cui possiamo discutere insieme nei commenti:
Studiando i vari tipi di variabili esistenti in Python, mi sono imbattuto nelle tuple (definite come un insieme immutabile e ordinato di elementi, quindi, a differenza delle liste, non possiamo modificarne le specifiche posizioni).

Il quesito che vi porto oggi è il seguente:
Conoscendo già le liste come insieme ordinato di elementi modificabili, quale sarebbe l'utilità delle tuple?

Tramite degli esempi che ho visto online ho notato che risultano vantaggiose nel caso in cui volessimo scambiare i valori di due variabili (senza usarne una di appoggio), infatti per poter scambiare il contenuto delle variabili A e B basterebbe assegnare ad A,B i valori di B,A ponendo semplicemente A,B = B,A.

Aspetto le vostre risposte e i vostri esempi, anche per avviare una discussione per trovare delle motivazioni insieme!


Ancora buona serata,
- Francesco Pio Scognamiglio

1.4k views
closed

4 Answers

Best answer
by (9.9k points)
selected by
Ciao, una utilità importante delle tuple è quella di poter essere usate come valore di ritorno per le funzioni (ossia far ritornare più valori rispetto ad uno solo). Questo meccanismo ci è stato fatto vedere dal professore a lezione, e si può fare solo con le tuple.
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Vero!
Non ci avevo fatto caso che con un return x, y, z stiamo ritornando semplicemente una tupla che contiene questi tre valori!
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
edited by

Buonasera!

Dunque la premessa è che il discorso sarà abbastanza lungo perché proverò a dilungarmi sui vari aspetti delle tuple confrontandoli con quelli delle liste.    Dunque..cominciamo!
Innanzitutto la definizione dei due oggetti è abbastanza diversa, infatti le liste nascono come sequenze omogenee di dati mentre le tuple sono quelle che vengono definite con il termine "structs". L'idea che sta alla base di questi due oggetti è infatti che le prime dovrebbero accogliere dati simili tra di loro, proprio perché essendo oggetti mutabili possono esser facilmente manipolate, e quindi "gruppi" o collezioni di oggetti simili andrebbero depositate nelle liste; mentre le tuple nascono per accogliere oggetti con diverse caratteristiche, tipi e funzioni.
Arriviamo quindi al punto cardine della questione: oggetti mutabili vs immutabili!   
Sì perché le liste come pure i dizionari permettono di esser modificati, mentre le tuple come pure le stringhe, i bool e molti altri non permettono di esser modificate.
Entro un poco più nel dettaglio della questione.. Le liste possono esser dunque manipolate, addirittura attraverso l'utilizzo degli indici puoi arrivare a modificare e anche cancellare un elemento all'interno della lista. Le tuple invece non permettono di cancellare un elemento contenuto in esse e se vogliamo inserire un nuovo elemento all'interno di una tupla il risultato sarà che verrà generata una tupla con id diverso! Questo lo possiamo infatti verificare poiché gli id saranno diversi (nel caso delle tuple)! Per verificarlo basta inizializzare una tupla con dei valori, poi attraverso print() e id() conoscere l'id di quella tupla e in seguito andare a inserire un nuovo elemento all'interno della stessa, se richiediamo di nuovo di conoscere l'id() di quella tupla vedremo che questo sarà diverso!
In alcuni casi tuple e liste possono essere usate in maniera arbitraria, tuttavia esse hanno rispettivamente diversi vantaggi e svantaggi che potrebbero esser riassunti in due punti:

  • Le tuple risultano particolarmente utili nei dizionari perché possono essere usate come key immutabili degli stessi. Esse risultano inoltre molto efficaci in tutti quei casi in cui tu voglia mantenere "fisso" un certo valore.
  • Le liste come sequenze di oggetti simili sono utili invece in tutti quei casi in cui tu voglia interagire e modificare gli elementi a essa appartenenti.

Ora sta a te scegliere quale delle due meglio si adatta alle tue esigenze, di norma io raccomanderei di utilizzare le tuple per le piccole cose o per quelle cose che riesco facilmente a gestire, ma questa è una mia preferenza!

Aspetto un tuo commento e una risposta anche degli altri utenti così da poter discutere delle personali preferenze in merito.

Ti auguro una buona serata!

Leonardo Emili

francesco.dev (33560 points)
21 51 129
by (33.6k points)
Che intendi per sequenza di oggetti simili?
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Le liste contengono al loro interno elementi che in Python possono essere di diversi tipi, e non di un solo tipo. La distinzione che solitamente si fa è più a livello teorico,  infatti  puoi inserire all'interno delle liste elementi diversi tra di loro e all'interno delle tuple elementi con caratteristiche simili. Solitamente però le liste vengono utilizzate per depositare elementi simili tra loro (es. una lista di canzoni ,un elenco telefonico e così via..) Tuttavia nulla ti vieta di scegliere i valori che preferisci in entrambi i casi! :D
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Esatto, volevo arrivare a questo, che le liste non sono assolutamente un insieme omogeneo di dati (può diventarlo se metti valori solo di un tipo).
Quindi quello che hai affermato, definendole omogenee e con la presenza di valori simili, non è del tutto corretto visto che posso creare una lista che contiene interi, float, stringhe e così via.
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Assolutamente , se non si fosse capito la mia era una precisazione a livello teorico, infatti come puoi ben leggere ho precisato di parlare di definizione e di scopo di come esse sono state ideate. Spero tu abbia capito il fraintendimento :)
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Certamente!
A livello teorico concordo con te e torniamo sempre al discorso della versatilità di Python in queste piccole cose.
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
In ogni caso ti ringrazio della tua segnalazione, ero convinto di aver già segnalato che si trattasse di una definizione ma così gli altri utenti non avranno dubbi.
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Di niente, è un piacere aiutare!
Buona serata :)
Denis (2230 points)
4 13 23
by (2.2k points)
Ciao Francesco!

È un tipo dati che non conosco in tutta onestà, credo tu abbia già ricevuto risposte soddisfacenti, volevo solo aggiungere che in un programma complesso, con più programmatori che ci lavorano sopra, potrebbe essere interessante un tipo dati che nessuno ti 'sporca'.
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Ciao Denis, concordo con il tuo pensiero
Ed infine ti ricordo che siamo qui tutti per imparare e tu proprio ora hai conosciuto un nuovo tipo di dato che, forse, in futuro potrebbe tornarti utile!
Se vedi anche le altre domande che ho scritto, sono tutte fatte in modo che arrivino soprattutto a chi non conosce determinati argomenti, in modo che tutti possano conoscere sempre di più!
Detto questo ti auguro una buona serata :D
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)

ATTENZIONE: una funzione può tornare qualsiasi tipo di valore, comprese liste, oggetti, dizionari ... (o il valore None che indica nessun valore).

Quindi per tornare valori multipli si può usare anche una lista (e anche in questo caso l'assegnamento multiplo vale).

Se non si mettono le parentesi attorno ai valori di ritorno, python torna una tupla

francesco.dev (33560 points)
21 51 129
by (33.6k points)
Ottimo, grazie per la delucidazione