Upload
doantruc
View
215
Download
0
Embed Size (px)
Citation preview
PyS60PyS60
...avagy Python a mobilon...avagy Python a mobilon
2010/11. tavasz [email protected]
1. rész: Python alapok
2010/11. tavasz [email protected]
ÁÁttekintttekintééss
A nyelv tA nyelv töörtrtéénetenete
AlapvetAlapvetőő tudnivaltudnivalóókk
SzintaxisSzintaxis
NNééhháány egyszerny egyszerűű ppééldalda
2010/11. tavasz [email protected]
ÁÁttekintttekintééss
A nyelv tA nyelv töörtrtéénetenete
AlapvetAlapvetőő tudnivaltudnivalóókk
SzintaxisSzintaxis
NNééhháány egyszerny egyszerűű ppééldalda
2010/11. tavasz [email protected]
A nyelv tA nyelv töörtrtéénetenete
Guido van Rossum,Guido van Rossum,CWI (Centrum voor Wiskunde en Informatica), CWI (Centrum voor Wiskunde en Informatica), Amszterdam, HollandiaAmszterdam, Hollandia1989. december1989. december implementimplementáácicióó kezdetekezdete1990.1990. nem publikus kiadnem publikus kiadáások (CWI)sok (CWI)1991. febru1991. februáárr 0.9.0 (els0.9.0 (elsőő publikus verzipublikus verzióó))1994. janu1994. januáárr 1.0.01.0.02000. okt2000. októóberber 2.0.02.0.02008. december2008. december 3.0.03.0.02011. febru2011. februáárr 3.2 (legfrissebb)3.2 (legfrissebb)
2010/11. tavasz [email protected]
Az AlkotAz Alkotóó
““Benevolent Dictator for LifeBenevolent Dictator for Life”” (BDFL)(BDFL)
2010/11. tavasz [email protected]
ImplementImplementáácicióókk
CPythonCPython
Jython (Java Virtual Machine)Jython (Java Virtual Machine)
IronPython (.NET Common Language IronPython (.NET Common Language Runtime)Runtime)
Pyjamas (Javascript)Pyjamas (Javascript)
PyS60 (Symbian Series 60)PyS60 (Symbian Series 60)
PythonCE (Windows CE)PythonCE (Windows CE)
stb.stb.
2010/11. tavasz [email protected]
A nyelv elnevezA nyelv elnevezéésese
2010/11. tavasz [email protected]
ÁÁttekintttekintééss
A nyelv tA nyelv töörtrtéénetenete
AlapvetAlapvetőő tudnivaltudnivalóókk
SzintaxisSzintaxis
NNééhháány egyszerny egyszerűű ppééldalda
2010/11. tavasz [email protected]
A Python...A Python...
ááltalltaláános cnos cééllúú,,
magas szintmagas szintűű,,
objektumorientobjektumorientáált,lt,
ttööbbfbbfééle programozle programozáási paradigmsi paradigmáát tt táámogatmogatóó,,
platformfplatformfüüggetlenggetlen
...programoz...programozáási nyelv.si nyelv.
2010/11. tavasz [email protected]
AlapvetAlapvetőő tudnivaltudnivalóókk
A JavaA Java--hoz hasonlhoz hasonlóóan kan kööztes kztes kóódot (bytekdot (bytekóódot) dot) futtat az interpreter.futtat az interpreter.
A standard kA standard kóódkdköönyvtnyvtáár szr száámos megvalmos megvalóóssíított tott funkcifunkcióót tartalmaz (+ neten talt tartalmaz (+ neten taláálhatlhatóómegoldmegoldáások!).sok!).
A nyelvet elA nyelvet előőszeretettel hasznszeretettel hasznááljljáák prototk prototíípus pus fejlesztfejlesztéésre (gyors, egyszersre (gyors, egyszerűű).).
Python Software Foundation License (GNU Python Software Foundation License (GNU GPL kompatibilis, FSF GPL kompatibilis, FSF éés OSI s OSI ááltal elismert)ltal elismert)
2010/11. tavasz [email protected]
Modern, OO eszkModern, OO eszköözzöökk
OsztOsztáályok, objektumoklyok, objektumok
ÖÖrrööklklőőddééss
Automatikus szemAutomatikus szeméétgytgyűűjtjtéés (garbage s (garbage collection)collection)
Dinamikus tDinamikus tíípusmeghatpusmeghatáározrozáás (late binding)s (late binding)
KivKivéételkezeltelkezelééss
Unicode tUnicode táámogatmogatááss
2010/11. tavasz [email protected]
ÁÁttekintttekintééss
A nyelv tA nyelv töörtrtéénetenete
AlapvetAlapvetőő tudnivaltudnivalóókk
SzintaxisSzintaxis
NNééhháány egyszerny egyszerűű ppééldalda
2010/11. tavasz [email protected]
SzintaxisSzintaxis
EltEltéérréés az eddig megszokott nyelvekts az eddig megszokott nyelvektőől:l:nincs sznincs szüükskséég a vg a vááltozltozóók deklark deklaráálláássáárara
a sorok va sorok vééggéén nincs pontosvesszn nincs pontosvesszőő
a blokkok szerveza blokkok szervezéése behse behúúzzáásalapsalapúú(nincs kapcsosz(nincs kapcsoszáárróójel!)jel!)
minden vminden vááltozltozóó egy adott objektumra mutategy adott objektumra mutatóóreferenciareferencia
éértrtéékadkadáás, params, paramééterteráátadtadáás nem mindig a s nem mindig a megszokott mmegszokott móódon mdon műűkköödik!dik!
2010/11. tavasz [email protected]
TokenekTokenek
Whitespace karakterrel elvWhitespace karakterrel elváálasztvalasztva
FajtFajtáái: azonosi: azonosííttóó, kulcssz, kulcsszóó, oper, operáátor, delimiter, tor, delimiter, literliterááll
Az azonosAz azonosííttóó kezdkezdőődhet betdhet betűűvel vagy vel vagy alulvonalulvonáással, szerepelhet benne szssal, szerepelhet benne száámjegy is, a mjegy is, a kiskis-- éés nagybets nagybetűűket megkket megküüllöönbnbööztetjztetjüükk
Lefoglalt kulcsszavak pl.: assert, exec, lambda, Lefoglalt kulcsszavak pl.: assert, exec, lambda, pass, raise, yieldpass, raise, yield
2010/11. tavasz [email protected]
TTíípusok pusok éés vs vááltozltozóókk
TTíípusok: szpusok: száámok, stringek, nmok, stringek, n--esek (tuple), esek (tuple), listlistáák, szk, szóóttáárak (dictionary)rak (dictionary)
Null Null éértrtéék neve: Nonek neve: None
Logikai Logikai éértrtéékkkkéént minden tnt minden tíípus hasznpus hasznáálhatlhatóó(0, None, (0, None, üüres string, nulla elemres string, nulla eleműű gygyűűjtemjteméény ny => False)=> False)
ÉÉrtrtéékadkadáás: =s: =ÖÖsszehasonlsszehasonlííttáás: ==s: ==
2010/11. tavasz [email protected]
TTíípusok pusok éés vs vááltozltozóók (folytatk (folytatáás)s)
VVááltozltozóó--objektum objektum öösszerendelsszerendeléés s megszmegszüüntetntetéése: delse: del
GlobGlobáális lis éés loks lokáális vlis vááltozltozóókk(f(füüggvggvéényben felvett vnyben felvett vááltozltozóó alapalapéértelmezetten rtelmezetten loklokáális!)lis!)
2010/11. tavasz [email protected]
SzSzáámokmok
DecimDecimáálislis
OktOktáális (bevezetlis (bevezetőő 0)0)
HexadecimHexadecimáális (bevezetlis (bevezetőő 0x)0x)
LebegLebegőőpontos (x.yez => x,y * 10pontos (x.yez => x,y * 10zz))
String String →→ szszáám konverzim konverzióó::int('int('stringstring', ', szszáámrendszermrendszer))
2010/11. tavasz [email protected]
SzekvenciSzekvenciáákk
stringekstringek""szszöövegveg" vagy '" vagy 'szszööveg veg ''
Unicode string: u"Unicode string: u"szszöövegveg""
nn--esek (vektor)esek (vektor)('a' , 'b' , 'c') vagy ak('a' , 'b' , 'c') vagy akáár ('a' , "szia" , 3)r ('a' , "szia" , 3)
tuple('abc')tuple('abc')
( )( )
2010/11. tavasz [email protected]
SzekvenciSzekvenciáákk
listlistáákk['a' , 'b' , 'c'] vagy ak['a' , 'b' , 'c'] vagy akáár ['a' , "szia" , 3]r ['a' , "szia" , 3]
list('abc')list('abc')
[ ][ ]
rendezett szekvenciarendezett szekvencia
2010/11. tavasz [email protected]
A listA listáák fk füüggvggvéényeinyei
index(e) index(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának indexenak indexe
append(e) append(e) –– 'e' hozz'e' hozzááffűűzzéése a lista vse a lista vééggééhezhez
insert(i,e) insert(i,e) –– 'e' besz'e' beszúúrráása az isa az i--edik helyreedik helyre
remove(e) remove(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának tnak töörlrléésese
pop([i]) pop([i]) –– az iaz i--edik elemet kiveszi a listedik elemet kiveszi a listáábbóól l éés s visszaadja az visszaadja az éértrtéékkéétt
stb.stb.
2010/11. tavasz [email protected]
ListListáák generk generáálláásasa
A range fA range füüggvggvéény segny segíítstsééggéével tvel töörtrtéénik.nik.
range(trange(tóól, ig, ll, ig, lééppééskskööz)z)
PPééldldáák:k:range(3)range(3) =>=> [0 , 1 , 2][0 , 1 , 2]
range(1,3)range(1,3) =>=> [1 , 2][1 , 2]
range(1,6,2)range(1,6,2) =>=> [1 , 3 , 5][1 , 3 , 5]
2010/11. tavasz [email protected]
SzSzóóttáárakrak
"Kulcsokkal azonos"Kulcsokkal azonosíított elemek rendezetlen tott elemek rendezetlen halmaza."halmaza."
{1: 'a' , 2: 'b' , 4: 'd'}{1: 'a' , 2: 'b' , 4: 'd'}
FFüüggvggvéényei:nyei:haskey(k)haskey(k)
get(k), get(k,x)get(k), get(k,x)
items(), keys(), values()items(), keys(), values()
iteritems(), iterkeys(), itervalues()iteritems(), iterkeys(), itervalues()
2010/11. tavasz [email protected]
ElEláágazgazááss
A blokkokat csak behA blokkokat csak behúúzzáással jelssal jelööljljüük, nincs k, nincs zzáárróójel!jel!
PPéélda:lda:if szam>0:if szam>0:……
elif szam<0:elif szam<0:……
else:else:......
2010/11. tavasz [email protected]
CiklusokCiklusok
"for" szerkezet"for" szerkezet"foreach" jelleg"foreach" jellegűű szintaktikaszintaktika
PPééldldáák:k:for x in lista:for x in lista:
print xprint xfor kulcs, ertek in szotar.items():for kulcs, ertek in szotar.items():
print kulcs, ' print kulcs, ' -- ', ertek', ertek
A "klasszikus" for ciklus:A "klasszikus" for ciklus:for i in xrange(for i in xrange(ttóól, ig, ll, ig, lééppéésksköözz):):print i, ' , 'print i, ' , '
2010/11. tavasz [email protected]
Ciklusok (folytatCiklusok (folytatáás)s)
"while" szerkezet"while" szerkezet
A megszokott logika szerint mA megszokott logika szerint műűkköödik.dik.
PPéélda:lda:i=0i=0while i<3:while i<3:print iprint ii=i+1i=i+1
2010/11. tavasz [email protected]
Fibonacci sorozatFibonacci sorozat
a, b = 0, 1a, b = 0, 1while b < 10:while b < 10:
print bprint ba, b = b, a+ba, b = b, a+b
2010/11. tavasz [email protected]
FFüüggvggvéényeknyek
"def" kulcssz"def" kulcsszóó
Egy visszatEgy visszatéérréési si éértrtéék, de visszaadhat nk, de visszaadhat n--eseket eseket is.is.
PPéélda:lda:def hello():def hello():
print "Hello World!"print "Hello World!"returnreturn
2010/11. tavasz [email protected]
Lambda fLambda füüggvggvéényeknyek
"On the fly" f"On the fly" füüggvggvéények, aknyek, akáár nr néév nv néélklküül is.l is.
Nincs "return"!!!Nincs "return"!!!
Egyetlen kifejezEgyetlen kifejezéés lehet a ts lehet a töörzse.rzse.
Mindig kell legyen visszatMindig kell legyen visszatéérréési si éértrtééke.ke.
2010/11. tavasz [email protected]
Lambda fLambda füüggvggvéények 2.nyek 2.
PPééldldáák:k:lambda a, b: a+blambda a, b: a+b
negyzet = lambda x: x**2negyzet = lambda x: x**2print negyzet(8)print negyzet(8)
lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print filter(lambda x: x % 3 == 0, lista)print filter(lambda x: x % 3 == 0, lista)
2010/11. tavasz [email protected]
Lambda fLambda füüggvggvéények 3.nyek 3.
Egy Egy öösszetett psszetett péélda:lda:def make_incrementor(n):def make_incrementor(n):
return lambda x: x + nreturn lambda x: x + n
f = make_incrementor(2)f = make_incrementor(2)print f(10)print f(10)
Mi is tMi is töörtrtéénik itt?nik itt?
Mit fog kiMit fog kiíírni a print frni a print füüggvggvéény?ny?
2010/11. tavasz [email protected]
OsztOsztáályoklyok
class class osztosztáálynlynéévv ((őősosztsosztáályoklyok):):osztosztáálytlytöörzsrzs
TTööbbszbbszöörröös s öörrööklklőőddéés van, interfs van, interféészek szek nincsenek!nincsenek!
Az osztAz osztáály metly metóódusainak kdusainak kööteleztelezőő paramparaméétere a tere a self (szerepe, mint a self (szerepe, mint a thisthis).).
SpeciSpeciáális metlis metóódus: a konstruktor.dus: a konstruktor.def __init__(self, def __init__(self, ttööbbi_parambbi_paramééterekterek):):
......
2010/11. tavasz [email protected]
OsztOsztáályok attriblyok attribúútumaitumai
AttribAttribúútumot adhatunk az oszttumot adhatunk az osztáályhoz lyhoz éés s kköözvetlenzvetlenüül az egyes objektum pl az egyes objektum pééldldáányokhoz nyokhoz is.is.
Ha egy osztHa egy osztáály adott attribly adott attribúútumtumáát t megvmegvááltoztatjuk, az hatltoztatjuk, az hatáással lesz az ssal lesz az öösszes sszes olyan polyan pééldldáány adott attribny adott attribúútumtumáára, ahol azt ra, ahol azt mméég nem vg nem vááltoztattuk meg pltoztattuk meg pééldldáány szinten.ny szinten.
2010/11. tavasz [email protected]
KivKivéételkezeltelkezelééss
LogikLogikáája a megszokott.ja a megszokott.
Nem kNem kööteleztelezőő megadni a kivmegadni a kivéétel ttel tíípuspusáát.t.
OpcionOpcionáálisan klisan köövetkezhet egy "else" vetkezhet egy "else" éés egy s egy "finally" "finally" áág is.g is.
PPéélda:lda:try:try:1/01/0
except ZeroDivisionError:except ZeroDivisionError:print "Nullprint "Nulláával nem osztunk!"val nem osztunk!"
2010/11. tavasz [email protected]
EgyebekEgyebek
MegjegyzMegjegyzéések: #sek: #(a sor v(a sor vééggééig ig éérvrvéényes)nyes)
TTööbb soros utasbb soros utasííttáásoksokSor vSor vééggéén 'n '\\' (backslash)' (backslash)
Ha nem zHa nem záártuk be a nyitott zrtuk be a nyitott záárróójelet, a kjelet, a köövetkezvetkezőősort automatikusan folytatsort automatikusan folytatóó sornak veszi.sornak veszi.
2010/11. tavasz [email protected]
ÁÁttekintttekintééss
A nyelv tA nyelv töörtrtéénetenete
AlapvetAlapvetőő tudnivaltudnivalóókk
SzintaxisSzintaxis
NNééhháány egyszerny egyszerűű ppééldalda
Hello World!Hello World!
print "Hello World!"print "Hello World!"
For ciklusFor ciklus
szotar = {1:"egyik", 2:"masik", 3:"harmadik"}szotar = {1:"egyik", 2:"masik", 3:"harmadik"}
for kulcs, ertek in szotar.items():for kulcs, ertek in szotar.items():
print kulcs, "print kulcs, "--", ertek", ertek
for szam in xrange(1,21):for szam in xrange(1,21):
print szam,print szam,
While ciklus, kivWhile ciklus, kivéételektelektry:try:
while i<10:while i<10:
print i,print i,
i=i+2i=i+2
except:except:
print "Hiba!"print "Hiba!"
While ciklus, kivWhile ciklus, kivéételektelektry:try:
i=0i=0
while i<10:while i<10:
print i,print i,
i=i+2i=i+2
except:except:
print "Hiba!"print "Hiba!"
Lista szLista szűűrréése, lambda se, lambda ffüüggvggvéényeknyek
lista = range(1,21)lista = range(1,21)print filter(lambda x: x % 4 == 0, lista)print filter(lambda x: x % 4 == 0, lista)
Lambda fLambda füüggvggvéényny
def make_increment(n):def make_increment(n):
return lambda x: x+nreturn lambda x: x+n
f = make_increment(5)f = make_increment(5)
g= make_increment(3)g= make_increment(3)
print f(10)print f(10)
print g(10)print g(10)
FeladatFeladat
KKéészszíítstsüünk oszthatnk oszthatóóssáágot vizsggot vizsgáállóó ffüüggvggvéényt.nyt.
GenerGenerááljunk egy 1ljunk egy 1--ttőől 50l 50--ig terjedig terjedőő szszáámlistmlistáát, t, szszűűrjrjüük ki az elkk ki az elkéészszíített ftett füüggvggvéény segny segíítstsééggéével a vel a hháárommal / nrommal / nééggyel / ggyel / ööttel / httel / hééttel / kilenccel ttel / kilenccel
oszthatoszthatóó szszáámokat.mokat.
MegoldMegoldáássdef oszthatosag(mivel):def oszthatosag(mivel):
return lambda n: n % mivel ==0return lambda n: n % mivel ==0
lista = range(1,51)lista = range(1,51)
print "3print "3--mal:", filter(oszthatosag(3),lista)mal:", filter(oszthatosag(3),lista)
print "4print "4--gyel:", filter(oszthatosag(4),lista)gyel:", filter(oszthatosag(4),lista)
print "5print "5--tel:", filter(oszthatosag(5),lista)tel:", filter(oszthatosag(5),lista)
print "7print "7--tel:", filter(oszthatosag(7),lista)tel:", filter(oszthatosag(7),lista)
print "9print "9--cel:", filter(oszthatosag(9),lista)cel:", filter(oszthatosag(9),lista)
2010/11. tavasz [email protected]
Minimalista megoldMinimalista megoldááss
def oszthatosag(mivel):def oszthatosag(mivel):
return lambda n: n % mivel ==0return lambda n: n % mivel ==0
for i in [3,4,5,7,9]:for i in [3,4,5,7,9]:
print i,":", filter(oszthatosag(i),range(1,51))print i,":", filter(oszthatosag(i),range(1,51))
AbszolAbszolúút minimalista megoldt minimalista megoldááss
for i in [3,4,5,7,9]:for i in [3,4,5,7,9]:
print i,":", filter(print i,":", filter(lambda n: n % i ==0lambda n: n % i ==0, range(1,51)), range(1,51))
2010/11. tavasz [email protected]
Feladat2Feladat2
GenerGeneráálj 20 db vlj 20 db vééletlenszletlenszáámot 0 mot 0 éés 10 ks 10 köözzöött! tt! ÍÍrd rd ki, melyik szki, melyik száámbmbóól hl háány darab van a listny darab van a listáában!ban!
# v# vééletlenszletlenszáám generm generáálláás: random moduls: random modul
2010/11. tavasz [email protected]
MegoldMegoldááss
import randomimport randomlista=[]lista=[]for i in xrange(20):for i in xrange(20):
lista.append(random.randint(0,10))lista.append(random.randint(0,10))print listaprint listafor i in xrange(10):for i in xrange(10):
print i,print i,””: : ””, lista.count(i), lista.count(i)# vagy: print i,# vagy: print i,””: : ””, len(filter(lambda x: x==i, lista)), len(filter(lambda x: x==i, lista))
2010/11. tavasz [email protected]
2010/11. tavasz [email protected]
TovTováábbi anyagokbbi anyagok
http://www.python.org/http://www.python.org/
http://opensource.nokia.com/projects/pythonhttp://opensource.nokia.com/projects/pythonfors60fors60
http://mobilenin.com/pys60/menu.htmhttp://mobilenin.com/pys60/menu.htm
http://www.forum.nokia.com/Tools_Docs_anhttp://www.forum.nokia.com/Tools_Docs_and_Code/Tools/Runtimes/Python_for_S60/d_Code/Tools/Runtimes/Python_for_S60/
2010/11. tavasz [email protected]
TovTováábbi anyagokbbi anyagok
KKöönyvek:nyvek:Mark Pilgrim: Mark Pilgrim: Dive Into PythonDive Into Python
ForstnerForstner--EklerEkler--KelKeléényi: nyi: BevezetBevezetéés a mobilprogramozs a mobilprogramozáásbasba