Python - Introduzione

Python

Per un motivo o per un altro, perché convinti della scelta o perché costretti con la forza, diversi di noi hanno avuto a che fare con quel famoso linguaggio di programmazione che risponde al nome di Python.
Con questo articolo vogliamo introdurci al linguaggio di programmazione per poter poi lanciarci nei mesi a venire in una serie di tutorial su alcune delle librerie con le quali abbiamo combattuto. Non si tratta perciò di un corso di Python 101, ma solo di una breve presentazione pratica al linguaggio. Quelle che saranno elencate nelle prossime sezioni sono solo alcune delle feature più interessanti di Python. Come sempre, vi invitiamo a leggere le guide ufficiali per avere informazioni più dettagliate e precise.



Installazione

Il metodo che vi consigliamo per l'installazione è utilizzare il pacchetto Anaconda.
Funziona per tutti i Sistemi Operativi e contiene, oltre all'interprete Python, diverse librerie che vi saranno utili in futuro (e delle quali tratteremo nei prossimi articoli).
Ah ah ah, silly me. Per l'installazione vi consiglio caldamente di seguire l'articolo sul nostro sito a proposito di virtualenv.



Interprete

Abbiamo detto prima che Anaconda contiene “l'interprete Python”. Con interprete, parafrasando da Wikipedia, si intende un programma che traduce il codice sorgente in linguaggio macchina “al volo”, un'istruzione alla volta.
Python si differenzia perciò da linguaggi compilati come il C++, in cui il compilatore traduce il codice sorgente in linguaggio macchina solo dopo aver eseguito l'intero programma.
Esistono tuttavia delle tecniche per combinare l'eleganza di Python alle prestazioni di un linguaggio compilato. Anche di questo parleremo in futuro.

Dove programmare?

Esistono molti IDE da poter utilizzare, ma se dovete semplicemente scrivere un paio di righe di script, il consiglio è di utilizzare iPython jupyter, shell interattiva già presente nel pacchetto Anaconda.
Potete installare jupyter con il gestore pacchetti pip seguendo le istruzioni sul sito ufficiale.
Per utilizzare jupyter, aprite un terminale e spostatevi nella cartella di progetto. Digitate “ipython notebook” jupyter notebook e sul vostro browser di default vi si aprirà una pagina all'interno della quale potrete creare il nuovo file di progetto.

Indentazione e compattezza

Tra le caratteristiche più belle di Python c'è senza dubbio la leggibilità dei suoi script: non sono utilizzate parentesi graffe per racchiudere i body delle funzioni o dei cicli, è utilizzata l'indentazione (TAB). Fate solo attenzione al numero di spazi della tabulazione quando trovate script da siti online: non tutti gli IDE usano la stessa lunghezza per l'indentazione.
Python è anche famoso per la compattezza delle sue istruzioni se confrontate con le istruzioni analoghe degli altri linguaggi. Ci riferiamo in particolare alle List Comprehensions, un modo piuttosto elegante per definire al volo liste customizzate in Python. Vi proponiamo nel seguito una riga di codice per stampare a video la lista dei numeri pari da 0 a 9:

print [x for x in range(10) if x%2==0]


Variabili…?

Il nome “variabile” in Python è usato puramente per semplificare la notazione: quando scrivete

a = 42

è come dire che a è un nome che identifica il numero intero 42. In Python non c'è una vera dichiarazione di variabili come per i linguaggi compilati. Sono solo assegnati dei nomi.

Tipi immutabili

In Python non si possono modificare le stringhe. Per quanto strano possa sembrare, così stanno i fatti. Provate a scrivere

a = 'spam'
a[0] = 'S'

e vedete che errore viene fuori.
Ciò tuttavia non vi vieta di scrivere

a = 'spam'
b = 'eggs, bacon and '
a = a + b

quello che sta accadendo è che una nuova stringa eggs, bacon and spam è stata creata ed il nome a è stato assegnato come alias alla nuova stringa, perdendo così il riferimento alla stringa spam.
Al pari delle stringhe, anche le tuple (collezione sequenziale di oggetti, simile alla lista) sono immutabili in Python. La sintassi prevede l'uso delle parentesi tonde. La versione mutabile delle tuple sono le liste. Provate il seguente codice:

a = ['eggs', 'bacon', 'spam']
a[0] = 'spam'
print a
b = ('eggs', 'bacon', 'spam')
b[0] = 'spam'
print b


Dizionari

I dizionari in Python (dict) corrispondono alle hashmap del C++, una struttura dati di tipo associativo in cui l'accesso ai valori è effettuato tramite chiavi. Per le chiavi è obbligatorio utilizzare tipi di dati immutabili (tuple e stringhe).

# creazione dizionario
diz = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# accedere ad un elemento
p = diz.get('a')
print p

# trasformare i valori in una lista
v = diz.values()
print v


Il Path delle librerie
Spesso nel proseguimento del vostro uso del Python vi ritroverete a scontrarvi con messaggi del tipo:

ImportError: No module named allafinedelpalo

Ciò accadrà quando avrete installato il suddetto modulo in un path che non rientra tra quelli in cui Python di base ricerca le librerie. Per controllare quali sono questi path, il seguente codice fa al caso vostro:

import sys

# per vedere quali path sono inclusi
print sys.path

# per aggiungere quello dove si trova il modulo o la libreria
sys.path.append('/path/della/libreria')


"In Python, tutto è object"
Con questa frase, che vi sentirete riproporre spesso, si afferma che in Python tutto quanto ha le proprietà di un oggetto. Per esempio, una funzione può avere degli attributi, oppure una funzione può essere passata come parametro di un'altra funzione. Quest'ultima caratteristica è molto utile quando all'interno di una funzione dovete chiamarne un'altra specifica, indipendente dall'implementazione della funzione chiamante.

Sono confuso...
In fase di debug soprattutto, sarebbe utile capire che tipo di oggetti state utilizzando e quali sono gli attributi ed i metodi ad essi collegati. Le built-in function type() e dir() vengono in vostro aiuto.
La funzione type() vi restituisce il tipo dell'oggetto al quale un nome sta puntando, mentre dir() elenca gli attributi ed i metodi. Ancora più carina è la keyword ? in ambiente ipython jupyter. Provate ad aprire una shell e digitare le seguenti righe di codice:

diz = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print type(diz)
print dir(diz)
? diz


Debug rapido
Per il debug, è consigliata la libreria ipdb, debugger di iPython già presente in Anaconda che potete installare seguendo la guida ufficiale.
Una volta installata, vi basterà semplicemente importare la libreria

import ipdb

impostare dei breakpoint con l'istruzione

ipdb.set_trace()

ed avviare lo script.
Arrivati al breakpoint potrete andare avanti di istruzione in istruzione digitando "n" sul prompt dei comandi, andare al prossimo breakpoint con "c", o entrare nelle funzioni con "s".



Per uno sguardo più approfondito alle caratteristiche di Python questi link potrebbero interessarvi:

  • http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
  • http://stackoverflow.com/questions/11007627/python-variable-declaration
  • http://www.secnetix.de/olli/Python/list_comprehensions.hawk
  • http://www.openbookproject.net/books/bpp4awd/ch03.html
  • http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html





Come sempre vi invitiamo a scrivere dei commenti per chiarire i vostri dubbi, per aggiungere informazioni che sono state trascurate o per correzioni (siamo pur sempre umani...).

Alessio Antonielli

Ingegnere informatico, appassionato di cinema, musica, videogiochi e serie tv. Insomma, le solite cose che vi aspettereste da un ex studente di Ingegneria Informatica, giusto per rafforzare lo stereotipo…

Python - Introduzione ultima modifica: 2015-12-22T16:13:32+01:00 da Alessio Antonielli


Advertisment ad adsense adlogger