Sei sulla pagina 1di 49

IntroduzioneaPython

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