Articoli

Python Tutorial: Casting dei tipi di dati, cos’è e come si usa

Nella programmazione il type casting è la conversione di un oggetto di un tipo, in un altro tipo.

In questo articolo andremo a vedere il casting dei tipi nella programmazione Python.

Python Type Casting è un processo in cui convertiamo un oggetto di un tipo di dati in un altro tipo di dati. Python supporta due tipi di casting: 

  • implicito ed 
  • esplicito.

In Python ci sono diversi tipi di dati, come numeri, sequenze, dizionari ecc. Potrebbe esserci una situazione in cui hai a disposizione dati di un tipo ma vuoi usarli in un’altra forma. Ad esempio, l’utente ha immesso una stringa ma desideri utilizzarla come numero. Il meccanismo di casting del tipo di Python ti consente di farlo.

Casting implicito di Python

Quando un compilatore/interprete di un linguaggio converte automaticamente un oggetto di un tipo in un altro, si parla di casting automatico o implicito. Python è un linguaggio fortemente tipizzato. Non consente la conversione automatica del tipo tra tipi di dati non correlati. Ad esempio, una stringa non può essere convertita in alcun tipo di numero. Tuttavia, un numero intero può essere convertito in float. Altri linguaggi come JavaScript sono un linguaggio debolmente tipizzato, in cui un numero intero viene forzato in una stringa per la concatenazione.

Tieni presente che i requisiti di memoria di ciascun tipo di dati sono diversi. Ad esempio, un oggetto intero in Python occupa 4 byte di memoria, mentre un oggetto float necessita di 8 byte a causa della sua parte frazionaria. Pertanto, l’interprete Python non converte automaticamente un float in int , poiché ciò comporterebbe una perdita di dati. D’altra parte, int può essere facilmente convertito in float impostando la sua parte frazionaria a 0.

Il casting implicito di int in float avviene quando viene eseguita qualsiasi operazione aritmetica sugli operandi int e float .

Considera che abbiamo una variabile , int e una float

< a=10   # int object
< b=10.5 # float object

Per eseguire la loro addizione, 10 − l’oggetto intero viene aggiornato a 10.0. È un float, ma equivalente al suo valore numerico precedente. Ora possiamo eseguire l’addizione di due float.

< c=a+b
< print (c)
20.5

Nel cast di tipo implicito, un oggetto Python con dimensione in byte inferiore viene aggiornato per corrispondere alla dimensione in byte maggiore di un altro oggetto nell’operazione. Ad esempio, un oggetto booleano viene prima aggiornato a int e poi a float, prima dell’aggiunta con un oggetto a virgola mobile. Nell’esempio seguente, proviamo ad aggiungere un oggetto booleano in un float, tieni presente che True è uguale a 1 e False è uguale a 0.

a=True;
b=10.5;
c=a+b;

print(c);

Ciò produrrà il seguente risultato:

11.5

Casting esplicito di Python

Sebbene il casting automatico o implicito sia limitato alla conversione da int a float , è possibile utilizzare le funzioni integrate di Python int(), float() e str() per eseguire conversioni esplicite come da stringa a intero.

Funzione Python int()

La funzione incorporata int() di Python converte un oggetto letterale intero in un oggetto intero, un oggetto float in intero e una stringa in intero se la stringa stessa ha una rappresentazione letterale intera valida.

Usare int() con un oggetto int come argomento equivale a dichiarare direttamente un oggetto int .

<<< a = int(10)
<<< a
10

è uguale a −

<<< a = 10
<<< a
10
<<< type(a)
<class 'int>

Se l’argomento della funzione int() è un oggetto float o un’espressione in virgola mobile, restituisce un oggetto int. Ad esempio −

<<< a = int(10.5) #converts a float object to int
<<< a
10
<<< a = int(2*3.14) #expression results float, is converted to int
<<< a
6
<<< type(a)
<class 'int'>

Anche la funzione int() restituisce il numero intero 1 se viene fornito un oggetto booleano come argomento.

<<< a = int("100")
<<< a
100
<<< type(a)
<class 'int'>
<<< a = ("10"+"01")
<<< a = int("10"+"01")
<<< a
1001
<<< type(a)
<class 'int'>
Da stringa a intero

La funzione int() restituisce un intero da un oggetto stringa, solo se contiene una rappresentazione intera valida.

<<< a = int("100")
<<< a
100
<<< type(a)
<class 'int'>
<<< a = ("10"+"01")
<<< a = int("10"+"01")
<<< a
1001
<<< type(a)
<class 'int'>

Tuttavia, se la stringa contiene una rappresentazione non intera, Python solleva ValueError.

<<< a = int("10.5")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '10.5'
<<< a = int("Hello World")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'Hello World'

La funzione int() restituisce anche un numero intero da una stringa binaria, ottale ed esadecimale. Per questo la funzione necessita di un parametro di base che deve essere rispettivamente 2, 8 o 16. La stringa deve avere una rappresentazione binaria/ottale/esadecimale valida.

Da stringa binaria a intero

La stringa dovrebbe essere composta solo da 1 e 0 e la base dovrebbe essere 2.

<<< a = int("110011", 2)
<<< a
51

L’equivalente decimale del numero binario 110011 è 51.

Stringa ottale su intero

La stringa deve contenere solo da 0 a 7 cifre e la base deve essere 8.

<<< a = int("20", 8)
<<< a
16

L’equivalente decimale dell’ottale 20 è 16.

Stringa esadecimale su numero intero

La stringa dovrebbe contenere solo simboli esadecimali, ovvero 0-9 e A, B, C, D, E o F. La base dovrebbe essere 16.

<<< a = int("2A9", 16)
<<< a
681

L’equivalente decimale di esadecimale 2A9 è 681. Puoi verificare facilmente queste conversioni con l’app calcolatrice in Windows, Ubuntu o smartphone.

Di seguito è riportato un esempio per convertire numero, float e stringa nel tipo di dati intero:

a = int(1)     # a will be 1
b = int(2.2) # b will be 2
c = int("3") # c will be 3

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

Ciò produce il seguente risultato −

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.
1
2
3
Funzione Python float()

float () è una funzione incorporata in Python. Restituisce un oggetto float se l’argomento è un valore letterale float, un intero o una stringa con una rappresentazione in virgola mobile valida.

Usare float() con un oggetto float come argomento equivale a dichiarare direttamente un oggetto float

<<< a = float(9.99)
<<< a
9.99
<<< type(a)
<class 'float'>

è uguale a −

<<< a = 9.99
<<< a
9.99
<<< type(a)
<class 'float'>

Se l’argomento della funzione float() è un numero intero, il valore restituito è un punto mobile con la parte frazionaria impostata su 0.

<<< a = float(100)
<<< a
100.0
<<< type(a)
<class 'float'>

La funzione float() restituisce un oggetto float da una stringa, se la stringa contiene un numero in virgola mobile valido, altrimenti viene sollevata un’eccezione ValueError.

<<< a = float("9.99")
<<< a
9.99
<<< type(a)
<class 'float'>
<<< a = float("1,234.50")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '1,234.50'

Il motivo di ValueError qui è la presenza di virgole nella stringa.

Ai fini della conversione da stringa a float, è considerata valida anche la notazione scientifica di virgola mobile.

<<< a = float("1.00E4")
<<< a
10000.0
<<< type(a)
<class 'float'>
<<< a = float("1.00E-4")
<<< a
0.0001
<<< type(a)
<class 'float'>

Di seguito è riportato un esempio per convertire numero, float e stringa nel tipo di dati float:

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)

Ciò produce il seguente risultato −

1.0
2.2
3.3
Funzione Python str()

Abbiamo visto come un Python ottiene un numero intero o float dalla corrispondente rappresentazione di stringa. La funzione str() funziona al contrario. Racchiude un oggetto intero o float tra virgolette (‘) per restituire un oggetto str. La funzione str() restituisce la rappresentazione di stringa di qualsiasi oggetto Python. In questa sezione vedremo diversi esempi della funzione str() in Python.

La funzione str() ha tre parametri. Il primo parametro (o argomento) richiesto è l’oggetto di cui vogliamo la rappresentazione in stringa. Gli altri due operatori, codifica ed errori, sono facoltativi.

Eseguiremo la funzione str() nella console Python per verificare facilmente che l’oggetto restituito sia una stringa, con le virgolette racchiuse (‘).

Da intero a stringa

Puoi convertire qualsiasi numero intero in una stringa come segue:

<<< a = str(10)
<<< a
'10'
<<< type(a)
<class 'str'>
Da float a stringa

La funzione str() converte gli oggetti in virgola mobile con entrambe le notazioni di virgola mobile, notazione standard con un punto decimale che separa il numero intero e la parte frazionaria e la notazione scientifica in un oggetto stringa.

<<< a=str(11.10)
<<< a
'11.1'
<<< type(a)
<class 'str'>
<<< a = str(2/5)
<<< a
'0.4'
<<< type(a)
<class 'str'>

Nel secondo caso, viene fornita un’espressione di divisione come argomento alla funzione str(). Tieni presente che l’espressione viene prima valutata e poi il risultato viene convertito in stringa.

I punti mobili nelle notazioni scientifiche che utilizzano E o e e con potenza positiva o negativa vengono convertiti in stringhe con la funzione str().

<<< a=str(10E4)
<<< a
'100000.0'
<<< type(a)
<class 'str'>
<<< a=str(1.23e-4)
<<< a
'0.000123'
<<< type(a)
<class 'str'>

Quando viene inserita una costante booleana come argomento, viene racchiusa tra (‘) in modo che True diventi “True”. È inoltre possibile fornire argomenti alla funzione str() agli oggetti List e Tuple. La stringa risultante è la lista/tupla circondata da (‘).

<<< a=str('True')
<<< a
'True'
<<< a=str([1,2,3])
<<< a
'[1, 2, 3]'
<<< a=str((1,2,3))
<<< a
'(1, 2, 3)'
<<< a=str({1:100, 2:200, 3:300})
<<< a
'{1: 100, 2: 200, 3: 300}'

Di seguito è riportato un esempio per convertire number, float e string nel tipo di dati 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 −

1
2.2
3.3
Conversione di tipi di sequenza

List, Tuple e String sono i tipi di sequenza di Python. Sono raccolte ordinate o indicizzate di elementi.

Una stringa e una tupla possono essere convertite in un oggetto elenco utilizzando la funzione list() . Allo stesso modo, la funzione tuple() converte una stringa o un elenco in una tupla.

Prenderemo un oggetto per ciascuno di questi tre tipi di sequenza e studieremo la loro interconversione.

<<< a=[1,2,3,4,5]   # List Object
<<< b=(1,2,3,4,5) # Tupple Object
<<< c="Hello" # String Object

### list() separates each character in the string and builds the list
<<< obj=list(c)
<<< obj
['H', 'e', 'l', 'l', 'o']

### The parentheses of tuple are replaced by square brackets
<<< obj=list(b)
<<< obj
[1, 2, 3, 4, 5]

### tuple() separates each character from string and builds a tuple of characters
<<< obj=tuple(c)
<<< obj
('H', 'e', 'l', 'l', 'o')

### square brackets of list are replaced by parentheses.
<<< obj=tuple(a)
<<< obj
(1, 2, 3, 4, 5)

### str() function puts the list and tuple inside the quote symbols.
<<< obj=str(a)
<<< obj
'[1, 2, 3, 4, 5]'

<<< obj=str(b)
<<< obj
'(1, 2, 3, 4, 5)'

Pertanto la funzionalità di cast esplicito del tipo di Python consente la conversione di un tipo di dati in un altro con l’aiuto delle sue funzioni integrate.

Letture Correlate

Ercole Palmeri

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