2008 python

44
Python Python LinuxDay-2008 by Orcim

description

 

Transcript of 2008 python

Page 1: 2008 python

PythonPythonLinuxDay-2008

by Orcim

Page 2: 2008 python

PresentazionePresentazione

● 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

Page 3: 2008 python

PanoramicaPanoramica● A cosa serve un linguaggio di programmazione

● Perche' Python

● Cosa si impara programmando● Qual'e' il miglior linguaggio

Page 4: 2008 python

– (sono un programmatore)

A cosa serve un Linguaggio di A cosa serve un Linguaggio di ProgrammazioneProgrammazione

● definire delle sequenza ripetibili

● documentare e riprodurre tali sequenze– (sono un buon programmatore)

● imparare ad analizzare e a scegliere le situazioni piu' consone

– (sono un analista)

Page 5: 2008 python

Cosa si impara programmandoCosa si impara programmando● * Logiche ● * Funzioni● * Ricorsioni● * Astrazione● * Algoritmi

● * Precisione● * Organizzazione● * Comunicazione● * Collaborazione

Page 6: 2008 python

Qual'e' il miglior linguaggio?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.

Page 7: 2008 python

perche' Python?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)

Page 8: 2008 python

Caratteristiche di baseCaratteristiche di base

● Struttura Dati

● Controllo di flusso

● Funzioni

attenzione attenzione PythonPython lavora per referenza! lavora per referenza!(vedremo cosa significa)(vedremo cosa significa)

Page 9: 2008 python

Struttura DatiStruttura Dati (tipi)(tipi)

● Number (int,long, double) YES● Booleans YES● Characters NO● Strings YES● Arrays (su modulo esterno numpy) NI● Records NO

Page 10: 2008 python

NumeriNumeri>>> a = 5 / 2>>> a = 5 / 2 # Integer(default)# Integer(default)>>> print a>>> print a22>>> b = 10L>>> b = 10L # Long# Long>>> print b>>> print b1010>>> c = a + 3.567>>> c = a + 3.567 # Double (float)# Double (float)>>> print c>>> print c5.5675.567>>> x = 3 >>> x = 3 # assegnazione# assegnazione>>> y = x >>> y = x # # cosa faccio qui?cosa faccio qui?>>> y += 1>>> y += 1 # chi mi sa dire quanto# chi mi sa dire quanto

# vale x?# vale x?print x, yprint x, y # attenzione in python ci# attenzione in python ci3 43 4 # sono pochi tipi # sono pochi tipi

# # mutabili!mutabili!

Page 11: 2008 python

LogicheLogicheLe costanti booleaneLe costanti booleaneFalseFalse: 0,None,oggetti e contenitori vuoti: 0,None,oggetti e contenitori vuoti TrueTrue: not 0,oggetti e contenitori non vuoti: not 0,oggetti e contenitori non vuoti

Gli operatori di comparazioneGli operatori di comparazione==,!=,<,<=,etc.==,!=,<,<=,etc.

verifichiamo il verifichiamo il CONTENUTOCONTENUTO delle referenze! delle referenze!>>> x = 4; y = 4>>> x = 4; y = 4 # assegnamo 2 valori# assegnamo 2 valori>>> print x == y>>> print x == yTrueTrue

se vogliamo verificare la se vogliamo verificare la REFERENZAREFERENZA allora allorausiamo l'operatore usiamo l'operatore isis

>>> print x is y>>> print x is yFalseFalse

Page 12: 2008 python

Logiche Logiche (and, or)(and, or)

Attenzione Attenzione andand e e oror non ritornano non ritornano TrueTrue e e FalseFalse ma il valore di una delle sotto-espressioni!ma il valore di una delle sotto-espressioni!X X andand Y Y andand Z Z

- se sono tutti - se sono tutti veriveri ritorna ritorna ZZ- altrimenti ritorna il primo valore - altrimenti ritorna il primo valore falsofalso

X X oror Y Y oror Z Z- se sono tutti - se sono tutti falsifalsi ritorna ritorna ZZ- altrimenti ritorna il primo valore - altrimenti ritorna il primo valore verovero

Trucco per implementare la condizione ternariaTrucco per implementare la condizione ternaria l'equivalente in C di (test ? val1 : val2)l'equivalente in C di (test ? val1 : val2)

res = 1 > 2 and val1 or val2res = 1 > 2 and val1 or val2 - quando il test e' - quando il test e' verovero ritorna ritorna val1val1 - quando il test e' - quando il test e' falsofalso ritorna ritorna val2val2 attenzione funziona solo con val1 attenzione funziona solo con val1 verovero!!

Page 13: 2008 python

Stringhe Stringhe (sono sequenze immutabili)(sono sequenze immutabili)>>> a = “ciao”>>> a = “ciao” # assegnazione# assegnazione>>> print a>>> print aciaociao>>> b = a>>> b = a # copio la referenza# copio la referenza>>> print b>>> print bciaociao>>> a += ' mondo'>>> a += ' mondo' # riassegnazione# riassegnazione>>> print a,b>>> print a,bciao mondo ciaociao mondo ciao>>> print “bye”>>> print “bye” # stringa senza referenza# stringa senza referenzabyebye>>> b = '''ciao>>> b = '''ciao # assegnazione multi linea# assegnazione multi linea>>> sono un>>> sono un>>>>>> multi linea'''multi linea'''

Page 14: 2008 python

Struttura DatiStruttura Dati (avanzata)(avanzata)

● Complex Numbers YES● Lists YES● Tuples YES● Hash tables (dizionari) YES

Page 15: 2008 python

Numeri ComplessiNumeri Complessi>>> a = complex(1,2)>>> a = complex(1,2) # assegnazione# assegnazione

# usa il tipo float!# usa il tipo float!>>> print a.real>>> print a.real # parte reale# parte reale1.01.0>>> print a.imag>>> print a.imag # parte immaginaria# parte immaginaria2.02.0>>> print a>>> print a # visualizzazione# visualizzazione(1+j2)(1+j2) # in forma complessa# in forma complessa>>> a += (3+j4)>>> a += (3+j4) # operazioni# operazioni>>> print a>>> print a(4+j6)(4+j6)

Page 16: 2008 python

Liste Liste (sono sequenze mutabili)(sono sequenze mutabili)>>> a = [1,'a',(1+j2)]>>> a = [1,'a',(1+j2)] # assegn. eterogenea # assegn. eterogenea >>> b = list('string')>>> b = list('string') # conv. di una stringa# conv. di una stringa>>> print a, b>>> print a, b # visualizzazione# visualizzazione[1,'a',(1+j2)] ['s','t','r','i','n','g'][1,'a',(1+j2)] ['s','t','r','i','n','g']>>> a += [3,4]>>> a += [3,4] # aggiungo N elementi# aggiungo N elementi>>> print a, a[1]>>> print a, a[1] # rifer. ad 1 elemento# rifer. ad 1 elemento[1,'a',(1+j2),3,4] 'a'[1,'a',(1+j2),3,4] 'a'>>> c = b>>> c = b # # copio la referenzacopio la referenza>>> b.append('a')>>> b.append('a') # aggiungo un elemento# aggiungo un elemento>>> print c>>> print c['s','t','r','i','n','g','a']['s','t','r','i','n','g','a']>>> c = b.copy()>>> c = b.copy() # # creo una copiacreo una copia >>> c = b[:]>>> c = b[:] # in modo esplicito# in modo esplicito

Page 17: 2008 python

Tuple Tuple (sono sequenze immutabili)(sono sequenze immutabili)

>>> t = (1,2,'ciao',3)>>> t = (1,2,'ciao',3) # assegnazione# assegnazione>>> print t, t[2]>>> print t, t[2] # visualizzazione# visualizzazione(1,2,'ciao',3) 'ciao'(1,2,'ciao',3) 'ciao'>>> l = list(t)>>> l = list(t) # converto in lista# converto in lista>>> l += ['a']>>> l += ['a'] # aggiungo un elemento# aggiungo un elemento>>> print t[:-2]>>> print t[:-2] # visualizzo senza gli # visualizzo senza gli (1,2)(1,2) # ultimi 2 elementi# ultimi 2 elementi>>> print l[2:]>>> print l[2:] # visualizzo dal # visualizzo dal ['ciao',3,'a']['ciao',3,'a'] # 2 elemento in poi# 2 elemento in poi>>> print t[1:2]>>> print t[1:2] # visualizzo una # visualizzo una (2,'ciao')(2,'ciao') # porzione# porzione>>> n = tupla(l)>>> n = tupla(l) # converto in tupla# converto in tupla>>> print n>>> print n(1,2,'ciao',3,'a')(1,2,'ciao',3,'a')

Page 18: 2008 python

Dizionari Dizionari (sono mappe non sono sequenze!)(sono mappe non sono sequenze!) vi accedo per chiave.vi accedo per chiave. le chiavi devono essere univoche!le chiavi devono essere univoche! >>> d = {'uno':1,2:'due','tre':'tre'}>>> d = {'uno':1,2:'due','tre':'tre'}>>> print d['uno']>>> print d['uno'] # visualizzo il valore# visualizzo il valore11 # dell'elemento 'uno'# dell'elemento 'uno'>>> d[4] = 'ciao'>>> d[4] = 'ciao' # nuovo elemento # nuovo elemento >>> del d['uno']>>> del d['uno'] # rimuovo un elemento# rimuovo un elemento>>> print d>>> print d # visualizzazione# visualizzazione{2:'due','tre':'tre',4:'ciao'}{2:'due','tre':'tre',4:'ciao'}>>> print d.keys()>>> print d.keys() # lista delle chiavi# lista delle chiavi[2,'tre',4][2,'tre',4]>>> print d.values()>>> print d.values() # lista dei valori# lista dei valori['due','tre','ciao']['due','tre','ciao']>>> print d.items()>>> print d.items() # lista degli elementi# lista degli elementi[(2,'due'),('tre','tre'),(4,'ciao')][(2,'due'),('tre','tre'),(4,'ciao')]

Page 19: 2008 python

FunzioniFunzioni● Verifica dei tipi sugli argomenti NO● Parametri di default YES● Parametri per chiave YES● Parametri come funzioni YES

Tutte le funzioni ritornano un valore!Tutte le funzioni ritornano un valore!in caso di assenza della istruzione in caso di assenza della istruzione returnreturnla funzione torna il valore di default la funzione torna il valore di default NoneNone

In In pythonpython non esite l'overloading della funzione! non esite l'overloading della funzione! due funzioni non possono avere lo stesso nome due funzioni non possono avere lo stesso nome

anche se hanno differenti argomenti!anche se hanno differenti argomenti!

Page 20: 2008 python

Funzioni (Funzioni (verifica dei tipi)verifica dei tipi)>>> def = foo(x):>>> def = foo(x): # definizione di una# definizione di una... ... print xprint x # funzione# funzione......>>> foo('ciao')>>> foo('ciao') # richiamo della funzione# richiamo della funzioneciaociao # # con una stringacon una stringa>>> foo(35)>>> foo(35) # richiamo della funzione# richiamo della funzione3535 # # con un interocon un intero

Nessuna verifica sui tipi dei parametri passati ?Nessuna verifica sui tipi dei parametri passati ?NO in realta' questo e' il NO in realta' questo e' il Dynamic Typing!Dynamic Typing!Se i parametri fossero stati es: Se i parametri fossero stati es: foo(x,y)foo(x,y)

e la funzione e la funzione print x * yprint x * ypythonpython avrebbe controllato e in caso di operazione non avrebbe controllato e in caso di operazione non

congrua avrebbe sollevato una eccezzione!congrua avrebbe sollevato una eccezzione!Questo e' lo Questo e' lo Strong Typing!Strong Typing!

Page 21: 2008 python

Funzioni Funzioni (parametri di default)(parametri di default)>>> x = 35>>> x = 35 # referenzio un intero# referenzio un intero>>> def = foo(a=x):>>> def = foo(a=x): # definizione di una# definizione di una... ... print aprint a # funzione# funzione......>>> foo('ciao')>>> foo('ciao') # richiamo della funzione# richiamo della funzioneciaociao # # con un parametrocon un parametro>>> foo()>>> foo() # richiamo della funzione# richiamo della funzione3535 # # senza parametrisenza parametri>>> x = 10>>> x = 10 # riassegnazione!# riassegnazione!>>> foo()>>> foo() # 35 o 10 ?# 35 o 10 ?3535 # perche' il parametro di# perche' il parametro di

# default e' assegnato una# default e' assegnato una# sola volta!# sola volta!durante l'istanzadurante l'istanza

Page 22: 2008 python

Funzioni Funzioni (parametri per chiave)(parametri per chiave)

>>> def = foo(x=1,y=2,z=3):>>> def = foo(x=1,y=2,z=3):... ... print 'x,y,z =',x,y,zprint 'x,y,z =',x,y,z......>>> foo()>>> foo() # richiamo della funzione# richiamo della funzionex,y,z = 1 2 3x,y,z = 1 2 3 # # senza parametrisenza parametri>>> foo(10)>>> foo(10) # passaggio dei parametri# passaggio dei parametrix,y,z = 10 2 3x,y,z = 10 2 3 # # per posizioneper posizione>>> foo(y=20)>>> foo(y=20) # passaggio dei parametri# passaggio dei parametrix,y,z = 1 20 3x,y,z = 1 20 3 # # per chiave (nome)per chiave (nome)>>> foo(10,z=30)>>> foo(10,z=30) # passaggio dei parametri# passaggio dei parametrix,y,z = 10 2 30x,y,z = 10 2 30 # # mistomisto

Page 23: 2008 python

Funzioni Funzioni (parametri come funzioni)(parametri come funzioni)

>>> def = foo(x=1,y=2,z=3):>>> def = foo(x=1,y=2,z=3):... ... print 'x,y,z =',x,y,zprint 'x,y,z =',x,y,z......>>> foo(>>> foo(*[4,5]*[4,5])) # passaggio dei parametri# passaggio dei parametrix,y,z = 4 5 3x,y,z = 4 5 3 # # contenuti in una listacontenuti in una lista>>> >>> foo(**{'x':10,'z':30})foo(**{'x':10,'z':30})

# passaggio dei parametri# passaggio dei parametrix,y,z = 10 2 30x,y,z = 10 2 30 # contenuti in un dizion.# contenuti in un dizion.

# y=(valore di default)# y=(valore di default)>>> def = pippo(>>> def = pippo(x,yx,y):):... ... return x(y)return x(y) # passaggio dei parametri# passaggio dei parametri...... # # dove x e' una funzionedove x e' una funzione>>> pippo(foo,9)>>> pippo(foo,9)x,y,z = 9 2 3x,y,z = 9 2 3

Page 24: 2008 python

Controllo dei flussiControllo dei flussi

● If then else YES● Case YES● While do YES● For YES● Omega-N YES● Assert YES

Page 25: 2008 python

if

else then

TrueFalse

if then elseif then else

>>> x = 3>>> x = 3>>> if x < 10: print 'ciao'>>> if x < 10: print 'ciao'......ciaociao>>> if x > 10: print 'ciao'>>> if x > 10: print 'ciao'...... else: print 'bye'else: print 'bye'......byebye

Da console interattiva:Da console interattiva:

Page 26: 2008 python

casecase

>>> x = 3>>> x = 3>>> if x == 1: print 'uno'>>> if x == 1: print 'uno'...... elif x==2: print 'due'elif x==2: print 'due'...... elif x==3: print 'tre'elif x==3: print 'tre'... else: print 'non esistente'... else: print 'non esistente'tretre>>>>>>

Da console interattiva:Da console interattiva:

if do ATrue

False

if do BTrue

False

Page 27: 2008 python

while dowhile do

>>> x = 3>>> x = 3>>> while x > 0: >>> while x > 0: ...... print 'x =', xprint 'x =', x... ... x -=1x -=1......x = 3x = 3x = 2x = 2x = 1x = 1>>>>>>

Da console interattiva:Da console interattiva:

Si puo' usare la chiave Si puo' usare la chiave breakbreak per interrompere per interrompere anticipatamente il loop.anticipatamente il loop.Si puo' usare la chiave Si puo' usare la chiave continuecontinue per saltare al per saltare al ciclo successivo senza eseguire le istruzione ciclo successivo senza eseguire le istruzione successive alla chiave.successive alla chiave.

if

do

True

False

Page 28: 2008 python

For For (interi,stringa)(interi,stringa)

>>> range(3)>>> range(3) # funzione che torna una# funzione che torna una[0,1,2][0,1,2] # lista di N elementi# lista di N elementi>>> for x in range(3):print 'x =',x>>> for x in range(3):print 'x =',x......x = 0x = 0 # ciclo di interi# ciclo di interix = 1x = 1x = 2x = 2

Da console interattiva:Da console interattiva:

>>> for x in 'ciao':print 'x =',x>>> for x in 'ciao':print 'x =',x......x = cx = c # ciclo di una stringa# ciclo di una stringax = ix = ix = ax = ax = ox = o

Page 29: 2008 python

For For (lista,tupla)(lista,tupla)

>>> for x in [1,2,3]:print 'x =',x>>> for x in [1,2,3]:print 'x =',x......x = 0x = 0 # ciclo di una lista# ciclo di una listax = 1x = 1x = 2x = 2

Da console interattiva:Da console interattiva:

>>> for x in ('c','i','a','o'):print 'x =',x>>> for x in ('c','i','a','o'):print 'x =',x......x = cx = c # ciclo di una tupla# ciclo di una tuplax = ix = ix = ax = ax = ox = o

Page 30: 2008 python

For For (dizionari)(dizionari)

>>> d=>>> d={'a':1,'b':2} {'a':1,'b':2} # creo un dizionario# creo un dizionario>>> for x,y in d.items()>>> for x,y in d.items():p:print 'foo =',x,yrint 'foo =',x,y......foo = a 1foo = a 1 # ciclo degli elementi# ciclo degli elementifoo = b 2foo = b 2>>> for x in d.keys()>>> for x in d.keys():p:print 'foo =',xrint 'foo =',x......foo = a foo = a # ciclo delle chiavi# ciclo delle chiavifoo = bfoo = b>>> for x in d.values()>>> for x in d.values():p:print 'foo =',xrint 'foo =',x......foo = 1 foo = 1 # ciclo dei valori# ciclo dei valorifoo = 2foo = 2>>>>>>

Da console interattiva:Da console interattiva:

Page 31: 2008 python

Omega-NOmega-N

>>> flg = 2>>> flg = 2 # flag di ctrl# flag di ctrl>>> while True:>>> while True:... ... pprint 'eseguo A'rint 'eseguo A'... if flg <=0: break... if flg <=0: break... print 'eseguo B'... print 'eseguo B'... flg -=1... flg -=1 # omega-1# omega-1......eseguo Aeseguo Aeseguo Beseguo Beseguo Aeseguo Aeseguo Beseguo Beseguo Aeseguo A>>>>>>

Da console interattiva:Da console interattiva:

if

do A

do B

True

False

Page 32: 2008 python

AssertAssert# l'istruzione assert verifica che una# l'istruzione assert verifica che una# determinata condizione sia vera# determinata condizione sia vera# durante l'esecuzione del programma# durante l'esecuzione del programma# altrimenti lo interrompe!# altrimenti lo interrompe!assert(x < 3)assert(x < 3) # if # if FalseFalse exit exit

Page 33: 2008 python

Potenzialita'Potenzialita'di python:di python:

- puo' operare con le matrici.- puo' operare con le matrici.- - puo' graficare dati.puo' graficare dati.- puo' plottare in tridimensionale.- puo' plottare in tridimensionale.- puo' creare interfaccie grafiche.- puo' creare interfaccie grafiche.- puo' aprire e salvare files in diversi formati.- puo' aprire e salvare files in diversi formati.- puo' gestire immagini di vari formati.- puo' gestire immagini di vari formati.- puo' interagire, anche a basso livello con il Sistema Operativo - puo' interagire, anche a basso livello con il Sistema Operativo

e con la macchina.e con la macchina.

Page 34: 2008 python

Le librerie Le librerie (packages)(packages)

In python librerie significa:In python librerie significa:files di script raccolti in ordine tipologico chiamati packages.files di script raccolti in ordine tipologico chiamati packages.

Un package non e' altro che una cartella dove all'interno troviamo:Un package non e' altro che una cartella dove all'interno troviamo:i files di script (moduli) i files di script (moduli) oltre al file speciale di nome: oltre al file speciale di nome: __init__.py__init__.pyche serve ad identificare la cartella come package.che serve ad identificare la cartella come package.

Il file speciale puo' essere anche vuoto.Il file speciale puo' essere anche vuoto.La prima volta che si importa un modulo dal packge vieneLa prima volta che si importa un modulo dal packge viene automaticamente richiamato ed eseguito il file automaticamente richiamato ed eseguito il file __init__.py__init__.py ! !Dunque si puo' usare questo file per inserire delle istruzioniDunque si puo' usare questo file per inserire delle istruzioni di preparazione al codice seguente ! di preparazione al codice seguente !

Vediamo alcune librerie e le loro potenzialita':

Page 35: 2008 python

NumericNumeric

* permette di lavorare efficientemente con grandiquantita' di dati organizzati in tabelle e matrici (array).* velocita' di calcolo enormemente superiore grazie all'ottimizzazione del codice e alla gestione della memoria.

Page 36: 2008 python

PyLab PyLab (plot 2d)(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

Page 37: 2008 python

SciPySciPy

SSi 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

Page 38: 2008 python

symPysymPy(calcolo simbolico)(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

Page 39: 2008 python

Python Image LibraryPython Image Library (pil) (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..

Page 40: 2008 python

AstrofisicaAstrofisica

* 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

Page 41: 2008 python

Fisica Atomica e MolecalareFisica Atomica e Molecalare

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

Page 42: 2008 python

VpythonVpython

Real-time 3D Graphics (Interactive Scenes)

Page 43: 2008 python

Interfaccie graficheInterfaccie grafiche

<- Tkinter(tlc/tk)

<- PyGtk pyQt4 ->

WxPython →

ecc..

Page 44: 2008 python

FineFineRiferimenti locali:Riferimenti locali: - www.velug.it # il sito del Velug - orcim.50webs.com # il mio sito - [email protected] # il mio indirizzo

Riferimenti del linguaggio: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 ?Domande ?