SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Python
LinuxDay-2008
     by Orcim
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
Panoramica
●
    A cosa serve un linguaggio di programmazione
●
    Cosa si impara programmando
●
    Qual'e' il miglior linguaggio
●
    Perche' Python
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)
Cosa si impara programmando
●
    * Logiche      ●
                       * Precisione
●
    * Funzioni     ●
                       * Organizzazione
●
    * Ricorsioni   ●
                       * Comunicazione
●
    * Astrazione   ●
                       * Collaborazione
●
    * Algoritmi
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.
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)
Caratteristiche di base
           attenzione Python lavora per referenza!
                   (vedremo cosa significa)
●
    Struttura Dati
●
    Funzioni
●
    Controllo di flusso
Struttura Dati (tipi)

●
    Number (int,long, double)          YES
●
    Booleans                           YES
●
    Characters                         NO
●
    Strings                            YES
●
    Arrays (su modulo esterno numpy)   NI
●
    Records                            NO
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!
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
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!
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'''
Struttura Dati (avanzata)
●
    Complex Numbers              YES
●
    Lists                        YES
●
    Tuples                       YES
●
    Hash tables (dizionari)      YES
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)
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
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')
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')]
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!
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!
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
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
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
Controllo dei flussi

●
    If then else                YES
●
    Case                        YES
●
    While do                    YES
●
    For                         YES
●
    Omega-N                     YES
●
    Assert                      YES
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
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
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.
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
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
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
>>>
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
>>>
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
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.
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':
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.
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
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
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
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..
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
Fisica Atomica e Molecalare




* MMTK toolkit di modellazione molecolare
* PyMOL visualizzazione 3d, rendering, ecc
* Vmd   visualizzazione molecolare animata
Vpython




Real-time 3D Graphics (Interactive Scenes)
Interfaccie grafiche

              <- PyGtk
                         pyQt4 ->



                         <- Tkinter(tlc/tk)




WxPython →

ecc..
Fine
Riferimenti locali:
- www.velug.it                                           # il sito del Velug
- orcim.50webs.com                                       # il mio sito
- orciml@gmail.com                                       # il mio indirizzo

Riferimenti del linguaggio:

-   http://www.python.org/                               #   sito ufficiale
-   http://www.planetpython.org/                         #   discussioni giornaliere
-   http://wiki.python.org/moin/Documentation            #   documentazione
-   http://groups.google.com/group/it.comp.lang.python   #   gruppo di discussione
-   http://lists.python.it/pipermail/python/             #   mail-list archivio



                               Domande ?

Mais conteúdo relacionado

Mais procurados

06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLextrategy
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatoriMajong DevJfu
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object OrientedManuel Scapolan
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++Ilio Catallo
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniextrategy
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamicaguest60e9511
 

Mais procurados (20)

2006 Py04 avanzato
2006 Py04 avanzato2006 Py04 avanzato
2006 Py04 avanzato
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioni
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
Corso c++
Corso c++Corso c++
Corso c++
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Stringhe java
Stringhe javaStringhe java
Stringhe java
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 

Semelhante a 2008 python

Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)STELITANO
 
Pycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjamPycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjamrik0
 
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...Davide Brunato
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
 
Linguaggio R, principi e concetti
Linguaggio R, principi e concettiLinguaggio R, principi e concetti
Linguaggio R, principi e concettiVincenzo De Maio
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linuxalberto fiaschi
 

Semelhante a 2008 python (20)

Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Introduzione a Python
Introduzione a PythonIntroduzione a Python
Introduzione a Python
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
07 2 ricorsione
07 2 ricorsione07 2 ricorsione
07 2 ricorsione
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Metodo di Newton
Metodo di NewtonMetodo di Newton
Metodo di Newton
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 
Bash Scripting
Bash ScriptingBash Scripting
Bash Scripting
 
Corso python 2020 - Lezione 1
Corso python 2020 - Lezione 1Corso python 2020 - Lezione 1
Corso python 2020 - Lezione 1
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
Pycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjamPycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjam
 
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...
Il rasoio dei generatori di Python (per semplificare il codice e ridurre l'us...
 
R Vectors
R VectorsR Vectors
R Vectors
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
 
Linguaggio R, principi e concetti
Linguaggio R, principi e concettiLinguaggio R, principi e concetti
Linguaggio R, principi e concetti
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
Selection sort
Selection sortSelection sort
Selection sort
 

2008 python

  • 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)
  • 5. Cosa si impara programmando ● * Logiche ● * Precisione ● * Funzioni ● * Organizzazione ● * Ricorsioni ● * Comunicazione ● * Astrazione ● * Collaborazione ● * Algoritmi
  • 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'''
  • 14. Struttura Dati (avanzata) ● Complex Numbers YES ● Lists YES ● Tuples YES ● Hash tables (dizionari) YES
  • 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
  • 41. Fisica Atomica e Molecalare * MMTK toolkit di modellazione molecolare * PyMOL visualizzazione 3d, rendering, ecc * Vmd visualizzazione molecolare animata
  • 42. Vpython Real-time 3D Graphics (Interactive Scenes)
  • 43. Interfaccie grafiche <- PyGtk pyQt4 -> <- Tkinter(tlc/tk) WxPython → ecc..
  • 44. Fine Riferimenti locali: - www.velug.it # il sito del Velug - orcim.50webs.com # il mio sito - orciml@gmail.com # il mio indirizzo Riferimenti del linguaggio: - http://www.python.org/ # sito ufficiale - http://www.planetpython.org/ # discussioni giornaliere - http://wiki.python.org/moin/Documentation # documentazione - http://groups.google.com/group/it.comp.lang.python # gruppo di discussione - http://lists.python.it/pipermail/python/ # mail-list archivio Domande ?