Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
HassenRiahi
2009/2010
10/21/09
Sommario
1. Denizionevariabili
2. Stringhe
3. Liste
4. Cicli
5. Indentazione
6. Test
7. Funzioni
8. Dizionari
9. ClassieprogrammazioneOO
10.PythonTypeSystem
10/21/09
Dovetrovareinformazioni
Sitoucialedellinguaggio:interpretelinux/
win/MacOS(ulVmaversione2.3),IDEperWin,
tutorial,reference,h[p://www.python.org
DiveintoPython(freebookmoltocompleto)
h[p://diveintopython.org/index.html
"HowtoThinkLikeaComputerScienVstwith
Python(piintroduavo)h[p://
greenteapress.com/thinkpython
Google>Python
10/21/09
Unlinguaggiointerpretato
Python,adierenzadiC/C++,e`interpretato(anchese
poimolteimplementazionilocompilanopermoVvidi
ecienza):sipuo`interagireconunamacchinavirtuale
Pythoninmanierainteraava
Prompt:>>>
#questoe`uncommento(come//inC++)
Es.
>>>2+2
4
>>>10/3#divisioneintera
3
10/21/09
Denizionevariabili
>>>x=7
Abbiamocreatounavariabilex,diVpointero,
contenenteilvalore7
>>>x=5.5
xe`divenutaunavariabilereale...
>>>a=b=c=0
siaachebchecassumonoilvalore0
10/21/09
Stringhe
Lestringhesipossonoscrivereinvarimodi:
'unpo\'dicara6eri
oppure,sepreferisco:"unpo'dicara6eri
'\n'vaacapocomeinC
10/21/09
Stringhe:concatenazione,ripeVzione
>>>a=TEST!"
>>>Questoun+a
QuestounTEST!
>>>a*7
TEST!TEST!TEST!TEST!TEST!TEST!TEST!'
>>>a*0
''#stringavuota
10/21/09
Stringheeindici
InPythonlestringhesonosequenze:sipuo`
accedereadelemenVtramiteindici
>>>"Questalezione"[4]
't'
>>>"Preferivofarealro"[0:9]
'Preferivo'
N.B.9esclusonelloslice
10/21/09
Noncambiarelastringa
Lestringhenonsonomodicabili
>>>casa="voglioandareacasa";casa[4]='i'
Traceback(mostrecentcalllast):File
"<stdin>",line1,in?TypeError:objectdoesn't
supportitemassignment
Pero`possocopiarle:
>>>case[a=casa[0:5]+'a'+casa[6:]
10/21/09
Ancoraslice
>>>parola="casa"
>>>parola[:2]
'ca'
>>>parola[2:]
'sa'
>>>parola[:]
'casa'#N.B.e`unacopia
>>>parola[2]#ancheall'indietro!
's'
>>>len(parola)#lunghezzadiunasequenza
4
|c|a|s|a|
|0|1|2|3|4
|4|3|2|1|
10/21/09
10
Liste
FondamentaliemoltousateinPython
Sonosequenze,comelestringhe(indici,slice,
len)Pero`sonomodicabili
Assumonoancheilruolochee`degliarrayin
altrilinguaggi.Es:
>>>lista=["unalista",4,6.2]
>>>len(lista)
3
10/21/09
11
append
unclassicodelleliste:siaggiungeelementoin
codaconappend
>>>lista.append(3)
>>>lista
['unalista',4,6,2,3]
10/21/09
12
Cicli
ParVamocolciclowhile
unsempliceesempio:inumeridiFibonacci
a,b=0,1#assegnamentocontupla
whileb<10:
printb,#","serveadevitare\nnale
a,b=b,a+b
comedelimitoilbloccodiistruzioni?(inC/C++
siusa{...})
10/21/09
13
SVlediindentazione
InPython,adierenzadellastragrandemaggioranza
deglialtrilinguaggi,ilcorpodelwhile(unbloccoin
generale)e`delimitatopermezzodellaindentazione
istr1
istr2
istr3block1
istr4block2
istr5
possousarespaziotab,bastachesianolostessonumero
10/21/09
14
SVlediindentazione
{istr1;//inC
istr2;
{
istr3;istr4;istr5;
}}
10/21/09
15
if
Laformapiu`generale:
ifcond1:
#cond1vera
elifcond2:#cond2vera
elifcond3:#cond3vera...
else:#nemmenounavera
10/21/09
16
ilfor
Ilfor,adierenzadelC,iterasusequenze(es.
stringheoliste)inpraVca:
foriinseq:
#faiqualcosaconi
Peresempio:
>>>foriin['Maquesta','e`',1,'lista?']:
...printi,
Maquestae`1lista?
10/21/09
17
range()
rangeperme[ediiteraresuunasequenzadi
numeri(senzadoverliscriveretua)
>>>range(10)
[0,1,2,3,4,5,6,7,8,9]
Comealsolito,estremosuperioreescluso.
10/21/09
18
Lefunzioni
Possiamodenirefunzionicondef:
deff(n):
"cosafaf""
ifn==0:
return1
else:
returnn*f(n1)
10/21/09
19
Campod'azionestaaco
Capiscodallastru[urastaVcadelprogrammadovesonodeniVinomiades.
divariabilechestousando
>>>deff():
x=5
g()
>>>defg():
printx
>>>f()
Traceback(mostrecentcalllast):
File"<pyshell#7>",line1,intoplevel
g()
File"<pyshell#6>",line2,ing
printx
NameError:globalname'x'isnotdened
10/21/09
20
Funzioni:argomenVdidefault
defincipiVzza(seq,incipit='banale'):
seq[0]=incipit
returnseq
>>>a=[1,2,3]
>>>incipiVzza(a)
['banale',2,3]
>>>incipiVzza(a,1)...
10/21/09
21
ArgomenVconparolechiave
defparrot(voltage,state='asV',acVon='voom',
type='NorwegianBlue'):
print"Thisparrotwouldn't",acVon,
print"ifyouput",voltage,"Voltsthroughit."
print"Lovelyplumage,the",type
print"It's",state,"!"
Sipuo`chiamareinquesVmodi:
parrot(1000)
parrot(acVon='VOOOOOM',voltage=1000000)
parrot('athousand',state='pushingupthedaisies')
parrot('amillion','bereoflife','jump')
10/21/09
22
ArgomenVconparolechiave
Inquestomodonellinvocazionedellafunzione
possoalternareindierentementeparametri
a[ualieparametrididefault(purchil
risultatonalesiaconsistente)
10/21/09
23
Idizionari
SonoanchechiamaVmemorieassociaaveo
arrayassociaavi
Adierenzadellesequenze,gliindicinonsono
interimachiavi(es.stringhe)
Sintassi:{chiave1:val1,chiave2:val2,...}
ilmetodokeys()resatuiscelalistadellechiavi
diundizionario
10/21/09
24
dizionari:qualcheesempio...
>>>tel={'jack':4098,'sape':4139}
>>>tel['guido']=4127
>>>tel
{'sape':4139,'guido':4127,'jack':4098}
>>>tel['jack']
4098
>>>deltel['sape']
>>>tel['irv']=4127
>>>tel
{'guido':4127,'irv':4127,'jack':4098}
>>>tel.keys()
['guido','irv','jack']
>>>tel.has_key('guido')
True
10/21/09
25
dir()
dir()applicatoaqualcosamidicequalinomisonodeniVinquesto
qualcosa(unpo'vago...).Esempio:
>>>a=[1,2,3]
>>>dir(a)['__add__','__class__','__contains__,
'__dela[r__','__delitem__','__delslice__','__doc__','__eq__,
'__ge__','__geta[ribute__','__geVtem__','__getslice__','__gt__,
'__hash__','__iadd__','__imul__','__init__','__iter__','__le__,
'__len__','__lt__','__mul__','__ne__','__new__','__reduce__,
'__reduce_ex__','__repr__','__rmul__','__seta[r__','__seVtem__,
'__setslice__','__str__','append','count','extend','index','insert,
'pop','remove','reverse','sort']
NB:lanotazione__qualcosa__(dove__sonoduecara6eridi
so6olineatura)e`abbastanzaclassicainPython:sonometodied
a6ribuaconruoliparacolarisivedemeglionellapartesullaOO
10/21/09
26
ClassieprogrammazioneOO
Pythonda2.2introducelecosidde[enuove
classinoivedremoesclusivamentequestele
altrerimangonoperragionidicompaabilit
10/21/09
27
Denizionediclasse
classNomeClasse(object):
a=5
def__init__(self,altro):ilprogenitorediogniclasse
...costru(oreobject
...
a=foofooselfsempreilprimoargomentodiun
metodo:siriferisceall'ogge(ostesso
x=NomeClasse(a)
a(ribu8sonomodicabilidinamicamenteeaccessibili
10/21/09
28
elemenV"privaV"
Tu[oe`pubblico,ingenere(inveceades.inC
++devodenirelapartevisibilepermezzodi
public:)
unmodoper"nascondere"metodiea6ribua,
e`darelorounnomecheiniziaconundoppio
'_'peres.__metodo
l'a6ributo/metodocreatoinquestocasohail
nomeeemvo_nomedellaclasse__metodo,
piu6ostodiciledausarepererrore...
10/21/09
29
Ereditarieta`
>>>classA(object):
deff(self):print"Padre"
>>>classB(A):
deff(self):print"Figlio"
>>>x=A()
>>>y=B()
>>>x.f()
Padre
>>>y.f()
Figlio
SupportalereditarietamulVpla(noncomeJAVA)
10/21/09
30
Overload
Nonpossofareoverloading(sehopiumetodiconnumerodiverso
diparametrivienechiamatoquellochehodenitoperulVmo)
>>>classA(object):
deff(self):
printmetodosenzaparametri"
deff(self,n):
printmetodoconparametri"
>>>x=A()
>>>x.f()
Traceback(mostrecentcalllast):File"<pyshell#7>",line1,intoplevel
x.f()TypeError:f()takesexactly2arguments(1given)>>>x.f(2)
10/21/09
31
PythonTypeSystem
EunlinguaggioVpizzato
NonfastaVctypechecking(mafadynamic
typechecking:glierroridiVpovengono
rilevaV,maarunVme)
IlVpodellevariabilinonedichiarato
>>>x=0#xboundtoanintegerobject
>>>x="Hello"#nowit'sastring
>>>x=[1,2,3]#andnowit'salist
10/21/09
32
PythonTypeSystem
Nonce`nessunadierenzatravariabiliche
contengonovaloriequellechecontengono
funzioni(callable/noncallable)
>>>deff():
>>>return66
>>>x=f
>>>x()
66
10/21/09
33
PythonTypeSystem
Possoanchepassarelefunzionicomeparametri
>>>deff(x):
x()
>>>defa():
print"Iosonoa"
>>>defb():
print"Iosonob"
>>>f(a)
Iosonoa
>>>f(b)
Iosonob
10/21/09
34
DynamicTypeChecking
O[engounerrorediVpoquandopythonnon
trovala[ributoacuistoaccedendocioe:
invocounmetodonondenitodellogge[oo
leggouncamponondenitodellogge[o
10/21/09
35
DynamicTypeChecking
classlibro(object):
def__init__(self,contenuto):
self.contenuto=contenuto
contenuto="Nelmezzodelcammindinostravita"
defread(self):
returnself.contenuto
defstampaContenuto(l):
printl.read()
x=libro("Nelmezzodelcammindinostravita")
y="Questonone'unlibro"
importrandom
ifrandom.random()<0.5:QuestoprogrammahaunerrorediVpomaviene
stampaContenuto(y)rilevatonel50%deicasi
else:
stampaContenuto(x)
10/21/09
36
DynamicTypeChecking
Inquestocasoo[engouneccezione
Traceback(mostrecentcalllast):File
"<pyshell#215>",line2,intoplevel
stampaContenuto(y)File"<pyshell#206>",line
2,instampaContenutoprintl.read()
A[ributeError:'str'objecthasnoa[ribute
'read'
10/21/09
37
DynamicTypeChecking
classP(object):
valore=5
>>>x=P()
>>>x.valore=10
>>>x.valore
10
>>>x.valoree=20
Nessunaeccezione!!=>in
seprovoad
assegnare(binding)una[ributochenonesiste
pythonlocreaalmomento!
10/21/09
38
DynamicTypeChecking
Quindiinquestomomentolavariabilexeuna
referenceaunistanzadiPconINPIUuna[ributo
valoree
>>>type(x)
<class'__main__.P'>
>>>dir(x)['__class__','__dela[r__','__dict__',
'__doc__','__geta[ribute__','__hash__',
'__init__','__module__','__new__',
'__reduce__','__reduce_ex__','__repr__',
'__seta[r__','__str__','__weakref__','valore',
'valoree']
10/21/09
39
DynamicTypeChecking
Risoluzionedeglia[ribuV(esx.a[r)
primacerconellistanzax
poicerconellaclassedix
innecerconelleclassipadre(ereditarieta)
10/21/09
40
Assegnamento1
InPythonlaccessoaglioggeaavvienetramite
reference(analogodiquantoavvieneinJAVA
conleclassi)
Nonesistedichiarazionedellevaribili:
vengonoistanziatequandovisiassegnaun
valoreperlaprimavolta
NonsipuuVlizzareunavariabileprimache
siastatainizializzata
10/21/09
41
Assegnamento2
Quandosiesegueunassegnamentoinrealt
vienecopiatalareferencenonlogge[o
>>>a=[1,2,3]
>>>b=a
>>>id(a)#id(var)resVtuiscel'indirizzodivar
135533752
>>>id(b)
135533752
Sicreaunalias:modicandoamodicoancheb
10/21/09
42
Assegnamento3
a=[1,2,3]a
1 2 3
b=aa
1
b
a.append(4)a
1 2 3 4
b
10/21/09
43
Assegnamento4
InPythonglioggeasidividonoin:
Oggeamutabiliilcuivalorepuesseremodicato(liste,dizionari,classi)
>>>a=[1,2,3,4]
>>>id(a)
1075751756
>>>a[0]=1
>>>id(a)
1075751756
Oggeaimmutabiliilcuivalorenonpuesseremodicatosenzacreareunnuovoogge[o
>>>a=5
>>>id(a)
135533752
>>>a=3
>>>id(a)
135531768
10/21/09
44
MutabilieImmutabili
Tipo
Mutabile?
Numeri
No
Stringhe
No
Liste
Si
Dizionari
Si
10/21/09
45
Assegnamento5
a=1a1
b=aa1
bNewintobject
a=a+1a2createdbyaddop.
b1oldreference
deletedbyassignment
10/21/09
46
Passaggiodiparametri
InPythonilpassaggiodiparametriavvieneperindirizzo:i
parametriformalidiventanodeglialiasdeiparametria[uali
>>>a=[1,2]
>>>defswap(x):
...temp=x[0]
...x[0]=x[1]
...x[1]=temp...
>>>swap(a)
>>>printa
[2,1]
10/21/09
47
Passaggiodiparametri
NB:seinvecedimodicarelogge[olafunzioneesegueun
assegnamento(ovverocreaunnuovobinding),si
interrompeillegametraparametroformaleea[ualeche
fannoorariferimentoaduecelledisVnte
>>>deff(x):
...x=1#creounnuovobinding.Perdoil
collegamentoconl'ogge[opassatoper
parametro
...>>>a=1000
>>>f(a)
>>>printa#stampa1000
10/21/09
48
Pythoneoltre
Esistononumerosecara[erisVchediPythonche
nonsonostatearontate:
SupportoperilmulVthread(Javastyle)
ServizidelsistemaoperaVvo
Protocollidiretetcp,h[p,smtp,
ParsingXML,Debugger,PyUnit(la
versionePythondiJUnit),Libreriegrache2D
(Tkinter,PyQt)eanche3D(SDL)
10/21/09
49