< Home
Stampa

Introduzione a Python

Sommario

Python è un linguaggio di programmazione multiparadigma, ovvero supporta la programmazione strutturata (condizioni, cicli, strutture dati, funzioni parametriche, ricorsione, ecc.) sia quella ad oggetti (classi, ereditarietà, incapsulamento) che quella funzionale (funzioni stateless, currying, closures, ecc.).

Python è stato creato da Guido Van Rossum, nel 1991, ed il nome deriva dai Monty Python. I suoi principi di funzionamento sono:

  • essere facile da imparare, almeno fino ad un certo livello;
  • avere un livello di astrazione molto alto;
  • essere un linguaggio espressivo che consente di fare più cose nella stessa linea di codice;
  • essere un linguaggio ad alta leggibilità, anche per un non programmatore (anche se questo dipende dall’algoritmo e soprattutto dal programmatore che lo ha scritto);
  • essere distribuito “pile incluse“, ovvero la libreria standard contiene molte più funzioni già pronte rispetto alla maggior parte degli altri linguaggi.
  • essere mutipiattaforma: il codice Python viene eseguito da un interprete presente nei maggiori sistemi operativi, senza modifiche.

Python è un linguaggio generalista, ed utilizzato principalmente per:

  • tutti i settori di analisi e scienza dei dati;
  • intelligenza artificiale, machine learning e deep learning;
  • sviluppo del backend dei siti web;
  • automazione in ambito IT (progettazione e manutenzione sistemi informatici) e cybersecurity
  • ricerca scientifica

Ambienti di sviluppo

Python dispone di molte modalità di esecuzione.

Script

Sul proprio computer occorre installare Python (https://www.python.org/downloads/ ) e un ambiente di sviluppo (VS Code) https://code.visualstudio.com. In alternativa si può utilizzare onlinegdb.

In entrambi i casi abbiamo un ambiente di sviluppo ed esecuzione, dove creare ed eseguire script (file di testo con estensione .py). Ad esempio:

name = input("Inserisci il tuo nome: ")
print("Ciao " + name)

Salviamo (in locale) il file come main.py e lo eseguiamo da linea di comando con:

>python3 main.py 
Inserisci il tuo nome: Cipiaceinfo
Ciao Cipiaceinfo

Come si vede per eseguire uno script Python si usa l’interprete python3 (versione corrente del linguaggio).

CLI

Possiamo poi scrivere codice Python anche in modalità CLI (Command line interface):

python3 
Python 3.14.7 (... ) 
Type "help", "copyright", "credits" or "license" for more information.
>>> name = input("Inserisci il tuo nome: ")
Inserisci il tuo nome: Cipiaceinfo
>>> print("Ciao " + name)
Ciao Cipiaceinfo
>>> 

Come si vede le istruzioni sono inserite come se fossero comandi in linea, che vengono eseguiti subito. I comandi successivi “ricordano” le azioni fatte in precedenza (quindi variabili inserite, memorizzate, ecc.). Questa modalità è molto utile per testare singoli blocchi di istruzioni per capire come funziona Python.

Notebook

La terza modalità è il notebook. Il notebook è una pagina web interattiva dove il programmatore scrive dentro blocchi di codice porzioni di script che poi possono essere subito eseguite e sempre in pagina viene mostrato il risultato. Il programmatore poi può inserire nuovi blocchi (che come nella modalità CLI, ricordano il codice precedentemente eseguito) e costruire quindi applicazioni all’interno della pagina web.

E’ importante capire che in questo caso la pagina web mostra il codice ed i risultati, ma il codice non viene realmente eseguito nella pagina web, ma sul server che invia alla pagina i risultati. Il server può essere anche nello stesso pc, oppure su Internet. Si tratta quindi di un meccanismo simile a quello già visto su OnlineGDB, con la differenza che mentre OnlneGDB si comporta come un editor di script, nella modalità notebook c’è una interazione codice -> esecuzione -> nuovo codice -> nuova esecuzione e rimane traccia di tutta la storia di costruzione del nostro programma, che rimane nella stessa pagina. Questo ci consente di creare il nostro programma un pezzo alla volta, e di avere subito i risultati della parte già creata.

Il notebook è salvato in un unico file, in formato .ipynb, che può quindi anche essere condiviso e scaricato ed essere eseguiti sul proprio pc locale o su un server remoto. Nelle nostre prove ad esempio useremo Google Colab, una piattaforma gratuita che consente di creare Notebooks online.

La modalità Notebook è particolarmente utile per l’apprendimento del linguaggio, ma è utilizzata a livello anche professionale soprattutto per sfruttare ambienti online già pronti per la data science e l’intelligenza artificiale.

Concetti fondamentali

Uno script Python è composto da istruzioni una riga per volta. Non bisogna mettere il punto e virgola alla fine. Le istruzioni possono ad esempio essere dichiarazioni e/o assegnazioni di variabili, operazioni condizionali, parte di un blocco di istruzioni da esegue in modo condizionale o ciclicamente, ecc. Insieme costituiscono un programma che di norma consiste nell’elaborazione automatica di un input proveniente dall’utente, da file o database presenti nel computer, da fonti prese su Internet, o una combinazione di questi, e produce una elaborazione sempre verso canali come output utente, file, database o Internet.

Alla base di Python c’è il concetto di variabile, contenitore che può rappresentare un numero, una stringa, una lista o altra struttura dati e che serve per memorizzare i dati elaborati per la loro successiva rielaborazione. La variabile viene dichiarata con un nome e le viene assegnato un valore tramite una espressione

x = 5 #number
testo = "ciao come va?" #string
scelta = True #boolean
valore = None #variabile vuota

Come si vede il tipo di dato non viene dato esplicitamente: è Python che capisce, dal valore, il tipo di variabile.

Sono poi previste 4 strutture dati fondamentali: liste, tuple, dizionari, insiemi:

mylist = [1,2,3,4,5] # elenco di valori ordinato e modificabile
mytuple = (6,4,2) # elenco di valori ordinato ma immutabile
myset = {5, 12, 8} # elenco di valori non ordinato, modificabile ma con valori unici
mydict = {"nome": "Mario", "cognome": "Rossi"} # elenco di coppie chiave/valore

print(mylist[2]) # stampa 3 (l'indice parte da 0)
print(mytuple[1]) # stampa 4
print(myset) # stampa gli elementi dell'insieme (non necessariamente in ordine)
print(mydict["nome"]) # stampa "Mario

Una volta definite le variabili esse possono essere elaborate non solo con funzioni di calcolo, ma anche tramite logica ad esempio con istruzioni condizionali:

if mylist[3] > 2:
   print(f"{mia_lista[3]} è maggiore di 2")

Come si vede il codice condizionale if è eseguito solo se la condizione indicata è vera: esso va scritto in istruzioni che vanno indentate (tramite tabulazione) in modo da mostrare visivamente che dipendono dall’istruzione condizionale.

Python prevede poi l’esecuzione di cicli, ovvero blocchi di istruzioni, fino a quando non si verifica una condizione:

i=0
while i < 3:
   print(i)
   i=i+1 

While funziona quindi come if, ma mentre if viene eseguito una volta sola, while viene ripetuto finché la condizione non diventa falsa. Come si vede nel ciclo l’indice i viene incrementato ad ogni esecuzione del blocco.

E’ possibile scorrere gli elementi di una lista con il ciclo for:

list = [1,2,3,4,5]
for element in list:
   print(element)

In questo caso for scorre ogni elemento della lista ed esegue il blocco assegnando alla variabile element il valore dell’elemento corrente. Non c’è una condizione: il ciclo finisce quando finisce la lista.

E’ infine possibile definire delle funzioni personalizzate per svolgere compiti specifici:

def somma(a, b): 
   return a+b

print(somma(3,5)) # stampa 8
print(somma(7,3)) # stampa 21

Def quindi serve per dichiarare una funzione a cui diamo un nome e che può ricevere dei parametri. La funzione poi viene richiamata in altre parti del programma passandole dei valori e viene eseguita.

Possiamo unire alcuni di questi concetti per scrivere il nostro primo programma Python:

# PROGRAMMA: somma i valori di una lista

# --- funzione somma
def somma(numeri):
    risultato = 0

    # Ciclo for: itera su ogni elemento della lista
    for numero in numeri:
        risultato = risultato + numero

    return risultato

# --- Codice principale

lista = [3, 8, 5, 12, 7, 4, 9]

print("--- Lista originale ---")
print(lista)

risultato = somma(lista)
print("\n--- Somma ---")
print(risultato)

Conclusioni

Prima di entrare nel dettaglio del funzionamento di Python, cerchiamo di capire i suoi punti di forza e di debolezza.

Punti di forza

  • è pensato per l’elaborazione dati: già con le sue istruzioni native e la sua libreria standard consente di creare applicazioni che elaborano in modo efficace liste o dizionari.
  • in Python il programmatore non si deve preoccupare di assegnare un tipo alle variabili, la gestione è totalmente automatica (ma c’è e viene effettuata durante l’esecuzione).
  • il codice di Python come vedremo è molto espressivo e consente di svolgere anche con una sola istruzione operazioni che in altri linguaggi richiedono blocchi di 3-4 istruzioni. Questo rende il codice non solo compatto ma molto leggibile, esplicito e naturale, specie per i non informatici: in questo senso è stato coniato il termine “pitonico” per indicare il particolare stile di coding noto per la sua leggibilità ed espressività.
  • sono disponibili librerie e framework per svolgere moltissime operazioni: elaborazione di grandi strutture dati, creazione di server per il web e per i dati, integrazione coi database, comunicazione su internet, automazione ed hacking, intelligenza artificiale, ecc. tutte che usano la stessa filosofia di base del linguaggio.
  • Python è multipiattaforma, inoltre può garantire isolamento dal sistema operativo, con ambienti dedicati. Questo consente di essere eseguito in modo indipendente dalla macchina sottostante.

In sintesi con Python si trovano a proprio agio sia il programmatore esperto, sia il data scientist, l’analista finanziario, il sistemista, il ricercatore, ecc. grazie alla sua semplicità e produttività nel breve termine, senza però avere un linguaggio “depotenziato” nelle sue possibilità.

Questo spiega perché Python ha una comunità di programmatori enorme, e questo consente di avere supporto su qualsiasi argomento, creando quindi un circolo virtuoso che avvicina nuovi appassionati e rende Python uno dei linguaggi in maggior crescita attualmente.

Infine, c’è l’intelligenza artificiale. In questo caso Python è di fatto l’unico linguaggio che consente in modo semplice, insieme a Javascript, di utilizzare nativamente librerie e modelli di reti neurali nelle proprie applicazioni. E sebbene esistano anche soluzioni in altri linguaggi, è lo standard de facto nella creazione di modelli di intelligenza artificiale diventando quasi una scelta obbligata in quel settore.1

Punti di debolezza

Esistono tuttavia dei limiti, non sempre immediatamente visibili, che però vanno considerati:

  • la facilità del linguaggio riduce le competenze di base di chi vuole capire il Coding: lo stile pitonico non consente al neofita di comprendere come funziona realmente l’algoritmo sottostante. Questo costituisce una grossa limitazione per uno studente che impara Python come primo linguaggio: sarà costretto a reimparare parecchie cose da zero quando passerà a Java, C# o Javascript.
  • Python è multipiattaforma, ma non è nativo su due piattaforme fondamentali: il browser web ed il mobile, dove è necessario usare altri linguaggi. In questo senso è preferibile Javascript o linguaggi mobile come Kotlin o Swift.
  • La gestione automatica dei tipi delle variabili diventa uno svantaggio per le applicazioni molto complesse, perché il controllo a runtime aumenta enormemente i tempi di sviluppo. Per questo per le grandi applicazioni è preferibile usare C# o Java.
  • il codice Python è molto lento, circa 10 volte rispetto a Javascript, e di 100 volte rispetto a C++. Questo lo rende inadatto a tutte le applicazioni realtime (ad es. videogiochi, sistemi operativi, ecc.) anche se questo aspetto è mitigato quando vengono usate librerie esterne (di norma scritte in C++) dove la velocità è quasi pari a quella del C++ (essendo appunto usato codice C++).
  • il codice e le variabili Python occupano molta memoria: la semplicità viene al prezzo di una occupazione di memoria molto maggiore, che lo rende inadatto anche ai sistemi embedded (IoT e demotica).
  • Senza librerie dedicate, Python non consente l’esecuzione di calcolo puro parallelo2: di fatto nella realtà Python dispone di ottime librerie esterne per il calcolo (scritte in Rust o C++), quindi questa limitazione può essere aggirata.

In conclusione vale sempre la massima “usa lo strumento giusto per il contesto giusto”. Python è lo strumento giusto per:

  • creare applicazioni di elaborazioni dati e data science;
  • creare applicazioni di intelligenza artificiale;
  • è ottimo per creare server Web e Server API;
  • va benissimo per creare script di automazione e per l’hacking;
  • è perfetto per chi non fa dell’informatica una professione.

  1. In realtà anche C++, JavaScript/Typescript e C# hanno ecosistemi AI. ↩︎
  2. Il multithreading è limitato per calcoli CPU, ma non per l’accesso a I/O come file ed Internet. ↩︎