Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Tipi built-in: riepilogo

Una riepilogo, comprensivo di esempi pratici, che riassume tutti i tipi built-in messi a disposizione dal linguaggio di programmazione Python.
Una riepilogo, comprensivo di esempi pratici, che riassume tutti i tipi built-in messi a disposizione dal linguaggio di programmazione Python.
Link copiato negli appunti

Nelle precedenti lezioni abbiamo visto diversi tipi built-in disponibili in Python. Questi tipi risulteranno molto utili in svariate situazioni ed è pertanto essenziale imparare ad usarli nel modo più opportuno. In questa lezione ne faremo un riepilogo, offrendo una carrellata di tutti i tipi disponibili in Python.

Tabella riassuntiva

Tipo di dato Nome Descrizione Esempi
Intero int Intero di dimensione arbitraria -42, 0, 1200, 999999999999999999
Reale float Numero a virgola mobile 3.14, 1.23e-10, 4.0E210
Booleano bool Per valori veri o falsi True, False
Complesso complex Numeri complessi con parte reale e immaginaria 3+4j, 5.0+4.1j, 3j
Stringhe str Usata per rappresentare testo '', 'stefano', "l'acqua"
Bytes bytes Usata per rappresentare bytes b'', b'\x00\x01\x02', b'Python'
Liste list Una sequenza mutabile di oggetti [], [1, 2, 3], ['Hello', 'World']
Tuple tuple Una sequenza immutabile di oggetti (), (1, 2, 3), ('Python', 3)
Insiemi set/frozenset Un'insieme di oggetti unici {1, 2, 3}, {'World', 'Hello'}
Dizionari dict Una struttura che associa chiavi a valori {}, {'nome': 'Ezio', 'cognome': 'Melotti'}

Nelle lezioni precedenti, abbiamo visto che i tipi di dato possono essere immutabili o mutabili. I numeri (int, float, complex, bool), le stringhe (str), i bytes, e i frozenset sono immutabili; le liste (list), gli insiemi (set), e i dizionari (dict) sono invece mutabili.

La maggior parte di questi tipi possono essere definiti usando i literals, cioè una sintassi dedicata che si può vedere nella tabella sotto la colonna "Esempi". Ci sono tuttavia delle eccezioni: non esiste una forma literal per definire insiemi vuoti (si può usare set()) e frozenset (si possono creare a partire da altri tipi, come ad esempio frozenset({1, 2, 3})).

È anche possibile creare nuovi oggetti "chiamando" i tipi elencati nella seconda colonna della tabella. Se durante la chiamata non viene passato nessun argomento, il valore ritornato sarà 0 nel caso dei numeri o un oggetto vuoto negli altri casi: ad esempio float() restituirà 0.0 e list() restituirà [].

Conversione tra tipi

Al contrario di altri linguaggi come il C, dove il tipo di dato è legato alla variabile che lo contiene, In Python il tipo è legato all'oggetto stesso e non può essere cambiato. Questo vuol dire che non è possibile convertire (cast) una variabile o un oggetto da un tipo ad un altro. Dato che il tipo di un oggetto non può essere cambiato, in Python la conversione non modifica l'oggetto originale, ma ne crea di nuovi a partire da oggetti già esistenti.

Questa operazione può essere effettuata passando l'oggetto che vogliamo convertire al tipo in cui lo vogliamo convertire. Ad esempio, se vogliamo convertire una lista in un insieme possiamo usare set(lista):

>>> mylist = [1, 2, 3, 2, 1]  # definisco una lista
>>> myset = set(mylist)       # creo un nuovo insieme a partire dalla lista
>>> myset                     # l'insieme contiene gli stessi elementi (senza duplicati)
{1, 2, 3}
>>> mylist                    # la lista originale esiste ancora
[1, 2, 3, 2, 1]

Se vogliamo, invece, convertire una stringa in numero, possiamo procedere come segue:

>>> mystr = '3.14'            # definisco una stringa
>>> myfloat = float(mystr)    # creo un nuovo float a partire dalla stringa
>>> myfloat                   # il float corrisponde al numero della stringa
3.14
>>> mystr                     # la stringa originale esiste ancora
'3.14'

È anche possibile convertire una lista di tuple in un dizionario:

>>> mylist = [('a', 1), ('b', 2), ('c', 3)]
>>> mydict = dict(mylist)
>>> mydict
{'c': 3, 'a': 1, 'b': 2}

Ogni tipo accetta diversi input, ma non tutte le conversioni sono possibili. Ad esempio, non è possibile convertire una lista in intero, o un intero in lista. Se passiamo un oggetto che non può essere convertito, Python restituirà un TypeError o un ValueError:

>>> int('un milione')  # str è un tipo valido, ma il valore non può essere convertito
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: 'un milione'
>>> int([1, 2, 3])     # list non è un tipo valido, quindi un TypeError viene restituito
Traceback (most recent call last):
  File "", line 1, in 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

È anche possibile creare copie di un oggetto senza cambiarne il tipo. Ad esempio:

>>> mylist1 = [1, 2, 3]      # creo una lista
>>> mylist2 = list(mylist1)  # creo una nuova lista (una copia) partendo da mylist1
>>> mylist2                  # la copia contiene gli stessi elementi dell'originale
[1, 2, 3]
>>> mylist1.append(4)        # posso modificare l'originale aggiungendo un elemento
>>> mylist1                  # l'elemento viene aggiunto alla lista originale
[1, 2, 3, 4]
>>> mylist2                  # ma non alla copia
[1, 2, 3]

Altri tipi di dato

Tutti i tipi elencati nella tabella all'inizio di questa lezione sono built-in, cioè sono sempre disponibili senza bisogno di importare nulla. In aggiunta a questi tipi di dato built-in, esistono anche diversi altri tipi non built-in che possono essere importati da moduli della standard library, tra cui:

  • il modulo decimal definisce un tipo Decimal che permette di lavorare con numeri a virgola mobile accuratamente, superando alcune limitazioni dei numeri float;
  • il modulo fractions definisce un tipo Fraction che consente di rappresentare e lavorare con numeri razionali usando le frazioni;
  • il modulo collections definisce diversi tipi di contenitori, tra cui namedtuple (una tupla che consente l'accesso agli elementi per nome, invece che per posizione), OrderedDict (un dizionario che mantiene l'ordine di inserimento degli elementi), defaultdict (un dizionario che permette di specificare un valore di default), Counter (un dizionario che conta il numero di occorrenze di ogni elemento).

Prima di poter utilizzare questi tipi è necessario importarli usando import, come vedremo meglio in una delle prossime lezioni.


Ti consigliamo anche