Vai al contenuto

Python/Tipi di Dati

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Tipi di dato

[modifica | modifica sorgente]

I tipi di dato messi a disposizione da Python sono i seguenti:

  • Semplici:
  • Sequenze:
    • immutabili:
      • stringhe (str),
      • tuple (tuple),
      • insiemi immutabili (frozenset)
    • mutabili:
      • liste (list),
      • dizionari (dict)
      • insiemi (set)
      • file (file)

Alcune osservazioni:

  • Gli interi lunghi sono arbitrariamente grandi.
  • I valori booleani sono: True e False.
  • Per motivi di efficienza e di architettura del linguaggio le stringhe sono immutabili, cosicché qualsiasi operazione che in qualche modo potrebbe alterare una stringa (come ad esempio la sostituzione di un carattere) restituirà invece una nuova stringa.
  • Le liste sono degli array dinamici che possono contenere dati di qualunque tipo.
  • Le tuple sono come le liste ma sono immutabili.
  • I dizionari contengono coppie di oggetti chiave-valore; possono essere visti come degli array indicizzati invece che da interi, da un qualunque oggetto immutabile. La chiave deve infatti essere un oggetto immutabile.
  • Gli insiemi sono contenitori non ordinati di oggetti non ripetuti.

Essendo Python a tipizzazione dinamica, tutte le variabili sono in realtà semplici puntatori ad oggetto (reference), sono gli oggetti invece ad essere dotati di tipo. Ad esempio un identificatore collegato ad un intero, un istante dopo può essere collegato ad una stringa o ad un array.

In Python c'è un forte controllo dei tipi a runtime. Si ha conversione implicita solo per i tipi numerici, per cui si può ad esempio moltiplicare un numero complesso per un intero, ma non c'è conversione implicita tra altri tipi, ad es. numeri e stringhe.

Nel seguente programma ci sono delle funzioni che operano conversioni di tipo.

def elementidiversi(sequenza):
    """Restituisce il numero di elementi diversi contenuti in sequenza."""
    return len(set(sequenza))

def cifre(numero):
    """Restituisce la lista delle cifre di un numero."""
    return [int(c) for c in str(numero)]

def divisibilepertre(num):
    """Implementa il criterio di divisibilità per 3."""
    return sum(cifre(num)) % 3 == 0

def cambiabase(n, b):
    """Restituisce una stringa che rappresenta n in base b."""
    if n==0:
        return ""
    else:
        n, r = divmod(n, b)
        return cambiabase(n, b) + str(r)

def test():
    lista=[1, 3, 2, 1, 1, 3, 4, 2, 3]
    print("Nella lista %s ci sono %s elementi diversi\n" %
          (lista, elementidiversi(lista)))
    stringa="ambarabacicicoco"
    print("Nella stringa %s ci sono %s elementi diversi\n" %
          (stringa, elementidiversi(stringa)))
    n=65127842
    print("Le cifre di %s sono contenute nella lista: %s\n" %
          (n, cifre(n)))
    numeri=(6327432954857463849473273838, 7584658546432562651111111156)
    for n in numeri:
        print("%s è divisibile per 3: %s\n" % (n, divisibilepertre(n)))
    n=128
    for base in (2, 3, 4):
        print("%s in base %s è: %s" % (n, base, cambiabase(n, base)))


test()