È uscito il Corso Java Completo
Torna al blog

Cos'è Python e a cosa serve

Cos'è Python, come funziona l'indentazione come sintassi, dove domina davvero tra dati e automazione, i suoi limiti reali e gli ambienti virtuali.

Edoardo Midali

Edoardo Midali

Developer · Content Creator

8 min di lettura

Senti nominare Python ovunque: intelligenza artificiale, analisi dati, script che fanno il lavoro noioso al posto tuo. Poi apri un file e vedi codice senza parentesi graffe e senza punto e virgola, e ti chiedi se manchi qualcosa. In questo articolo trovi cos'è Python davvero, come funziona quella sintassi, dove è la scelta giusta e dove non lo è.

Cos'è

Python è un linguaggio interpretato a tipizzazione dinamica, progettato perché il codice sia facile da leggere: i blocchi si delimitano con l'indentazione invece che con simboli.

Nato nel 1991 dalle mani di Guido van Rossum, oggi è il linguaggio più insegnato al mondo e quello su cui è costruito quasi tutto l'ecosistema del machine learning.

Il resto della famiglia dei linguaggi, e le distinzioni generali tra compilati e interpretati, li trovi in tutti i linguaggi di programmazione.

L'indentazione è sintassi, non stile

Questa è la cosa che sorprende chiunque arrivi da un altro linguaggio, ed è il cuore del carattere di Python.

In quasi tutti i linguaggi gli spazi all'inizio della riga sono cosmetica: servono a te che leggi, il computer li ignora. In Python sono parte della grammatica. Un blocco di codice è definito dal fatto che è rientrato rispetto alla riga sopra.

def controlla_eta(eta):
    if eta >= 18:
        print("Maggiorenne")
        return True
    else:
        print("Minorenne")
        return False

Non c'è nessuna parentesi graffa che apre o chiude. I due punti annunciano che sta per iniziare un blocco, e il rientro dice dove quel blocco finisce.

La conseguenza pratica è che il codice mal indentato non è brutto: è rotto. Sposta una riga di quattro spazi e cambi il significato del programma.

# Questo stampa "Fine" una volta sola
for i in range(3):
    print(i)
print("Fine")

# Questo lo stampa tre volte
for i in range(3):
    print(i)
    print("Fine")

Sembra una costrizione e in parte lo è. Ma il risultato è che tutto il codice Python del mondo ha lo stesso aspetto: non esistono le discussioni su dove mettere le parentesi, perché non ci sono parentesi. È questo, più della sintassi vicina all'inglese, che rende Python leggibile.

L'errore da conoscere fin dal primo giorno: non mescolare mai tabulazioni e spazi. Visivamente sono identici, per l'interprete no, e ottieni un IndentationError su una riga che a occhio è perfetta. La convenzione è quattro spazi, e ogni editor decente può convertirli per te.

Dove Python domina davvero

Qui serve onestà: Python non domina i dati e l'intelligenza artificiale per meriti tecnici del linguaggio. Domina perché le librerie sono lì.

Negli anni Duemila la comunità scientifica ha iniziato a usarlo per gli script di laboratorio. Sono nate NumPy e pandas. Poi chi faceva machine learning ha costruito sopra quelle. Oggi ogni nuovo strumento del settore esce prima per Python, e chi vorrebbe usare altro deve aspettare o riscriversi tutto. È un effetto valanga, non un teorema.

Analisi dati. pandas gestisce tabelle con milioni di righe con poche righe di codice:

import pandas as pd

vendite = pd.read_csv("vendite.csv")
per_regione = vendite.groupby("regione")["importo"].sum()
print(per_regione.sort_values(ascending=False).head(5))

Machine learning. PyTorch, TensorFlow, scikit-learn, Hugging Face: l'intera filiera parla Python. La differenza tra questi strumenti e i framework veri e propri è in cos'è una libreria.

Automazione e scripting. Rinominare tremila file, leggere una casella email, compilare un report ogni lunedì. È il terreno dove Python ripaga il tempo investito più in fretta di qualunque altro — il percorso pratico è in automatizzare task con Python.

Web. Django porta con sé tutto (autenticazione, pannello di amministrazione, ORM per il database) ed è la scelta per applicazioni strutturate. Flask è minimale e ti lascia scegliere ogni pezzo. FastAPI è il più recente ed è oggi la via più diretta per esporre una REST API:

from fastapi import FastAPI

app = FastAPI()

@app.get("/utenti/{user_id}")
def leggi_utente(user_id: int):
    return {"id": user_id, "nome": "Marco"}

La differenza tra questi strumenti è spiegata in cos'è un framework.

I limiti, detti chiaramente

È lento. Rispetto a un linguaggio compilato, di un fattore che va da dieci a cento volte a seconda del carico. Nella pratica conta meno di quanto sembri, perché le librerie pesanti (NumPy, pandas) hanno il motore scritto in C: Python le orchestra, non fa i calcoli. Ma se scrivi tu un ciclo su dieci milioni di elementi, lo senti.

Il GIL. Il Global Interpreter Lock è un blocco che permette a un solo thread per volta di eseguire codice Python, anche se hai otto core. Significa che il multithreading in Python non ti dà parallelismo sul calcolo: ti dà concorrenza sull'attesa. Se i tuoi thread aspettano risposte di rete o letture da disco, funziona benissimo. Se devono macinare numeri, non guadagni nulla e devi usare processi separati (multiprocessing) invece dei thread. Le versioni recenti stanno introducendo una modalità sperimentale senza GIL, ma non è ancora la normalità.

Non è un linguaggio da mobile. Esistono progetti per portarlo su iOS e Android, ma nessuno che useresti su un'app vera.

Non gira nel browser. Lì passi da JavaScript, e non c'è modo di aggirarlo.

PythonQuando conta
Velocità di scritturaMolto altaPrototipi, script, analisi
Velocità di esecuzioneBassaCalcolo intensivo puro
Parallelismo su CPULimitato dal GILElaborazioni multicore
Ecosistema dati/AIIl migliore che esistaQualsiasi cosa tocchi i dati
Mobile e browserNon adattoApp native, frontend

Gli ambienti virtuali: il primo scoglio vero

Questo è il punto dove si arena chi inizia, e non è un dettaglio da sviluppatori esperti.

Quando fai pip install pandas senza precauzioni, quella libreria finisce nell'installazione globale di Python, condivisa da tutto il sistema. Funziona finché hai un progetto solo. Poi ne apri un secondo che ha bisogno di una versione diversa della stessa libreria, la installi, e il primo progetto smette di funzionare. Su Linux e macOS c'è anche il rischio di toccare il Python che usa il sistema operativo per i fatti suoi.

Un ambiente virtuale è una cartella che contiene una copia isolata di Python e delle sue librerie, valida solo per quel progetto.

python -m venv .venv          # crea l'ambiente
source .venv/bin/activate     # attivalo (Linux/macOS)
.venv\Scripts\activate        # attivalo (Windows)

pip install pandas fastapi
pip freeze > requirements.txt # registra le versioni esatte

Quando l'ambiente è attivo, il prompt mostra (.venv) davanti. Se non lo vedi, stai installando nel posto sbagliato.

La regola: un ambiente virtuale per progetto, sempre, dal primo giorno. Il file requirements.txt serve a chiunque (incluso il te di sei mesi dopo) per ricostruire le stesse identiche versioni con pip install -r requirements.txt. Aggiungi .venv/ al .gitignore — l'ambiente non si versiona, si ricrea. Se Git ti è ancora nebuloso, è il momento di guardarlo.

Strumenti più recenti come uv e poetry fanno la stessa cosa in modo più comodo, ma il concetto da capire è questo.

Altri errori che fanno perdere ore

Chiamare un file random.py o email.py. Python importa il tuo file invece della libreria standard con quel nome, e l'errore che ottieni non ti dice minimamente cosa è successo.

Le liste come valore predefinito di un parametro. def aggiungi(voce, lista=[]) crea la lista una volta sola, alla definizione della funzione: le chiamate successive si ritrovano dentro i dati delle precedenti. La forma corretta è lista=None e poi if lista is None: lista = [].

Confondere = e ==. Vale ovunque, ma in Python il primo dentro un if è un errore di sintassi netto, il che è una fortuna.

Copiare una lista con nuova = vecchia. Non la copia: crea un secondo nome per lo stesso oggetto. Modifichi una, cambia l'altra. Serve vecchia.copy().

In sintesi

Python è interpretato, dinamico, e usa l'indentazione come sintassi: i blocchi si definiscono con gli spazi, non con le parentesi. È una regola rigida che produce codice uniforme e leggibile ovunque.

Dove domina — dati, machine learning, automazione — vince grazie all'ecosistema di librerie, non a superiorità tecniche del linguaggio. Sul web c'è ed è solido, con Django, Flask e FastAPI.

I limiti sono reali: è lento rispetto ai compilati, il GIL gli impedisce il parallelismo vero sul calcolo, e su mobile e browser non è una opzione.

La cosa da fare bene dal primo giorno è l'ambiente virtuale. Un pip install globale è il modo più rapido per rompersi i progetti da soli.

Se vuoi impararlo, il percorso è in imparare Python da zero. Se sei indeciso tra Python e l'altro grande candidato, il confronto è in Python o JavaScript. Per collocarlo tra gli altri, la mappa completa è in tutti i linguaggi di programmazione.