Entriamo adesso nel vivo del corso conoscendo gli strumenti per mettere le mani in pasta nel mondo AI.
Come mai Python è così usato in ambito AI?
Python è il linguaggio “eletto” per il mondo AI per vari motivi. In primis si tratta di un linguaggio che eccelle in calcoli, statistiche, data analysis; in seconda battuta è stato scelto fin dalle prime fasi di vita del Machine Learning, per cui, man mano che i progetti prendevano piede, nascevano librerie e community di supporto.
Sono proprio librerie come NumPy, Pandas, SciPy, PyTorch e TensorFlow che, svolgendo gran parte del lavoro in C/C++ o CUDA, mettono a disposizione strumenti oggi fondamentali.
Semplificando, possiamo dire che Python si è fatto trovare pronto, al posto giusto nel momento giusto e ne ha ricavato una seconda giovinezza, dopo anni in cui era già stato ampiamente utilizzato in ambito scientifico, sistemistico e web, ma non in modo così popolare. Non è da trascurare il fatto che abbia una sintassi molto semplice.
Quale è la sintassi base di Python?
Per eseguire istruzioni Python va installato l’apposito interprete, presente di default in molte distro Linux. Vediamo qualche esempio sintattico, paragonandolo a PHP, così da capire la differenza.
Partiamo da un ciclo che scorre un array associativo: in PHP possiamo agevolmente eseguire
$utente = [
"nome" => "Mario",
"cognome" => "Rossi",
"email" => "mario.rossi@example.com"
];
foreach ($utente as $chiave => $valore) {
echo $chiave . ": " . $valore . "\n";
}
In Python la sintassi è simile:
utente = {
"nome": "Mario",
"cognome": "Rossi",
"email": "mario.rossi@example.com"
}
for chiave, valore in utente.items():
print(f"{chiave}: {valore}")
Una differenza essenziale è che in Python l’indentazione fa parte del codice. Non ci sono le parentesi graffe a delimitare il ciclo for: c’è l’indentazione (spazi o tabulazioni che siano, preferibili i fatidici 4 spazi).
Come si usano le classi in Python?
Vediamo un esempio di una classe in PHP:
class Utente {
private $nome;
public function __construct($nome) {
$this->nome = $nome;
}
public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}
}
// utilizzo
$u = new Utente("Mario");
echo $u->getNome();
$u->setNome("Luca");
echo $u->getNome();
Con Python:
class Utente:
def __init__(self, nome):
self.nome = nome
def get_nome(self):
return self.nome
def set_nome(self, nome):
self.nome = nome
# utilizzo
u = Utente("Mario")
print(u.get_nome())
u.set_nome("Luca")
print(u.get_nome())
Nei metodi di istanza il primo parametro è convenzionalmente chiamato self e rappresenta l’oggetto stesso. L’esempio è puramente didattico; in realtà con Python si preferisce evitare get() e set() ed esporre attributi tramite property.
class Utente:
def __init__(self, nome):
self._nome = nome
@property
def nome(self):
return self._nome
@nome.setter
def nome(self, valore):
self._nome = valore
# utilizzo
u = Utente("Mario")
print(u.nome)
u.nome = "Luca"
print(u.nome)
Come lavora Python con vettori e matematica?
Come vedete, se avete già dimestichezza con altri linguaggi non è difficile passare a Python. Quando si ha a che fare con liste, vettori e matematica, Python mette in campo l’artiglieria pesante. Ecco un esempio:
nomi = ["Mario", "Luca"]
eta = [30, 25]
for nome, anni in zip(nomi, eta):
print(nome, anni)
Stampa in parallelo gli elementi delle due liste. In PHP normalmente si utilizzerebbe un ciclo che sfrutta l’indice degli array oppure funzioni dedicate come array_map().
Oppure guardate cosa si può fare scorrendo una lista:
numeri = [1, 2, 3, 4]
doppi = [x * 2 for x in numeri]
Elegante e compatto.
Python offre numerose funzioni built-in e, soprattutto, librerie specializzate che semplificano enormemente il lavoro con dati numerici. Quello che vi consiglio è di guardare il codice di qualche progetto AI e, man mano che scorrete il listato, lavorare di reference (o ChatGPT, come preferite).