Introduzione ai Tipi di Dato in Python

Cosa sono i tipi di dato in Python

Un tipo di dato è un modello astratto che definisce come rappresentare, interpretare e manipolare un’informazione all’interno di un programma. Ogni tipo di dato è caratterizzato da:

  • un sistema di codifica, che determina come l’informazione viene memorizzata nella memoria del computer,
  • un insieme di valori possibili che il tipo può rappresentare,
  • un insieme di operazioni valide che possono essere applicate su quei valori (come somma, confronto, concatenazione, ecc.).

Perche sono importanti i tipi di dato?

I tipi di dato sono fondamentali perché:

  • determinano quanta memoria viene allocata per una variabile o un oggetto;
  • influenzano le prestazioni del programma, soprattutto nei calcoli numerici e nella gestione di grandi quantità di dati;
  • permettono al programma di distinguere i diversi significati dei dati (es. la stringa “3” è diversa dal numero intero 3);
  • definiscono le regole di compatibilità tra le variabili, evitando errori di tipo (ad esempio, non si può sommare un numero e una lista senza una conversione esplicita);
  • aiutano a scrivere codice più sicuro, leggibile e manutenibile, specialmente in progetti complessi.

Python Numeric Types

Tipi numerici di base

Python offre diversi tipi per rappresentare i numeri, adatti a vari contesti.

int

I numeri interi (int) vengono scritti senza parte decimale e possono essere positivi o negativi.

Per rendere più leggibili i numeri di grandi dimensioni, Python consente l’uso del carattere underscore _ come separatore delle migliaia. Ad esempio, un milione può essere scritto come 1_000_000, senza che ciò influenzi il valore numerico.
Esempi: -10, 0, 42

A differenza di molti altri linguaggi di programmazione, in Python non esiste un limite fisso alla lunghezza di un numero intero: si possono utilizzare anche numeri con un numero elevato di cifre, fino al limite della memoria disponibile sul computer.

Esempio:
numero = 1_000_000
print(numero) # Output: 1000000

grande_numero = 123456789123456789123456789
print(grande_numero) # Funziona senza problemi

float

I numeri reali, o floating-point, sono composti da una parte intera e una parte decimale, separate dal punto (.), come previsto dalla notazione anglosassone (in Python non si usa la virgola). Ad esempio, 2.71 rappresenta un’approssimazione del numero di Nepero (e).

È possibile omettere la parte intera o quella decimale, ma non entrambe. Python la sostituisce automaticamente con uno zero:

  • .5 equivale a 0.5
  • 2. equivale a 2.0

Python supporta anche la notazione scientifica, utile per rappresentare numeri molto grandi o molto piccoli:
Ad esempio:

  • 6.02e23 rappresenta 6.02×10236.02 \times 10^{23}6.02×1023, cioè il numero di Avogadro
  • 0.00032 può essere scritto come 3.2e-4

Limiti di precisione dei numeri float

I numeri reali in Python vengono rappresentati internamente secondo lo standard IEEE 754, che utilizza una rappresentazione binaria con precisione limitata. Questo significa che alcuni numeri decimali non possono essere rappresentati esattamente in memoria, portando a piccoli errori di arrotondamento.

Esempio:
print(0.1 + 0.2) # Output: 0.30000000000000004

Questo comportamento è normale nei linguaggi di programmazione e non è un errore di Python. Tuttavia, è importante tenerlo presente, soprattutto in applicazioni che richiedono alta precisione, come quelle finanziarie o scientifiche.
In questi casi, è consigliabile usare il tipo Decimal, che permette un controllo molto più preciso sui valori decimali.

complex

In Python, il tipo complex permette di rappresentare numeri complessi, cioè quei numeri formati da una parte reale e una parte immaginaria.

La parte immaginaria si indica con la lettera j (come in ingegneria elettrica), invece della i usata in matematica pura.

Esempio:
z = 3 + 4j # parte reale: 3, parte immaginaria: 4
z2 = -2.5j # solo parte immaginaria
z3 = 2 + 0j # solo parte reale

Tipi numerici avanzati (da moduli esterni)

Decimal

l tipo Decimal, disponibile nel modulo standard decimal, consente di rappresentare numeri decimali con precisione arbitraria.
È particolarmente utile per evitare gli errori di arrotondamento tipici del tipo float, che possono compromettere calcoli sensibili come quelli finanziari, scientifici o statistici.

Esempio:
from decimal import Decimal
prezzo = Decimal(“19.99”)

Vantaggi del tipo Decimal

  • Rappresentazione esatta dei decimali (es. 0.1, 0.3)
  • Nessuna perdita di precisione durante le operazioni
  • Possibilità di impostare la precisione desiderata
  • Comportamento più prevedibile nei confronti degli arrotondamenti e delle conversioni

Quando usare Decimal?

  • Quando la precisione decimale è essenziale (finanza, contabilità)
  • Per valori sensibili come imposte, sconti, interessi
  • Quando è importante evitare effetti cumulativi dovuti ad arrotondamenti

Fraction

l tipo Fraction, disponibile nel modulo standard fractions, rappresenta numeri razionali in forma di frazione esatta, cioè come rapporto tra un numeratore e un denominatore.
Questo tipo è utile quando è importante preservare l’esattezza matematica, ad esempio in ambito scolastico, matematico o in determinati algoritmi numerici.

Esempio:
from fractions import Fraction

a = Fraction(3, 4)
b = Fraction(“0.5”) # interpretabile da stringa
c = Fraction(5, 10) # viene automaticamente semplificata a 1/2

print(a + b) # Output: 5/4
print(c.numerator) # Output: 1
print(c.denominator) # Output: 2

Caratteristiche principali

  • Rappresenta i numeri senza approssimazioni decimali
  • Mantiene precisione esatta, anche in operazioni successive
  • Può essere creato da:
    interi: Fraction(3, 4)
    stringhe: Fraction(“0.75”)
    float (sconsigliato, vedi sotto)

Quando si usa Fraction?

  • Quando è fondamentale evitare errori di arrotondamento
  • In ambiti didattici, per mostrare calcoli frazionari precisi
  • In algoritmi matematici che lavorano con numeri razionali esatti (es. algebra simbolica)

Riepilogo

TipoDescrizioneEsempio
intNumeri interi10, -3
floatNumeri decimali3.14, -0.5
complexNumeri complessi2+5j
DecimalNumeri decimali ad alta precisioneDecimal (“1.1”)
FractionNumeri razionali (frazioni esatte)Fraction (2, 3)
error: Thank you for visiting! This content is protected. We appreciated your understanding.
Torna in alto