Guida Python
Python è un linguaggio per la programmazione e lo scripting implementanto sotto licenza Open Source; una delle sue caratteristiche più rilevanti è quella di essere multi-purpose e multi-paradigma, questo significa che potrà essere utilizzato per scopi tra loro differenti e sfruttando diversi approcci per lo sviluppo delle applicazioni basate su di esso.
Per quanto riguarda gli ambiti di utilizzo di Python, lo si potrà impiegare sia per la creazione di software destinati all'installazione su terminale che per la realizzazione di soluzioni per il Web; dal punto di vista dei paradigmi di riferimento, esso si basa innanzitutto sulla programmazione orientata agli oggetti (paradigma Object Oriented), ma prevede anche costrutti derivanti dall'approccio funzionale e da quello imperativo.
Python è inoltre un linguaggio multi-piattaforma, è stato infatti concepito per poter essere impiegato su tutti i sistemi operativi più diffusi, Windows, distribuzioni basate sul Kernel Linux e (Mac) OS X. La sintassi di questo linguaggio, pensata per essere il più possibile essenziale, ricorda in parte quella di una soluzione come Perl, ma per la sua concezione sono stati utilizzati anche costrutti mediati da C, C++ e Java; da parte sua, invece, Python ha influenzato in vario modo la progettazione di altri linguaggi ampiamente utilzzati, e spesso destinati a contesti differenti, come Java, Ruby e addirittura Swift, strumento creato di recente da Apple per la creazione di applicazioni destinate a iOS e il già citato (Mac) OS X.
Python mette a disposizione dello sviluppatore un sistema automatizzato per la gestione della memoria, ciò limita il verificarsi di fenomeni legati all'overhead, con un conseguente risparmio sulle richieste di risorse accessorie, e il verificarsi di memory leak (o fuoriuscite di memoria) per evitare livelli di consumo eccessivi nell'esecuzione degli script. A ciò si aggiunga la presenza di una libreria integrata concepita per migliorare la produttività e un meccanismo avanzato per la gestione delle eccezioni, cioè gli esiti imprevisti, in alcuni casi veri e propri errori, derivanti dall'esecuzione delle applicazioni.
A differenza di alcune delle alternative disponibili, Python si caratterizza inoltre per il fatto di essere un linguaggio semplice da imparare permettendo anche agli sviluppatori alle prime armi di diventare rapidamente operativi per l'implementazione di applicazioni basilari; ciò è dovuto al fatto che tale strumento è dotato di una sintassi particolarmente intuitiva e il codice sorgente prodotto attraverso di esso risulterà facilmente leggibile. Questo è uno dei motivi per cui Python risulta particolarmente adatto per lo sviluppo di progetti in ambito collaborativo.
Guido van Rossum, lo sviluppatore olandese che all'inizio degli anni '90 creò il linguaggio Python, scelse questo nome non ispirandosi alla nota specie di rettili, ma al gruppo comico britannico Monty Python e alla loro trasmissione televisiva, il Monty Python's Flying Circus; la sua idea era quella di offrire uno strumento modulare che unisse la semplicità dei costrutti alla possibilità di realizzare applicazioni anche molto complesse. La gratuità del linguaggio, unita alla sua licenza permissiva e alla robustezza sintattiche ottenuta rinunciando alle macchinosità, hanno reso Python uno strumento utilizzato universalmente; siti Web ad altissimo traffico come per esempio YouTube, sono stati realizzati adottando Python.
Ma Python si caratterizza anche per essere un linguaggio pseudocompilato, questo significa che ad occuparsi dell'analisi (parsing) dei codici sarà un apposito interprete messo a disposizione nativamente dal linguaggio; tale interprete dovrà quindi verificare la correttezza sintattica dei sorgenti ed eseguirli. In sostanza Python non da vita a dinamiche presenti in altri linguaggi, si pensi per esempio a C, per i quali viene richiesta una compilazione del codice per la generazione di file eseguibili. Tra i vantaggi della precompilazione vi è sicuramente la portabilità, infatti un sorgente scritto su una piattaforma (si ipotizzi Windows) potrà essere successivamente intepretato su un sistema operativo differente (ad esempio una distribuzione Linux) con l'unico vincolo derivante dalla versione utilizzata del linguaggio.
Installare Python su Linux, Mac e Windows
Nel momento in cui viene scritta questa trattazione la versione più recente di Python è la 3.4.3, mentre l'ultima release della versione 2.x è stata la 2.7.10 frutto di un aggiornamento risalente al maggio del 2015; entrambi i rami di sviluppo sono attualmente supportati dalla community di sviluppatori che si occupa della sua implementazione; ciò pone un problema dal...
La nostra prima applicazione con Python: Ciao Mondo!
Di default Python offre un potente strumento per la programmazione denominato IDLE, esso mette a disposizione un'interfaccia grafica con la quale lanciare istruzioni basate sul linguaggio e creare file eseguibili con estensione ".py".
Vengono inoltre fornite feature avanzate per incrementare il livello di produttività delle sessioni di sviluppo come per esempio i suggerimenti per il completamento delle istruzioni, l'evidenzione del...
Le variabili in Python
Le variabili sono dei costrutti comuni a quasi tutti i linguaggi di programmazione, esse nascono dall'esigenza di avere a disposizione uno spazio di memoria al quale associare dinamcamente delle informazioni; questa operazione per la memorizzazione diretta dei dati consiste in pratica nell'assegnazione di un valore alle variabili.
Per comprendere il funzionamento di tale processo di assegnazione è possibile avviare IDLE...
Gli operatori di Python
Gli operatori non sono un'esclusiva di Python, in generale tutti i linguaggi di programmazione e sviluppo dispongono di questi costrutti sintattici; è possibile definirli come dei simboli attraverso i quali specificare quale regola dovrà essere applicata a degli operandi per l'ottenimento di uno determinato risultato.
Gli operatori possono, per esempio, determinare un'assegnazione, ne sono stati descritti alcuni di questo tipo...
I costrutti condizionali in Python: If, Else, Elif
Come la maggior parte dei linguaggi per la programmazione e lo sviluppo anche Python mette a disposizione dei coders i cosiddetti costrutti condizionali; in sostanza parliamo di espressioni il cui esito, cioè il risultato prodotto, dipende dalla soddisfazione o meno di una condizione precedentemente definita. Per la definizione di un costrutto condizionale si utilizzano le keywords if, l'unica obbligatoria,...
Switch in Python (usando match – case)
Il case switch è una struttura di controllo comune a molti linguaggi di programmazione (come Java e C++) che permette di eseguire operazioni diverse in base al valore di una variabile che viene utilizzata come controllo.
Fino alla versione 3.10, Python non aveva una funzionalità integrata per implementare gli switch statement, quindi i programmatori dovevano necessariamente fare ricorso a if ed elif...
Il ciclo for in Python
Il ciclo (loop) for è uno dei cicli di iterazione messi a disposizione dal linguaggio Python, si tratta in sostanza di un costrutto, comune anche ad altri linguaggi, che consente di ripetere un'operazione un certo numero di volte, più tecnicamente "iterare una sequenza o un oggetto", fino alla soddisfazione di una determinata condizione (implicita) che terminerà il ciclo.
Per chiarire...
Il ciclo while in Python
Il ciclo while si differenzia dal ciclo for precedentemente descritto più a livello sintattico che funzionale, in generale è comunque possibile affermare che mentre nel ciclo for le iterazioni proseguono fino al verificarsi di una determinata condizione (ad esempio il raggiungimento di un dato incremento di valore a carico di una variabile), nel ciclo while le iterazioni continuano invece...
Controllo del flusso di esecuzione con break e continue in Python
Terminare un ciclo con break
Grazie agli esempi proposti in precedenza è stato possibile introdurre l'istruzione break, quest'ultima, quando impiegata all'interno di un ciclo si occuperà di terminarlo in corrispondenza di un determinato evento, come per esempio il verificarsi di una condizione specifica o dell'eventualità opposta.
Sostanzialmente break rappresenta uno strumento attraverso il quale influenzare il flusso di esecuzione di...
Le funzioni in Python
E' possibile definire le funzioni come degli insiemi composti da una o più istruzioni necessarie per lo svolgimento di un determinato compito; uno dei vantaggi derivanti dall'utilizzo di questi costrutti riguarda il fatto che essi possono essere definiti una volta sola e poi utilizzati in più di un'occasione all'interno della medesima applicazione, ciò avverrà tramite un meccanismo denominato "chiamata...
Gestire gli argomenti delle funzioni in Python
Per la definizione delle funzioni in Python è necessario tener presente alcune regole sintattiche in modo da evitare la generazione di errori. Vi sono poi dei cotrutti particolari che semplificheranno il lavoro dello sviluppatore.
Il numero degli argomenti
Quando si definisce una funzione, in Python è necessario che gli argomenti passati ad essa come parametri siano definiti a priori sia nella...
Funzioni Lambda e ricorsione in Python
Funzioni anonime
In Python le funzioni Lamba sono dei particolari costrutti sintattici derivati dal linguaggio Lisp e chiamati anche funzioni anonime; rispetto alle comuni funzioni definite dall'utente esse non sono associate ad un nome, da qui la caratteristica di essere "anonime", non vengono introdotte dalla parola chiave def, prevedendo invece la keyword lambda, e possono essere seguite soltanto da un'unica...
Le liste in Python
In Python è possibile definire una lista, alla quale si potrà attribuire un nome, inserendo degli elementi tra parentesi quadre (""). Chi già lavora con altri linguaggi per la programmazione o lo sviluppo conoscerà sicuramente gli array, o "vettori", che sono delle variabili destinate a contenere ulteriori variabili; sintatticamente e concettuamente le liste possono ricordare gli array, ma il...
Gestione delle liste in Python
Modificare gli elementi di una lista
Gli elementi presenti all'interno di una lista potranno essere modificati dinamicamente; nel prossimo capitolo analizzeremo un costrutto sintattico simile alle liste, le tuple che abbiamo analizzato parzialmente in precedenza; queste ultime funzionano in modo simile alle liste ma hanno la caratteristica di essere immutabili, mentre per quanto riguarda le liste si avrà una...
Le tuple in Python
Come anticipato, le tuple sono dei costrutti che, come accade per le liste, possono contenere una raccolta di elementi; la differenza sostanziale tra le liste e le tuple sta però nel fatto che mentre nelle prime gli elementi che le costituiscono possono essere modificati, nelle tuple divengono immutabili.
La sintassi per la definizione delle tuple prevede che gli elementi...
Gestire le tuple in Python
Come anticipato, le tuple si differenziano dalle liste soprattutto per via del fatto di essere immutabili, una volta che viene assegnato un elemento ad una tupla quest'ultimo non potrà essere modificato.
E' comunque possibile alterare alcune componenti di una tupla, se per esempio un elemento di una tupla è rappresentato da un tipo di dato modificabile, come nel caso...
Funzioni per liste e tuple
In Python le funzioni native per le liste e le tuple sono le medesime, presentano gli stessi nomi e la stessa sintassi e prevedono gli stessi valori di ritorno; vale quindi la pena analizzarle insieme per evitare inutili ripetizioni. Chiaramente faremo riferimento soltanto ai costrutti più comunemente utilizzati.
Funzioni comuni di liste e tuple
Un primo esempio sono le semplici funzioni...
I set in Python
I set sono delle entità simili alle liste e alle tuple, essi sono definibili come delle raccolte non ordinate di elementi in cui ciascuno di essi è unico e immutabile. In sostanza un set è composto da elementi non duplicati che non possono essere modificati, è invece possibile modificare i set, per esempio aggiungendo o rimuovendo elementi.
Definire un...
Operare con i set in Python
Le funzioni disponibili in Python per i set sono in linea di massima le stesse descritte in precedenza per le liste e le tuple, motivo per il quale non sarà necessario ripeterle. Più interessante è analizzare alcuni utilizzi pratici dei set che si prestano in modo particolare ad operazioni di insieminstica come le unioni, le intersezioni, le differenze e...
I dizionari in Python
In Python i dizionari (dictionary), o semplicemente dict, sono delle raccolte non ordinate di oggetti che appartengono ai cosiddetti tipi di dato compound (o container) esattamente come le liste, le tuple e i set, ma differenza di questi i dizionari non presentano come elementi dei semplici dei valori, bensì delle coppie composte da chiavi e valori.
Tale caratteristica è...
Operazioni sui dizionari in Python
I dizionari in Python sono dei costrutti iterabili, questa caratteristica li rende particolarmente utili nelle operazioni che prevedono la selezione di valori specifici o la restituzione di valori compresi all'interno di intervalli. Quanto esposto diviene ancora più chiaro nel caso in cui i dizionari, e i valori che rappresentano, vengano utilizzati all'interno di cicli o nei costrutti condizionali.
Comprehension dei...
I moduli in Python
In Python un modulo è essenzialmente un file che contiene del codice scritto in questo linguaggio. I moduli sono caratterizzati dall'estensione ".py", quindi al file "istruzione.py" corrisponderà il nome modulo "istruzione". Lo scopo dei moduli è duplice: essi contengono istruzioni e definizioni che possono essere riutilizzate quante volte si vuole senza la necessità di doverle riscrivere, basterà "importare"...
Moduli Python: directory, namespace e variabili d’ambiente
Per utilizzare al meglio i moduli è fondamentale capire come essi vengono gestiti da Python, approfondire questo argomento consente di scoprire l'utilità di alcune funzioni native del linguaggio che possono rivelarsi fondamentali per migliorare la produttività in sede di sviluppo, risparmiare sulla quantità di codice digitato e ottimizzare le prestazioni delle nostre applicazioni.
Il meccanismo di importazione dei moduli...
I package in Python
I moduli possono essere considerati sia dei contenitori (di definizioni, istruzioni, metodi..) che dei contenuti collezionabili all'interno di insiemi più strutturati detti package. Questi ultimi rispondono alla necessità di organizzare i moduli in modo razionale: plausibilmente uno sviluppatore lavorerà in modo più semplice e produttivo se potrà dedicare spazi differenti a moduli con funzionalità diverse, per questo motivo i...
Gestire i file con Python
Come qualsiasi altro linguaggio di programmazione che si rispetti anche Python integra delle funzionalità appositamente dedicate alle gestione dei file. Lo sviluppatore ha quindi a disposizione diverse funzioni native attraverso le quali aprire, leggere, scrivere e chiudere un file dopo averlo manipolato; sono inoltre previste delle modalità (o privilegi) di accesso ai documenti che consentiranno di effettuare tutte le...
Python: verificare se un file esiste
In Python, come abbiamo visto nella lezione precedente della nostra guida, è possibile compiere diverse operazioni sul filesystem, come la creazione, la lettura e la scrittura di file.
Una delle operazioni più importanti quando si lavora con il filesystem, però, è la verifica dell'esistenza di un file. Esaa è fondamentale prima di effettuare qualsasi operazione sui file al fine di...
Operare con le directory in Python
Come qualsiasi altro linguaggio di programmazione, Python individua le directory in quanto insiemi di file e sotto-cartelle, directory vuote verranno quindi interpretate come spazi di memoria destinati ad ospitare eventuali contenuti.
La gestione delle directory è resa possibile dalla disponibilità di un modulo apposito, os, che può essere utilizzato tramite importazione.
Rilevazione della directory corrente
Il metodo getcwd() consente di rilevare la...
Gestione delle eccezioni in Python
Possiamo definire un'eccezione come il costrutto di un linguaggio che, in presenza di un'anomalia, genera un messaggio di errore.
Quando si verifica un problema durante il funzionamento di un processo, quest'ultimo viene arrestato e, nel caso in cui l'anomalia non venga gestita l'applicazione smetterà di funzionare dpo la sua segnalazione.
Eccezioni predefinite
Python presenta decine di eccezione predefinite e ognuna di...
Python programmazione ad oggetti: classi, oggetti e metodi
Python supporta diversi paradigmi per la programmazione compreso l'OOP (Object-Oriented Programming, programmazione orientata agli oggetti), un approccio il cui maggior vantaggio è quello di consentire la creazione di codice riutilizzabile.
Tecnicamente l'OOP prevede di raggruppare sia le strutture dei dati e che le procedure che agiscono su di esse in una singola entità denominata classe.
Le classi
Una classe è in...
Python, programmazione ad oggetti ed ereditarietà
L'ereditarietà è un meccanismo grazie al quale una classe derivata (o child class) può acquisire le funzionalità definite in una classe base (o parent class) senza dover operare alcune modifica a carico di quest'ultima.
L'utilizzo dell'ereditarietà presenta principalmente un vantaggio: consente di non dover riscrivere codice già digitato rendendolo riutilizzabile.
Definire una classe derivata
Per definire una classe derivata è...
Python programmazione ad oggetti: incapsulamento e polimorfismo
Il paradigma OOP non nasce soltanto per garantire una maggiore riutilizzabilità del codice, ma anche per favorire lo sviluppo collaborativo, le classi sono infatti per loro natura "condivisibili". A ben vedere si tratta comunque di concetti strettamente legati.
Il fatto che l'approccio alla programmazione ad oggetti favorisca il lavoro in team non significa però che qualsiasi componente di un...
Python e MySQL: connessione e creazione del database
MySQL è un DBMS (Database Management System) di tipo relazionale, ciò significa che le informazioni archviate e gestite attraverso di esso sono in correlazione tra loro in base a delle proprietà. Per interagire con questa piattaforma è disponibile il linguaggio SQL (Structured Query Language) che è di tipo dichiarativo (o logico) in quanto caratterizzato dal fatto che le istruzioni...
Python e MySQL: creazione di una tabella e definizione dei campi
Un database relazionale gestito tramite MySQL è composto da una o più tabelle destinate ad ospitare dei dati, questi ultimi vengono ordinati in record (i pratica le righe delle tabelle) e rappresentano i valori di specifici associati ad unità di base, ognuna definita da un nome, dette campi (le colonne delle tabelle).
In questa lezione scopriremo come Python possa essere...
Python e MySQL: inserimento e aggiornamento dei dati
Una volta creata una tabella con i relativi campi è possibile popolarla tramite l'inserimento dei dati. Quando si gestisce un database MySQL tale operazione può essere effettuata utilizzando il comando INSERT INTO seguito dal nome della tabella e da quelli dei campi coinvolti nell'inserimento separati da una virgola e delimitati da parentesi tonde. I valori da assegnare ai campi...
Python e MySQL: selezione dei record
Dopo aver inserito i dati all'interno di una tabella una delle operazioni più frequenti a carico dei database è quella relativa alla selezione dei dati che, in questo modo, possono essere estratti in toto o sulla base di determinati criteri per la stampa a video, le attività di analisi o altre elaborazioni.
Il modulo di Python per l'interazione con MySQL...
Python e MySQL: cancellare record, tabelle e database
Tra le procedure effettuate con una certa frequenza nella gestione dei database vi sono anche quelle che prevedono la rimozione di record, tabelle e delle basi di dati stesse. I comandi SQL da utilizzare possono differire a seconda dell'elemento che si desidera eliminare ed è sempre utile ricordare che questo tipo di operazioni sono irreversibili, quindi se non si...