2. Presentazione
●
Michielutti Loris (nickname) Orcim
●
Lavoro nell'ambito della progettazione
●
Dal 1980 scrivo codice in vari linguaggi
Assembler, C, C++
e progetto schede elettroniche
a microprocessori
●
Dal 2004 mi sono avvicinato
al meraviglioso mondo di Python
3. Panoramica
●
A cosa serve un linguaggio di programmazione
●
Cosa si impara programmando
●
Qual'e' il miglior linguaggio
●
Perche' Python
4. A cosa serve un Linguaggio di
Programmazione
●
definire delle sequenza ripetibili
– (sono un programmatore)
●
documentare e riprodurre tali sequenze
– (sono un buon programmatore)
●
imparare ad analizzare e a scegliere
le situazioni piu' consone
– (sono un analista)
6. Qual'e' il miglior linguaggio?
●
quello che uno conosce meglio
●
il piu' aperto possibile
●
il piu' facile da estendere
●
quello che permette piu' approcci al problema
●
quello che fornisce piu' documentazione e materiale
a questo punto posso affermare che per imparare
a programmare python e' una meraviglia.
7. perche' Python?
●
Sintassi cristallina
(50% di codice in meno, 300% piu' produttivo)
●
Interprete interattivo (valutazione in tempo reale)
●
Alto livello di astrazione
●
Potenti strutture dati
●
Diversi Paradigmi (Procedurale,Funzionale,Oggetti)
●
Nessuna necessita' di distruggere gli oggetti
non piu' utilizzati. (Garbage Collection)
●
Estendibile (scrivere componenti in C,C++,ecc)
●
Customizzabile (leggere componenti da C,C++,ecc)
●
Multi piattaforma (linux,windows,mac,ecc)
8. Caratteristiche di base
attenzione Python lavora per referenza!
(vedremo cosa significa)
●
Struttura Dati
●
Funzioni
●
Controllo di flusso
9. Struttura Dati (tipi)
●
Number (int,long, double) YES
●
Booleans YES
●
Characters NO
●
Strings YES
●
Arrays (su modulo esterno numpy) NI
●
Records NO
10. Numeri
>>> a = 5 / 2 # Integer(default)
>>> print a
2
>>> b = 10L # Long
>>> print b
10
>>> c = a + 3.567 # Double (float)
>>> print c
5.567
>>> x = 3 # assegnazione
>>> y = x # cosa faccio qui?
>>> y += 1 # chi mi sa dire quanto
# vale x?
print x, y # attenzione in python ci
3 4 # sono pochi tipi
# mutabili!
11. Logiche
Le costanti booleane
False: 0,None,oggetti e contenitori vuoti
True: not 0,oggetti e contenitori non vuoti
Gli operatori di comparazione
==,!=,<,<=,etc.
verifichiamo il CONTENUTO delle referenze!
>>> x = 4; y = 4 # assegnamo 2 valori
>>> print x == y
True
se vogliamo verificare la REFERENZA allora
usiamo l'operatore is
>>> print x is y
False
12. Logiche (and, or)
Attenzione and e or non ritornano True e False
ma il valore di una delle sotto-espressioni!
X and Y and Z
- se sono tutti veri ritorna Z
- altrimenti ritorna il primo valore falso
X or Y or Z
- se sono tutti falsi ritorna Z
- altrimenti ritorna il primo valore vero
Trucco per implementare la condizione ternaria
l'equivalente in C di (test ? val1 : val2)
res = 1 > 2 and val1 or val2
- quando il test e' vero ritorna val1
- quando il test e' falso ritorna val2
attenzione funziona solo con val1 vero!
13. Stringhe (sono sequenze immutabili)
>>> a = “ciao” # assegnazione
>>> print a
ciao
>>> b = a # copio la referenza
>>> print b
ciao
>>> a += ' mondo' # riassegnazione
>>> print a,b
ciao mondo ciao
>>> print “bye” # stringa senza referenza
bye
>>> b = '''ciao # assegnazione multi linea
>>> sono un
>>> multi linea'''
15. Numeri Complessi
>>> a = complex(1,2) # assegnazione
# usa il tipo float!
>>> print a.real # parte reale
1.0
>>> print a.imag # parte immaginaria
2.0
>>> print a # visualizzazione
(1+j2) # in forma complessa
>>> a += (3+j4) # operazioni
>>> print a
(4+j6)
16. Liste (sono sequenze mutabili)
>>> a = [1,'a',(1+j2)] # assegn. eterogenea
>>> b = list('string') # conv. di una stringa
>>> print a, b # visualizzazione
[1,'a',(1+j2)] ['s','t','r','i','n','g']
>>> a += [3,4] # aggiungo N elementi
>>> print a, a[1] # rifer. ad 1 elemento
[1,'a',(1+j2),3,4] 'a'
>>> c = b # copio la referenza
>>> b.append('a') # aggiungo un elemento
>>> print c
['s','t','r','i','n','g','a']
>>> c = b.copy() # creo una copia
>>> c = b[:] # in modo esplicito
17. Tuple (sono sequenze immutabili)
>>> t = (1,2,'ciao',3) # assegnazione
>>> print t, t[2] # visualizzazione
(1,2,'ciao',3) 'ciao'
>>> l = list(t) # converto in lista
>>> l += ['a'] # aggiungo un elemento
>>> print t[:-2] # visualizzo senza gli
(1,2) # ultimi 2 elementi
>>> print l[2:] # visualizzo dal
['ciao',3,'a'] # 2 elemento in poi
>>> print t[1:2] # visualizzo una
(2,'ciao') # porzione
>>> n = tupla(l) # converto in tupla
>>> print n
(1,2,'ciao',3,'a')
18. Dizionari (sono mappe non sono sequenze!)
vi accedo per chiave. le chiavi devono essere univoche!
>>> d = {'uno':1,2:'due','tre':'tre'}
>>> print d['uno'] # visualizzo il valore
1 # dell'elemento 'uno'
>>> d[4] = 'ciao' # nuovo elemento
>>> del d['uno'] # rimuovo un elemento
>>> print d # visualizzazione
{2:'due','tre':'tre',4:'ciao'}
>>> print d.keys() # lista delle chiavi
[2,'tre',4]
>>> print d.values() # lista dei valori
['due','tre','ciao']
>>> print d.items() # lista degli elementi
[(2,'due'),('tre','tre'),(4,'ciao')]
19. Funzioni
●
Verifica dei tipi sugli argomenti NO
●
Parametri di default YES
●
Parametri per chiave YES
●
Parametri come funzioni YES
Tutte le funzioni ritornano un valore!
in caso di assenza della istruzione return
la funzione torna il valore di default None
In python non esite l'overloading della funzione!
due funzioni non possono avere lo stesso nome
anche se hanno differenti argomenti!
20. Funzioni (verifica dei tipi)
>>> def = foo(x): # definizione di una
... print x # funzione
...
>>> foo('ciao') # richiamo della funzione
ciao # con una stringa
>>> foo(35) # richiamo della funzione
35 # con un intero
Nessuna verifica sui tipi dei parametri passati ?
NO in realta' questo e' il Dynamic Typing!
Se i parametri fossero stati es: foo(x,y)
e la funzione print x * y
python avrebbe controllato e in caso di operazione non
congrua avrebbe sollevato una eccezzione!
Questo e' lo Strong Typing!
21. Funzioni (parametri di default)
>>> x = 35 # referenzio un intero
>>> def = foo(a=x): # definizione di una
... print a # funzione
...
>>> foo('ciao') # richiamo della funzione
ciao # con un parametro
>>> foo() # richiamo della funzione
35 # senza parametri
>>> x = 10 # riassegnazione!
>>> foo() # 35 o 10 ?
35 # perche' il parametro di
# default e' assegnato una
# sola volta!
durante l'istanza
22. Funzioni (parametri per chiave)
>>> def = foo(x=1,y=2,z=3):
... print 'x,y,z =',x,y,z
...
>>> foo() # richiamo della funzione
x,y,z = 1 2 3 # senza parametri
>>> foo(10) # passaggio dei parametri
x,y,z = 10 2 3 # per posizione
>>> foo(y=20) # passaggio dei parametri
x,y,z = 1 20 3 # per chiave (nome)
>>> foo(10,z=30) # passaggio dei parametri
x,y,z = 10 2 30 # misto
23. Funzioni (parametri come funzioni)
>>> def = foo(x=1,y=2,z=3):
... print 'x,y,z =',x,y,z
...
>>> foo(*[4,5]) # passaggio dei parametri
x,y,z = 4 5 3 # contenuti in una lista
>>> foo(**{'x':10,'z':30})
# passaggio dei parametri
x,y,z = 10 2 30 # contenuti in un dizion.
# y=(valore di default)
>>> def = pippo(x,y):
... return x(y) # passaggio dei parametri
... # dove x e' una funzione
>>> pippo(foo,9)
x,y,z = 9 2 3
24. Controllo dei flussi
●
If then else YES
●
Case YES
●
While do YES
●
For YES
●
Omega-N YES
●
Assert YES
25. if then else
Da console interattiva:
>>> x = 3
>>> if x < 10: print 'ciao' False True
... if
ciao
>>> if x > 10: print 'ciao' else then
... else: print 'bye'
...
bye
26. case
Da console interattiva:
>>> x = 3
>>> if x == 1: print 'uno' if
True
do A
... elif x==2: print 'due'
... elif x==3: print 'tre' False
... else: print 'non esistente'
tre
>>>
if True do B
False
27. while do
Da console interattiva:
>>> x = 3
>>> while x > 0: do
... print 'x =', x
... x -=1
True
... if
x = 3
x = 2
False
x = 1
>>>
Si puo' usare la chiave break per interrompere
anticipatamente il loop.
Si puo' usare la chiave continue per saltare al
ciclo successivo senza eseguire le istruzione
successive alla chiave.
28. For (interi,stringa)
Da console interattiva:
>>> range(3) # funzione che torna una
[0,1,2] # lista di N elementi
>>> for x in range(3):print 'x =',x
...
x = 0 # ciclo di interi
x = 1
x = 2
>>> for x in 'ciao':print 'x =',x
...
x = c # ciclo di una stringa
x = i
x = a
x = o
29. For (lista,tupla)
Da console interattiva:
>>> for x in [1,2,3]:print 'x =',x
...
x = 0 # ciclo di una lista
x = 1
x = 2
>>> for x in ('c','i','a','o'):print 'x =',x
...
x = c # ciclo di una tupla
x = i
x = a
x = o
30. For (dizionari)
Da console interattiva:
>>> d={'a':1,'b':2} # creo un dizionario
>>> for x,y in d.items():print 'foo =',x,y
...
foo = a 1 # ciclo degli elementi
foo = b 2
>>> for x in d.keys():print 'foo =',x
...
foo = a # ciclo delle chiavi
foo = b
>>> for x in d.values():print 'foo =',x
...
foo = 1 # ciclo dei valori
foo = 2
>>>
31. Omega-N
Da console interattiva:
>>> flg = 2 # flag di ctrl
>>> while True: do A
... print 'eseguo A'
... if flg <=0: break
... print 'eseguo B'
... flg -=1 # omega-1 True
... if
eseguo A
eseguo B
eseguo A False
eseguo B
do B
eseguo A
>>>
32. Assert
# l'istruzione assert verifica che una
# determinata condizione sia vera
# durante l'esecuzione del programma
# altrimenti lo interrompe!
assert(x < 3) # if False exit
33. Potenzialita'
di python:
- puo' operare con le matrici.
- puo' graficare dati.
- puo' plottare in tridimensionale.
- puo' creare interfaccie grafiche.
- puo' aprire e salvare files in diversi formati.
- puo' gestire immagini di vari formati.
- puo' interagire, anche a basso livello con il Sistema Operativo
e con la macchina.
34. Le librerie (packages)
In python librerie significa:
files di script raccolti in ordine tipologico chiamati packages.
Un package non e' altro che una cartella dove all'interno troviamo:
i files di script (moduli)
oltre al file speciale di nome: __init__.py
che serve ad identificare la cartella come package.
Il file speciale puo' essere anche vuoto.
La prima volta che si importa un modulo dal packge viene
automaticamente richiamato ed eseguito il file __init__.py !
Dunque si puo' usare questo file per inserire delle istruzioni
di preparazione al codice seguente !
Vediamo alcune librerie e le loro
potenzialita':
35. Numeric
* permette di lavorare efficientemente con grandi
quantita' di dati organizzati in tabelle e matrici (array).
* velocita' di calcolo enormemente superiore grazie
all'ottimizzazione del codice e alla gestione della
memoria.
36. PyLab (plot 2d)
* disegnare grafici bidimensionali
* standalone con toolbar integrati (zoom, pan, ecc.)
* Esportazioni in formati vettoriali
* Customizzare i grafici in qualsiasi Gui
* Sintassi di base molto simile al plot di Matlab
* Scrivere formule usando la sintassi Latex
37. SciPy
Si appoggia a Numeric e pyLab
puo' esser visto come un completamento dei primi 2.
* vettori, tensori, trasformazioni...
integrali, derivate, interpolazioni, polinomi
* statistica
* supporto per file di testo formattati per il Fortran
* widgets per plot lineari e 3D
* analisi di immagini
* interfacce per il calcolo distribuito (parallelo)
* elaborazione dei segnali
38. symPy(calcolo simbolico)
* aritmetica di base *,/,+,-,**
* semplificazioni (a*b*b+2*b*a*b) → (3*a*b^2)
* espansioni ((a+b)^2) → (a^2+2*a*b+b^2)
* funzioni (exp,ln,ecc)
* numeri complessi
* derivate
* serie di taylor (laurent)
* equazioni differenziali
39. Python Image Library (pil)
* Permette l'elaborazione di immagini da Python.
* Sono supportati i piu' diffusi formati di immagine.
Le funzioni possibili:
* visualizzare
* ritagliare
* filtrare
* analizzare
* ridimensionare
* convertire
* applicare filtri
* ecc..
40. Astrofisica
* PyRAF trattamento dei dati, array, immagini
* PyAstro set di funzioni utili per calcoli astronomici
* PyEphem scientific-grade astronomical computations
* PyFits per leggere e scrivere il formato FITS