PyS60...avagy Python a mobilon
1. rész: Python alapok 2
Áttekintés A nyelv törtt rténete Alapvető tudnivalók Szintaxis Néhány egyszerű példa 3
Áttekintés A nyelv törtt rténete Alapvető tudnivalók Szintaxis Néhány egyszerű példa 4
A nyelv törtt rténete Guido van Rossum, CWI (Centrum voor Wiskunde en Informatica), Amszterdam, Hollandia 1989. december implementáci ció kezdete 1990. nem publikus kiadások (CWI) 1991. február 0.9.0 (első publikus verzió) 1994. január 1.0.0 2000. október 2.0.0 2008. december 3.0.0 2011. február 3.2 (legfrissebb) 5
Az Alkotó Benevolent Dictator for Life (BDFL) 6
Implementáci ciók CPython Jython (Java Virtual Machine) IronPython (.NET Common Language Runtime) Pyjamas (Javascript) PyS60 (Symbian Series 60) PythonCE (Windows CE) stb. 7
A nyelv elnevezése 8
Áttekintés A nyelv törtt rténete Alapvető tudnivalók Szintaxis Néhány egyszerű példa 9
A Python... általános célú, c magas szintű, objektumorientált, többféle programozási paradigmát t támogatt mogató, platformfüggetlen...programozási nyelv. 10
Alapvető tudnivalók A Java-hoz hasonlóan an köztes k kódot k (bytekódot) futtat az interpreter. A standard kódkk dkönyvtár r számos megvalósított funkciót t tartalmaz (+ neten találhat lható megoldások!). A nyelvet előszeretettel használj lják k prototípus pus fejlesztésre sre (gyors, egyszerű). Python Software Foundation License (GNU GPL kompatibilis, FSF és s OSI által elismert) 11
Modern, OO eszközök Osztályok, objektumok Öröklődés Automatikus szemétgy tgyűjtés s (garbage collection) Dinamikus típusmeghatt pusmeghatározás s (late binding) Kivételkezel telkezelés Unicode támogatt mogatás 12
Áttekintés A nyelv törtt rténete Alapvető tudnivalók Szintaxis Néhány egyszerű példa 13
Szintaxis Eltérés s az eddig megszokott nyelvektől: l: nincs szüks kség g a változv ltozók k deklarálására ra a sorok végén v n nincs pontosvessző a blokkok szervezése se behúzásalap salapú (nincs kapcsoszárójel!) minden változv ltozó egy adott objektumra mutató referencia értékadás, paraméter terátadás s nem mindig a megszokott módon m működik! m 14
Tokenek Whitespace karakterrel elválasztva lasztva Fajtái: azonosító,, kulcsszó,, operátor, delimiter, literál Az azonosító kezdődhet dhet betűvel vagy alulvonással, szerepelhet benne számjegy is, a kis- és s nagybetűket megkülönb nböztetjük Lefoglalt kulcsszavak pl.: assert, exec, lambda, pass, raise, yield 15
Típusok és s változv ltozók Típusok: számok, stringek, n-esek n (tuple), listák, szótárak (dictionary) Null érték k neve: None Logikai értékként minden típus t használhat lható (0, None, üres string, nulla elemű gyűjtem jtemény => False) Értékadás: = Összehasonlítás: s: == 16
Típusok és s változv ltozók k (folytatás) Változó-objektum objektum összerendelés megszüntet ntetése: del Globális lis és s lokális lis változv ltozók (függv ggvényben felvett változv ltozó alapértelmezetten lokális!) lis!) 17
Számok Decimális Oktális (bevezető 0) Hexadecimális (bevezető 0x) Lebegőpontos (x.yez => x,y * 10 z ) String szám m konverzió: string', int('string', sz számrendszer) 18
Szekvenciák stringek "szöveg"" vagy ' 'szöveg ' Unicode string: u"szöveg" n-esek (vektor) ('a', 'b', 'c') vagy akár r ('a', "szia", 3) tuple('abc') ( ) 19
Szekvenciák listák ['a', 'b', 'c'] vagy akár r ['a', "szia", 3] list('abc') [ ] rendezett szekvencia 20
A listák k függvf ggvényei index(e) 'e' első előfordul fordulásának indexe append(e) 'e' hozzáfűzése a lista végéhezv insert(i,e) 'e' beszúrása sa az i-edik i helyre remove(e) 'e' első előfordul fordulásának törlt rlése pop([i]) az i-edik i elemet kiveszi a listából és visszaadja az értékét stb. 21
Listák k generálása A range függvf ggvény segíts tségével törtt rténik. range(tól, ig, lépéskl sköz) Példák: range(3) => [0, 1, 2] range(1,3) => [1, 2] range(1,6,2) => [1, 3, 5] 22
Szótárak "Kulcsokkal azonosított elemek rendezetlen halmaza." {1: 'a', 2: 'b', 4: 'd'} Függvényei: haskey(k) get(k), get(k,x) items(), keys(), values() iteritems(), iterkeys(), itervalues() 23
Elágaz gazás A blokkokat csak behúzással jelölj ljük, nincs zárójel! Példa: if szam>0: elif szam<0: else:... 24
Ciklusok "for" szerkezet "foreach" jellegű szintaktika Példák: for x in lista: print x for kulcs, ertek in szotar.items(): print kulcs, ' - ', ertek A "klasszikus" for ciklus: for i in xrange(tól, ig, lépéskl sköz): print i, ', ' 25
Ciklusok (folytatás) "while" szerkezet A megszokott logika szerint működik. m Példa: i=0 while i<3: print i i=i+1 26
Fibonacci sorozat a, b = 0, 1 while b < 10: print b a, b = b, a+b 27
Függvények "def" kulcsszó Egy visszatérési si érték, de visszaadhat n-eseket n is. Példa: def hello(): print "Hello World!" return 28
Lambda függvf ggvények "On the fly" függvf ggvények, akár r név n v nélkn lkül l is. Nincs "return"!!! Egyetlen kifejezés s lehet a törzse. t Mindig kell legyen visszatérési si értéke. 29
Lambda függvf ggvények 2. Példák: lambda a, b: a+b negyzet = lambda x: x**2 print negyzet(8) lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print filter(lambda x: x % 3 == 0, lista) 30
Lambda függvf ggvények 3. Egy összetett példa: p def make_incrementor(n): return lambda x: x + n f = make_incrementor(2) print f(10) Mi is törtt rténik itt? Mit fog kiírni a print függvf ggvény? 31
Osztályok class osztályn lynév (ősosztályok): osztályt lytörzs Többszörös öröklődés s van, interfészek nincsenek! Az osztály metódusainak kötelezk telező paramétere a this). self (szerepe, mint a this). Speciális metódus: a konstruktor. bbi_paraméterek): def init (self, többi_param... 32
Osztályok attribútumai tumai Attribútumot tumot adhatunk az osztályhoz és közvetlenül l az egyes objektum példp ldányokhoz is. Ha egy osztály adott attribútum tumát megváltoztatjuk, az hatással lesz az összes olyan példp ldány adott attribútum tumára, ahol azt még g nem változtattuk v meg példp ldány szinten. 33
Kivételkezel telkezelés Logikája a megszokott. Nem kötelezk telező megadni a kivétel típust pusát. Opcionálisan következhet k egy "else" és s egy "finally" ág g is. Példa: try: 1/0 except ZeroDivisionError: print "Nullával nem osztunk!" 34
Egyebek Megjegyzések: # (a sor végéig v érvényes) Több soros utasítások sok Sor végén v n '\'' ' (backslash) Ha nem zártuk z be a nyitott zárójelet, z a következk vetkező sort automatikusan folytató sornak veszi. 35
Áttekintés A nyelv törtt rténete Alapvető tudnivalók Szintaxis Néhány egyszerű példa 36
print "Hello World!" Hello World!
For ciklus szotar = {1:"egyik", 2:"masik", 3:"harmadik"} for kulcs, ertek in szotar.items(): print kulcs, "-"," ", ertek for szam in xrange(1,21): print szam,
While ciklus, kivételek try: while i<10: print i, i=i+2 except: print "Hiba!"
While ciklus, kivételek try: i=0 while i<10: print i, i=i+2 except: print "Hiba!"
Lista szűrése, se, lambda függvények lista = range(1,21) print filter(lambda x: x % 4 == 0, lista)
Lambda függvf ggvény def make_increment(n): return lambda x: x+n f = make_increment(5) g= make_increment(3) print f(10) print g(10)
Feladat Készítsünk oszthatóságot vizsgáló függvényt. Generáljunk egy 1-től 1 l 50-ig terjedő számlist mlistát, t, szűrj rjük k ki az elkész szített függvf ggvény segíts tségével a hárommal / néggyel n / öttel / héttel h / kilenccel osztható számokat.
def oszthatosag(mivel): Megoldás return lambda n: n % mivel ==0 lista = range(1,51) print "3-mal:", filter(oszthatosag(3),lista) print "4-gyel:", filter(oszthatosag(4),lista) print "5-tel:", filter(oszthatosag(5),lista) print "7-tel:", filter(oszthatosag(7),lista) print "9-cel:", filter(oszthatosag(9),lista)
Minimalista megoldás def oszthatosag(mivel): return lambda n: n % mivel ==0 for i in [3,4,5,7,9]: print i,":", filter(oszthatosag(i),range(1,51)) 45
Abszolút t minimalista megoldás for i in [3,4,5,7,9]: print i,":", filter(lambda lambda n: n % i ==0,, range(1,51)) 46
Feladat2 Generálj 20 db véletlenszv letlenszámot 0 és s 10 között! k Írd ki, melyik számb mból l hány h darab van a listában! # véletlenszv letlenszám m generálás: random modul 47
Megoldás import random lista=[] for i in xrange(20): lista.append(random.randint(0,10)) print lista for i in xrange(10): print i, :,, lista.count(i) # vagy: print i, :,, len(filter(lambda x: x==i, lista)) 48
További anyagok http://www.python.org/ http://opensource.nokia.com/projects/python fors60 http://mobilenin.com/pys60/menu.htm http://www.forum.nokia.com/tools_docs_an d_code/tools/runtimes/python_for_s60/ 49
További anyagok Könyvek: Mark Pilgrim: Dive Into Python Forstner-Ekler Ekler-Kelényi: Bevezetés s a mobilprogramozásba 50