Articoli

Python Tutorial: Quali sono i Tipi di Dati e come si usano

I tipi di dati Python vengono utilizzati per definire il tipo di una variabile.

Definisce quale tipo di dati memorizzeremo in una variabile.

I dati archiviati in memoria possono essere di molti tipi. Ad esempio, l’età di una persona viene archiviata come valore numerico e il suo indirizzo come caratteri alfanumerici.

Un tipo di dati rappresenta un tipo di valore e determina quali operazioni possono essere eseguite su di esso. I dati numerici, non numerici e booleani (vero/falso) sono i tipi di dati più ovvi. Tuttavia, ogni linguaggio di programmazione ha una propria classificazione che riflette in gran parte la sua filosofia di programmazione.

Tipi di dati Python

Python ha i seguenti tipi di dati incorporati di cui parleremo in questo tutorial:

Struttura dei tipi di dati di Python
Gerarchia tipi di dati di Python

Tipo di dati numerici Python

I tipi di dati numerici Python memorizzano valori numerici. Gli oggetti numero vengono creati quando assegni loro un valore.

Ad esempio:

var1 = 1       # int data type
var2 = True # bool data type
var3 = 10.023 # float data type
var4 = 10+3j # complex data type

Python supporta quattro diversi tipi numerici e ognuno di essi ha classi integrate nella libreria Python, chiamate rispettivamente int, bool, float e complex:

  • int (interi con segno)
  • float (valori reali in virgola mobile)
  • complesso (numeri complessi)

La libreria standard di Python ha una funzione incorporata type(), che restituisce la classe dell’oggetto dato. Qui viene utilizzato per verificare il tipo di un numero intero e in virgola mobile.

> type(123)
<class 'int'>
> type(9.99)
<class 'float'>

Un numero complesso è formato da due parti: reale e immaginaria . Sono separati dai segni “+” o “-“. La parte immaginaria ha il suffisso “j” che è il numero immaginario. La radice quadrata di -1 ( [ Errore di elaborazione matematica ]−1), è definito come numero immaginario. I numeri complessi in Python sono rappresentati come x+yj, dove x è la parte reale e y è la parte immaginaria. Quindi 5+6j è un numero complesso.

>>> type(5+6j)
<class 'complex'>
Esempio di tipi di dati numerici

Di seguito è riportato un esempio per mostrare l’utilizzo di numeri interi, float e complessi:

# integer variable.
a=100
print("The type of variable having value", a, " is ", type(a))

# float variable.
c=20.345
print("The type of variable having value", c, " is ", type(c))

# complex variable.
d=10+3j
print("The type of variable having value", d, " is ", type(d))

Tipo di dati stringa Python

Una stringa Python è una sequenza di uno o più caratteri Unicode, racchiusi tra virgolette singole, doppie o triple (chiamate anche virgolette). Le stringhe Python sono immutabili, il che significa che quando esegui un’operazione sulle stringhe, produci sempre un nuovo oggetto stringa dello stesso tipo, anziché mutare una stringa esistente.

Finché è racchiusa la stessa sequenza di caratteri, le virgolette singole, doppie o triple non contano. Pertanto, le seguenti rappresentazioni di stringhe sono equivalenti.

> 'BlogInnovazione'
'BlogInnovazione'
> "BlogInnovazione"
'BlogInnovazione'
> '''BlogInnovazione'''
'BlogInnovazione'

Una stringa in Python è un oggetto della classe str . Può essere verificato con la funzione type() .

> type("Welcome To BlogInnovazione")
<class 'str'>

Una stringa è un tipo di dati non numerico. Ovviamente non possiamo eseguire operazioni aritmetiche su di esso. Tuttavia, è possibile eseguire operazioni come slicing la concatenazione. La classe str di Python definisce una serie di metodi utili per l’elaborazione delle stringhe. Sottoinsiemi di stringhe possono essere presi utilizzando l’operatore slice ([ ] e [:] ) con indici che iniziano da 0 all’inizio della stringa e procedono da -1 alla fine.

Il segno più (+) è l’operatore di concatenazione di stringhe e l’asterisco (*) è l’operatore di ripetizione in Python.

Esempio di tipo di dati stringa
str = 'Hello World!'

print (str) # Prints complete string
print (str[0]) # Prints first character of the string
print (str[2:5]) # Prints characters starting from 3rd to 5th
print (str[2:]) # Prints string starting from 3rd character
print (str * 2) # Prints string two times
print (str + "TEST") # Prints concatenated string

Ciò produrrà il seguente risultato:

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

Tipi di dati Sequence di Python

La sequenza è un tipo di dati di raccolta. È una raccolta ordinata di elementi. Gli elementi nella sequenza hanno un indice posizionale che inizia con 0.

Esistono tre tipi di dati di sequenza definiti in Python.

  • Elenco tipi di dati
  • Tipo di dati tupla
  • Tipo di dati intervallo
Tipo di dati elenco Python

Gli elenchi Python sono i tipi di dati composti più versatili. Un elenco Python contiene elementi separati da virgole e racchiusi tra parentesi quadre ([]).

> [2023, "Python", 3.11, 5+6j, 1.23E-4]

Una lista in Python è un oggetto della classe list . Possiamo verificarlo con la funzione type().

> type([2023, "Python", 3.11, 5+6j, 1.23E-4])
<class 'list'>

Come accennato, un elemento nell’elenco può essere di qualsiasi tipo di dati. Ciò significa che un oggetto della lista può essere anche un elemento di un’altra lista. In tal caso, diventa un elenco nidificato.

> [['One', 'Two', 'Three'], [1,2,3], [1.0, 2.0, 3.0]]

Un elenco può contenere elementi che sono semplici numeri, stringhe, tuple, dizionari, set o anche oggetti di classi definite dall’utente.

È possibile accedere ai valori memorizzati in un elenco Python utilizzando l’operatore slice ([ ] e [:]) con indici che iniziano da 0 all’inizio dell’elenco e procedono fino alla fine -1. Il segno più (+) è l’operatore di concatenazione dell’elenco e l’asterisco (*) è l’operatore di ripetizione.

Esempio di tipo di dati di elenco

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print (list) # Prints complete list
print (list[0]) # Prints first element of the list
print (list[1:3]) # Prints elements starting from 2nd till 3rd
print (list[2:]) # Prints elements starting from 3rd element
print (tinylist * 2) # Prints list two times
print (list + tinylist) # Prints concatenated lists

Produce il seguente risultato:

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']
Tipo di dati tupla Python

La tupla Python è un altro tipo di dati di sequenza simile a un elenco. Una tupla Python è costituita da un numero di valori separati da virgole. A differenza delle liste, tuttavia, le tuple sono racchiuse tra parentesi (…).

Una tupla è anche una sequenza, quindi ogni elemento nella tupla ha un indice che si riferisce alla sua posizione nella raccolta. L’indice parte da 0.

> (2023, "Python", 3.11, 5+6j, 1.23E-4)

In Python, una tupla è un oggetto della classe tupla . Possiamo verificarlo con la funzione type().

> type((2023, "Python", 3.11, 5+6j, 1.23E-4))
<class 'tuple'>

Come nel caso di una lista, un elemento nella tupla può anche essere una lista, una tupla stessa o un oggetto di qualsiasi altra classe Python.

> (['One', 'Two', 'Three'], 1,2.0,3, (1.0, 2.0, 3.0))

Per formare una tupla, l’uso delle parentesi è facoltativo. Gli elementi dati separati da virgola senza alcun simbolo di racchiuso vengono trattati come una tupla per impostazione predefinita.

> 2023, "Python", 3.11, 5+6j, 1.23E-4
(2023, 'Python', 3.11, (5+6j), 0.000123)

Esempio di tipo di dati tupla

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print (tuple) # Prints the complete tuple
print (tuple[0]) # Prints first element of the tuple
print (tuple[1:3]) # Prints elements of the tuple starting from 2nd till 3rd
print (tuple[2:]) # Prints elements of the tuple starting from 3rd element
print (tinytuple * 2) # Prints the contents of the tuple twice
print (tuple + tinytuple) # Prints concatenated tuples

Ciò produce il seguente risultato:

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

Le principali differenze tra liste e tuple sono: Le liste sono racchiuse tra parentesi ( [ ] ) e i loro elementi e dimensioni possono essere modificati, ovvero le liste sono mutabili, mentre le tuple sono racchiuse tra parentesi ( ( ) ) e non possono essere aggiornate (immutabili). Le tuple possono essere pensate come elenchi di sola lettura .

Il seguente codice non è valido con la tupla perché abbiamo tentato di aggiornare una tupla, cosa non consentita.

Un caso simile è possibile con le liste:

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tuple[2] = 1000 # Invalid syntax with tuple
list[2] = 1000 # Valid syntax with list
Tipo di dati dell’intervallo Python

Un intervallo Python è una sequenza immutabile di numeri che viene generalmente utilizzata per scorrere un numero specifico di elementi.

È rappresentato dalla classe Range . Il costruttore di questa classe accetta una sequenza di numeri a partire da 0 e incrementa fino a 1 fino a raggiungere un numero specificato. Di seguito è riportata la sintassi della funzione:

range(start, stop, step)

Ecco la descrizione dei parametri utilizzati:

  • start : numero intero per specificare la posizione iniziale, (è facoltativo, impostazione predefinita: 0)
  • stop : numero intero per specificare la posizione finale (è obbligatorio)
  • passo : numero intero per specificare l’incremento, (è facoltativo, impostazione predefinita: 1)

Esempio di tipo di dati di intervallo

Di seguito è riportato un programma che utilizza il ciclo for per stampare i numeri da 0 a 4:

for i in range(5):
print(i)

Ciò produce il seguente risultato:

0
1
2
3
4

Ora modifichiamo il programma sopra per stampare il numero che inizia da 2 invece che da 0:

for i in range(2, 5):
print(i)

Ciò produce il seguente risultato:

2
3
4

Ancora una volta, modifichiamo il programma per stampare il numero partendo da 1 ma con un incremento di 2 invece di 1:

for i in range(1, 5, 2):
print(i)

Ciò produce il seguente risultato:

1
3

Tipi di dati di sequenze binarie Python

Un tipo di dati di sequenza binaria in Python è un modo per rappresentare i dati come una serie di cifre binarie, che sono 0 e 1. È come un linguaggio speciale che i computer comprendono per archiviare ed elaborare le informazioni in modo efficiente.

Questo tipo di dati viene comunemente utilizzato quando si ha a che fare con cose come file, immagini o qualsiasi cosa che possa essere rappresentata utilizzando solo due valori possibili. Pertanto, invece di utilizzare numeri o lettere regolari, i tipi di dati di sequenza binaria utilizzano una combinazione di 0 e 1 per rappresentare le informazioni.

Python fornisce tre modi diversi per rappresentare i dati binari. Sono i seguenti:

  • byte
  • bytearray
  • memoryview

Di seguito vediamo i tre tipi:

Tipo di dati byte di Python

Il tipo di dati byte in Python rappresenta una sequenza di byte. Ogni byte è un valore intero compreso tra 0 e 255. Viene comunemente utilizzato per archiviare dati binari, come immagini, file o pacchetti di rete.

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

Possiamo creare byte in Python usando la funzione incorporata bytes() o anteponendo una sequenza di numeri con b .

Esempio di tipo di dati byte

Nell’esempio seguente, stiamo utilizzando la funzione incorporata bytes() per specificare esplicitamente una sequenza di numeri che rappresentano valori ASCII:

# Using bytes() function to create bytes
b1 = bytes([65, 66, 67, 68, 69])
print(b1)

Il risultato ottenuto è il seguente:

b'ABCDE'

Qui, stiamo usando il prefisso “b” prima di una stringa per creare automaticamente un oggetto bytes:

# Using prefix 'b' to create bytes
b2 = b'Hello'
print(b2)

Di seguito è riportato l’output del codice precedente:

b'Hello'
Tipo di dati Bytearray Python

Il tipo di dati bytearray in Python è abbastanza simile al tipo di dati bytes, ma con una differenza fondamentale: è mutabile, il che significa che puoi modificare i valori memorizzati in esso dopo che è stato creato.

È possibile creare un bytearray utilizzando vari metodi, incluso passando un iterabile di numeri interi che rappresentano valori di byte, codificando una stringa o convertendo un byte esistente o un oggetto bytearray

Esempio di tipo di dati Bytearray

Nell’esempio seguente, stiamo creando un bytearray passando un iterabile di numeri interi che rappresentano valori di byte:

# Creating a bytearray from an iterable of integers
value = bytearray([72, 101, 108, 108, 111])
print(value)

L’output ottenuto è quello mostrato di seguito:

bytearray(b'Hello')

Ora stiamo creando un bytearray codificando una stringa utilizzando una codifica “UTF-8”:

# Creating a bytearray by encoding a string
val = bytearray("Hello", 'utf-8')
print(val)

Il risultato prodotto è il seguente:

bytearray(b'Hello')
Tipo di dati Memoryview Python

In Python, una memoryview è un oggetto integrato che fornisce una vista nella memoria dell’oggetto originale, generalmente oggetti che supportano il protocollo buffer, come array di byte (bytearray) e byte (byte). Consente di accedere ai dati sottostanti dell’oggetto originale senza copiarlo, fornendo un accesso efficiente alla memoria per set di dati di grandi dimensioni.

È possibile creare una visualizzazione della memoria utilizzando vari metodi. Questi metodi includono l’utilizzo del costruttore memoryview(), il sezionamento di byte o oggetti bytearray, l’estrazione da oggetti array o l’utilizzo di funzioni integrate come open() durante la lettura da file.

Esempio di tipo di dati Memoryview

Nell’esempio fornito, stiamo creando un oggetto memoryview direttamente passando un oggetto supportato al costruttore memoryview(). Gli oggetti supportati generalmente includono array di byte (bytearray), byte (byte) e altri oggetti che supportano il protocollo buffer:

data = bytearray(b'Hello, world!')
view = memoryview(data)
print(view)

Di seguito è riportato l’output del codice precedente:

<memory at 0x00000186FFAA3580>

Se hai un oggetto array, puoi creare una memoryview utilizzando l’interfaccia buffer come mostrato di seguito:

import array
arr = array.array('i', [1, 2, 3, 4, 5])
view = memoryview(arr)
print(view)

L’output ottenuto è quello mostrato di seguito:

<memory at 0x0000017963CD3580>

Puoi anche creare una memoryview affettando un oggetto byte o bytearray:

data = b'Hello, world!'
# Creating a view of the last part of the data
view = memoryview(data[7:])
print(view)

Il risultato ottenuto è il seguente:

<memory at 0x00000200D9AA3580>

Tipo di dato Dizionario

I dizionari Python sono una specie di tabella hash. Una chiave del dizionario può essere quasi qualsiasi tipo Python, ma solitamente sono numeri o stringhe. I valori, d’altra parte, possono essere qualsiasi oggetto Python arbitrario.

Il dizionario Python è come gli array associativi o gli hash presenti in Perl e sono costituiti da coppie chiave:valore . Le coppie sono separate da virgola e racchiuse tra parentesi graffe {}. Per stabilire la mappatura tra chiave e valore, il simbolo punto e virgola’:’ viene inserito tra i due.

> {1:'one', 2:'two', 3:'three'}

In Python, il dizionario è un oggetto della classe dict incorporata . Possiamo verificarlo con la funzione type().

> type({1:'one', 2:'two', 3:'three'})
<class 'dict'>

I dizionari sono racchiusi tra parentesi graffe ({ }) e i valori possono essere assegnati e accessibili utilizzando parentesi quadre ([]).

Esempio di tipo di dati del dizionario
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print (dict['one']) # Prints value for 'one' key
print (dict[2]) # Prints value for 2 key
print (tinydict) # Prints complete dictionary
print (tinydict.keys()) # Prints all the keys
print (tinydict.values()) # Prints all the values

Ciò produce il seguente risultato:

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

Il dizionario di Python non è una sequenza. È una raccolta di elementi ma ciascun elemento (coppia chiave:valore) non è identificato dall’indice posizionale come in stringa, elenco o tupla. Pertanto, l’operazione di suddivisione non può essere eseguita su un dizionario. Il dizionario è un oggetto mutabile, quindi è possibile eseguire azioni di aggiunta, modifica o eliminazione con la funzionalità corrispondente definita nella classe dict. Queste operazioni verranno spiegate in un capitolo successivo.

Tipo di dati insieme

Set è un’implementazione Python di set come definito in Matematica. Un set in Python è una raccolta, ma non è una raccolta indicizzata o ordinata come stringa, lista o tupla. Un oggetto non può apparire più di una volta in un insieme, mentre in List e Tuple lo stesso oggetto può apparire più di una volta.

Gli elementi separati da virgole in un set vengono inseriti tra parentesi graffe o graffe {}. Gli elementi nella raccolta di set possono avere tipi di dati diversi.

> {2023, "Python", 3.11, 5+6j, 1.23E-4}
{(5+6j), 3.11, 0.000123, 'Python', 2023}

Tieni presente che gli elementi della raccolta di set potrebbero non seguire lo stesso ordine in cui sono stati inseriti. La posizione degli elementi è ottimizzata da Python per eseguire operazioni su un insieme definito in matematica.

Set di Python è un oggetto della classe set incorporata , come può essere verificato con la funzione type().

> type({2023, "Python", 3.11, 5+6j, 1.23E-4})
<class 'set'>

Un set può memorizzare solo oggetti immutabili come numeri (int, float, complessi o bool), stringhe o tuple. Se provi a inserire una lista o un dizionario nella raccolta set, Python solleva un TypeError .

> {['One', 'Two', 'Three'], 1,2,3, (1.0, 2.0, 3.0)}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

L’hashing è un meccanismo informatico che consente la ricerca più rapida di oggetti nella memoria del computer. Solo gli oggetti immutabili possono essere sottoposti a hash .

Anche se un set non consente elementi mutabili, il set stesso è mutabile. Pertanto, le operazioni di aggiunta/eliminazione/aggiornamento sono consentite su un oggetto set, utilizzando i metodi nella classe set incorporata. Python ha anche un insieme di operatori per eseguire la manipolazione degli insiemi. I metodi e gli operatori sono spiegati negli ultimi capitoli

Esempio di insieme
set1 = {123, 452, 5, 6}
set2 = {'Java', 'Python', 'JavaScript'}

print(set1)
print(set2)

Ciò genererà il seguente output:

{123, 452, 5, 6}
{'Python', 'JavaScript', 'Java'}

Tipo di dati booleano

Il tipo booleano Python è uno dei tipi di dati incorporati che rappresenta uno dei due valori True o False . La funzione Python bool() ti consente di valutare il valore di qualsiasi espressione e restituisce True o False in base all’espressione.

Un numero booleano ha solo due valori possibili, rappresentati dalle parole chiave True e False . Corrispondono rispettivamente al numero intero 1 e 0.

> type (True)
<class 'bool'>
> type(False)
<class 'bool'>
Esempio di tipo di dati booleano

Di seguito è riportato un programma che stampa il valore delle variabili booleane a e b:

a = True
# display the value of a
print(a)

# display the data type of a
print(type(a))

Ciò produrrà il seguente risultato:

true
<class 'bool'>

Di seguito è riportato un altro programma che valuta le espressioni e stampa i valori restituiti:

# Returns false as a is not equal to b
a = 2
b = 4
print(bool(a==b))

# Following also prints the same
print(a==b)

# Returns False as a is None
a = None
print(bool(a))

# Returns false as a is an empty sequence
a = ()
print(bool(a))

# Returns false as a is 0
a = 0.0
print(bool(a))

# Returns false as a is 10
a = 10
print(bool(a))

Ciò produce il seguente risultato:

False
False
False
False
False
True

Conversione del tipo di dati Python

A volte potrebbe essere necessario eseguire conversioni tra i tipi di dati integrati. Per convertire i dati tra diversi tipi di dati Python, usi semplicemente il nome del tipo come funzione.

Esempio

Di seguito è riportato un esempio che converte valori diversi rispettivamente in valori interi, in virgola mobile e stringa:

print("Conversion to integer data type")
a = int(1) # a will be 1
b = int(2.2) # b will be 2
c = int("3.3") # c will be 3

print (a)
print (b)
print (c)

print("Conversion to floating point number")
a = float(1) # a will be 1.0
b = float(2.2) # b will be 2.2
c = float("3.3") # c will be 3.3

print (a)
print (b)
print (c)

print("Conversion to string")
a = str(1) # a will be "1"
b = str(2.2) # b will be "2.2"
c = str("3.3") # c will be "3.3"

print (a)
print (b)
print (c)

Ciò produce il seguente risultato:

Conversion to integer data type
1
2
3
Conversion to floating point number
1.0
2.2
3.3
Conversion to string
1
2.2
3.3

Letture Correlate

Ercole Palmeri

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.