2008 python
Upcoming SlideShare
Loading in...5
×
 

2008 python

on

  • 267 views

 

Statistics

Views

Total Views
267
Views on SlideShare
267
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

2008 python 2008 python Presentation Transcript

  • PythonLinuxDay-2008 by Orcim
  • Presentazione● Michielutti Loris (nickname) Orcim● Lavoro nellambito 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● Quale 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
  • Quale 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 a2>>> b = 10L # Long>>> print b10>>> c = a + 3.567 # Double (float)>>> print c5.567>>> x = 3 # assegnazione>>> y = x # cosa faccio qui?>>> y += 1 # chi mi sa dire quanto # vale x?print x, y # attenzione in python ci3 4 # sono pochi tipi # mutabili!
  • LogicheLe costanti booleaneFalse: 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 == yTrue se vogliamo verificare la REFERENZA allora usiamo loperatore is>>> print x is yFalse
  • 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 falsoX or Y or Z - se sono tutti falsi ritorna Z - altrimenti ritorna il primo valore veroTrucco per implementare la condizione ternaria lequivalente 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 aciao>>> b = a # copio la referenza>>> print bciao>>> a += mondo # riassegnazione>>> print a,bciao mondo ciao>>> print “bye” # stringa senza referenzabye>>> 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 reale1.0>>> print a.imag # parte immaginaria2.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 valore1 # dellelemento 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 loverloading 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 funzioneciao # con una stringa>>> foo(35) # richiamo della funzione35 # 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 funzioneciao # con un parametro>>> foo() # richiamo della funzione35 # senza parametri>>> x = 10 # riassegnazione!>>> foo() # 35 o 10 ?35 # perche il parametro di # default e assegnato una # sola volta! durante listanza
  • Funzioni (parametri per chiave)>>> def = foo(x=1,y=2,z=3):... print x,y,z =,x,y,z...>>> foo() # richiamo della funzionex,y,z = 1 2 3 # senza parametri>>> foo(10) # passaggio dei parametrix,y,z = 10 2 3 # per posizione>>> foo(y=20) # passaggio dei parametrix,y,z = 1 20 3 # per chiave (nome)>>> foo(10,z=30) # passaggio dei parametrix,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 parametrix,y,z = 4 5 3 # contenuti in una lista>>> foo(**{x:10,z:30}) # passaggio dei parametrix,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 elseDa console interattiva:>>> x = 3>>> if x < 10: print ciao False True... ifciao>>> if x > 10: print ciao else then... else: print bye...bye
  • caseDa 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 esistentetre>>> if True do B False
  • while doDa console interattiva:>>> x = 3>>> while x > 0: do... print x =, x... x -=1 True... ifx = 3x = 2 Falsex = 1>>>Si puo usare la chiave break per interrompereanticipatamente il loop.Si puo usare la chiave continue per saltare alciclo successivo senza eseguire le istruzionesuccessive 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 interix = 1x = 2>>> for x in ciao:print x =,x...x = c # ciclo di una stringax = ix = ax = o
  • For (lista,tupla)Da console interattiva:>>> for x in [1,2,3]:print x =,x...x = 0 # ciclo di una listax = 1x = 2>>> for x in (c,i,a,o):print x =,x...x = c # ciclo di una tuplax = ix = ax = 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 elementifoo = b 2>>> for x in d.keys():print foo =,x...foo = a # ciclo delle chiavifoo = b>>> for x in d.values():print foo =,x...foo = 1 # ciclo dei valorifoo = 2>>>
  • Omega-NDa 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... ifeseguo Aeseguo Beseguo A Falseeseguo B do Beseguo A>>>
  • Assert# listruzione assert verifica che una# determinata condizione sia vera# durante lesecuzione 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 allinterno 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 grandiquantita di dati organizzati in tabelle e matrici (array).* velocita di calcolo enormemente superiore grazieallottimizzazione del codice e alla gestione dellamemoria.
  • 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
  • SciPySi 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 lelaborazione 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
  • VpythonReal-time 3D Graphics (Interactive Scenes)
  • Interfaccie grafiche <- PyGtk pyQt4 -> <- Tkinter(tlc/tk)WxPython →ecc..
  • FineRiferimenti locali:- www.velug.it # il sito del Velug- orcim.50webs.com # il mio sito- orciml@gmail.com # il mio indirizzoRiferimenti 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 ?