Bevezetés a Python3-ba

Robert CORDEAU version 2.71... 2012. február 29.

Bevezetés a Python 3-ba Az informatika : A formális logika és a hegesztőpálca találkozása. Maurice Nivat Köszönetnyilvánítás Gérard Swinnen bátorítása nélkül soha sem mertem volna belekezdeni a Python tanításának kalandjába. Köszönet érte. A jegyzetnek nagy hasznára váltak Laurent Pointal (LIMSI) könyörtelen kritikái, Michelle Kessous, Michelle Cordeau és Georges Vincents (IUT d’Orsay, Fizikai Mérések Tanszék) figyelmes átolvasása. Köszönöm Tarek Ziadénak, hogy lehetővé tette publikációi felhasználását. Köszönöm a Dunod kiadónak, hogy megengedte a 118 oldalakon lévő példák publikálását.

c Robert Cordeau

i

Bevezetés a Python 3-ba

Előszó
A Python 3 verziójával megszűnik a 2.x verziókkal való kompatibilitás annak érdekében, hogy kiküszöböljék a nyelv eredeti gyengéit. A projekt vezérfonala "az elavult metódusok megszüntetésével csökkenteni a redundanciákat a Python múködésében". Kiknek készült ez a jegyzet ? Ez a jegyzet az IUT d’Orsay (Institut Universitaire de Technologie) Fizikai Mérések szakán tanuló hallgatóknak tartott Python-előadás anyagát követi. Bár napjainkban a harmadik fél által kínált könyvtárak repertoárja nem olyan gazdag (többek között a numpy könyvtár nem áll rendelkezésre), hasznosnak tűnik egy általános kurzust szentelni a Python 3-as verziójának. Licensz A jegyzet publikálása a Paternité 2.0 France (Creative Commons 2.0) szerint történik, ami online elérhető a http://creativecommons.org/licenses/by/2.0/ fr/ címen vagy postai úton a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA címen.

ii

c Hungarian Translation Daróczy Péter

. . A nyelvek . . Definíciók .2. . . . .2. . . . . . .3. . . . . . . . . . . A programnyelvek rövid története . . . . A Python-programok előállításának technikája . . . . . .2. . . . . . . . . . 1. . 1.2. . . . . .5. . . . . . .1. . . . . . . .1. . . . . . . . . . . . . . . 1. . . . . . . . . . 1.1.4. . 1. . Programok megjelenítése . . 2. . . . . .4. . .1. . . . . . . . . . . . . . . . 1. . . . . . . . . . . . . . . 2. . . . . 10 c Robert Cordeau iii . . 1. . . 1. . . . . . . . . . . . . .4. . . . . . . . . . . . .1. . . . . . . . . . . . Programok létrehozása . . . Python-implementációk . . . . . . . Egy Python-kód két végrehajtási módja . . .3. . . . . . . . . . . . . . Programok létrehozása . . . . . . . Anyagi környezet és program . .2. . .3. . . . . .5. 1. . . . . . . . . . . . . . . . . 1. Kétfajta program . . . .Bevezetés a Python 3-ba Tartalomjegyzék Tartalomjegyzék 1. . . Bevezetés az informatikába 1. . . .4. . . .2. . 1. . . . . . . . . . .2. .2. . . . . .5. . . .1. . . . . . . . . . 1. . . . A számítógép . . .1. . .1.6. . . . . . . . 1. . . . . . . 1. . . . . . . . . . . . . Programvégrehajtási módok . A Python . . . . . . . . . . . . . . . Különböző szintű programnyelvek . . . . . . . A Python-számológép 2. . iii 1 1 3 3 3 4 4 4 4 4 6 6 7 7 7 7 9 9 9 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Azonosítók és kulcsszavak . . . . . . . Algoritmus és program . . . . . Két technika . . .3. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . 22 2. . . . . . . . . . . Bináris adatok . . . . . . . . . . . 13 2. . . . . . . 22 2. . . Egész adattípusok .3. A bool típus . . . . . . 14 2. . . .1. . . . . . . . . . . . . . . . . . . Bemenetek. 14 2. Részkarakterláncok kivágása . . . . . . .9. . . . .3. . . . . . . 17 2. kimenetek . Escape-szekvenciák . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2. . . . . . . . . 24 2. . . . . . . . . . . . . . . . .7. . . . . . . . . . . .6. . 18 2. . 18 2. . .7. . . . . . . . . . . 19 2. . . . . . . . . . . 15 2. . . Az int típus . . . . 25 2. Kimenetek . . . . .2. .6.Bevezetés a Python 3-ba 2. . . . . .3. . . . . . 16 2. Karakterláncok : függvények kontra metódusok . . . . . . . 18 2. .4. .5. . .1.7. . . . . . . . . . . . Karakterláncok : egyszerű indexelés . . . . . . . . . . . .6.5. . . . 11 2. . . . . . . . . . . . . . . . . . . . . . . . . . Értékadások (grafikus magyarázatok) . . . 23 2. . . 10 2. . . Az értékadás . . . . . .7. . . . . . .6. . . .2. . .4. . . . .1. . . .9. . . . . .7. . .2. . .5. . . . Karakterláncok : bemutatás . . . . . . . . . 10 2. .7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . Az értékadás nem összehasonlítás ! . Karakterláncok : műveletek . . Egy ch karakterlánc állapotát vizsgáló metódusok . . . Karakterláncok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7. . . . . . 12 2. .7. . . . . . . . . 26 iv c Hungarian Translation Daróczy Péter .9. Lebegőpontos típusok . . . . .1. . . . .3. . . . . . .4.2. . .9. . . 11 2. . . . . . . . . . . . . . . . . . . .5. . . .2. . . . . . . A Python 3 foglalt szavai . . . .1. . . . . . . . . . . . .2. . . 15 2. Az értékadás változatai . . . . . . . . . . . . . . A complex típus . . 25 2. . . 18 2. . . . 12 2. . . . . . . . . . . . . . . .2. . .1. . . Azonosítók . . . . . . . . . . . .6. . Új karakterláncot adó metódusok . . . 16 2. A változók . . . A kifejezés fogalma . . . .2. .5. . . . . . . . . Változók és értékadás . . A float típus . . . . . . . . . . .7. . . . Névadási stílusok . Bemenetek . . . . . . . . . . . . .8. . . . . . .4. . . . .4. . . . . . . . . . . . 20 2. . . 15 2. .6. . . . . . . .

. . . Ciklusok teljes szintaxisa . . . . . 35 4. 30 3. A szótárak (dict) .3. . . . . . . . . .2. . . . . . . 29 3. . . . . . . . . . . . Asszociatív tömbök . . . . . . . . . . . Az utasításfolyam vezérlése 3. . . . . . . . .3. . . . .1. . . . . Programhurok : while . . . . 32 4. . . . . . . . . . . . . . . . . . . . . . .2. . . . . .2. . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . .1. . . . . .2.7. . . . . . . . . . .2. . . . szintaxis és példák . .3. . . . . . . . .1. . . . . . . . . . . . .4. . . . .4. . . . 30 3. . . .6. . . Ciklus rövidrezárása : continue . . . . 39 4. 42 4. . . . . . . . . . . . . . . . . 36 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3. . . . . . . . . . . Listarészek manipulálása . . . . 30 3. Definíció. . . . . . . .3.2. . . . . . . . . . . . .5. . . . . . . . . . . . . . . . Halmazok (set) . . . 29 3. Kivételek (exceptions) . 42 4. . . . . . . . . . . . . . . . . .2. . .1. . . . . Az asszociatív tömb típus . . . . . . . . . . . . . . . . . 35 4. . . . . .2. . . . . . Egy ciklus megszakítása : break . . . . . 31 3. . . . . . . . . Szekvenciák . . . . . . . . . . . . 38 4. . . . . . . . . . . .1. . . . 44 c Robert Cordeau v . . 36 4. . . . Választás 27 . . . .6. . . . . . . .3. . .1. . . . . . . . . szintaxis és példák . . . . . . . .Bevezetés a Python 3-ba 3.2. . . . Tuple-k . Standard konténerek 35 4. . . . .4. . . . . 37 4. . . . . . . . .3. . . . . .2. . . . . . . . . . . . . .4. . . . . . Definíció.[else] . . . . . . . . 31 3. . . . . 38 4. . . . . . . . . . . . .2. . Mi a szekvencia ? . . . . . . . . . . . . . . Visszatérés a hivatkozásokhoz . . . . . Ciklusok . . . . . . . . Szűkített listák . . . . . . . . Választás : if . . . . . . .2. . . . . . . . . . . . . . . . . . . . 36 4. . . . . . . . . . . . . .1. Metódosok .1. . . . . .4. Listák . . 31 3. . .4. . . . . . . . . . . . . . .[elif] . 40 4. . . . . . . . .1. . . . . . . .4. 37 4. . . . Inicializálás és tesztek . . . . . . . . . . . . . . . . . . . . . . . . . . Összetett utasítások 3. . . . . . . . . . 42 4. . . . . .2. .3. . . . . . . .4. . . . . . . . 29 3. Bejárás : for . . . . . Utasításszekvenciák megszakadása . . . . . . . . . 27 . .1. . . . . . . . Egy alternatíva tömör szintaxisa .

. . visszatérési érték nincs . . . 60 6. . . . . . . . . . . . . . . . .1. . . . . . . . . . . . Tetszőleges számú argumentum : egy tuple átadása . . Modul importálása . . . . Egy példa : az unum könyvtár . . . . . . . . . . . . . Formázott kiíratás . . . . .3. . . . 56 6. . . . . . . . . . . . . .2.1. . . . . . .2.2.1. Nevek feloldása : az LGI szabály . . . . 56 5. .7. . . . . . . . . . .3. . . . . . . . . . . . . . . . . .8. . . . . . . . . . . . 66 6. . . . . . . . . . . . . . . . . .3. . .2.1. . . . . . . . . . . . .1. . . Modulok és csomagok 59 6. . .2. . . 67 vi c Hungarian Translation Daróczy Péter .3. . 50 5.4. . . . .3. . . . . . . . . . 54 5. . . . . 56 5. . 54 5. .9. . . . . . . . . . . . . . . . . A file-ok kezelése . . . . . Objektumok érvényeségi köre . . . .2.Bevezetés a Python 3-ba 4. . 45 4. .8. . . . . . . . . . . . . . . . Iterrálás a konténereken . . Általános mechanizmus . . .1.2. . . . . 55 5. . . Standard könyvtár . . . . . .3. Modulok . . . . Függvények és névterek 50 5. . . . . . . . . . . . Csomagok . . . . . . . . . .2. .3. . . . . . . . . . . . 44 4. . . . . . . . . . . . . . .4. Paraméterek alapértelmezett értékkel . . Egy vagy több paraméter. .2. . . . A file-ok : bevezetés .1.6. .8. . . . . . . . . . . . . . . . 53 5. . . . . . . 66 6. . . . . . . . . . . . . . . . . . . 52 5. . . . . . 56 5. 59 6. . Szövegfile-ok . . 60 6. . . . . . A standard könyvtár . . . . . . . . . . Tetszőleges számú argumentum : egy szótár átadása . . . . . . 46 4. . . .5. . Nagy heterogenitás . . . . . 52 5. . 44 4. . . . . . . . . . . . . . . . . . . . . . visszatérési érték használata . . . .2. . . . . . . . . . . . 62 6. . . . .2. . . . . . . . . . .1. . . . . . . . . . . . .2. . . . . . . . .1. . . 47 5.2. Definíció és szintaxis . . . . Harmadik fél könyvtárai . . .1. . . . . . .2. . . . . . . . . . . . . . . . Egy vagy több paraméter. . . . . . . . . . . . . . . Függvény átadása paraméterben . . . . . . . . . . . 62 6. . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . 53 5. . . . . . . . . Névterek . Példák . . . . . . .10. . . . . . . Argumentumok átadása . . . . . . 66 6. .

. . . . . . . . . .8. .5. . . . . . . . . . A class utasítás . . . . 71 7. . . . . . . . . . . . . . . . . .1. 85 8. . . . . . . . . . . . . .2. . . 86 c Robert Cordeau vii . Objektumok létrehozása és attributumai . . . . . . . . . . . . .2.4. . . . .3. . . . Procedurális technikák . . . . . . . . . . . . .Bevezetés a Python 3-ba 7. . Egymásba ágyazott függvények (closure) . . .5. . . . . . . . . . . . . . . Metódusok . . . 75 7. . . .8.6. . . . . Kompozíció . . . . . . .1. . . . . . . . 74 7. . . . . . . . . . . . . . . Az objektum orientált tervezés fogalma . . . . . . . .1. . Operátor újradefiniálás (Operátoroverloading) . 76 7. . . . . . . . . . . Objektum orientált programozás 68 7. Az inicializátor .1. . . . . . . Leszármaztatás . . . . . .7. . . . .1. . . . .1. 76 7. 75 7. . . . . . . . . . . .6. . . . . . . . . . . 81 8. 73 7. .3. . . . . . . . . . . . . . . . . . . . . . . A generátorok és a generátor-kifejezések . . . A speciális metódusok . Példa az operátor újradefiniálásra (operátoroverloadingra) . .1. . . . 76 7. . . A circle osztály . . . . .5. . .1. . . . . . . . . . . Menük készítése szótárral . . .3. . . . 79 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . Öröklés és polimorfizmus . . . . 68 7. . .3. . . . . . . . . . . . . . 73 7. . . . . . . 80 8. . . . . . . A dokumentálás javítása . . . . . . . . . . . . . .8. . . . 69 7. . . Visszatérés a névterekre . . . . . . . .5. . . . . .1. . . Haladó technikák 81 8. .1. . 73 7. . . Visszatérés a kiindulási példára . . .3. . . . 71 7. .4.7. . . .1. . . .4. . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A circle osztály : tervezés . 82 8. . 79 7. . . . Öröklés és polimorfizmus . . . . . .3.3. . . . . . . . . . . . . . . . . . . 76 7. .1. A procedurális megközelítés elégtelensége . . . 75 7. . . . . . .2.2. 71 7. . . . . . Terminológia . . . . . . . Példa az öröklésre és a polimorfizmusra .2.2.5. . .7. . . . . 74 7. . . . . . . . Osztályok és objektumok létrehozása . . . . . . . 71 7. . . . . . . . . .2.5. .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rekurzív függvények . . . . . . . . . . . . . . . . . . . . . . . . 84 8. 81 8. . Speciális metódusok . . . . .

2. . . . . . . . . . . . IDLE. . . . . . . . . A dokumentálás vezérelt fejlesztés . . . . . . . . . 116 10. . . . . . Két példa . . . . . . . . . . . . . . . 109 10. . . . .1. . . . . . . A tkinter könyvtár . . A lambda direktíva . . 89 8. . . . . . . . . . . . . . . . 96 9. . . . . 97 9. . Bemutatás . . . . . .2. 100 9. . . . . 90 8. . 89 8. . . . . .1. . .2. . . . . . . . . . . A dokumentálás . Eseményvezérelt programok . . . . . . 99 9.2. .2. A tkinter widget-ek .1. . . . .Bevezetés a Python 3-ba 8. . . .2. . . Függvénytechnikák . . . . . . 113 10. . . . . . . . . . . . . . . . . . . . . . egy menü nélküli példa . . . . . . . . . . 97 9. . . . . . . Az accessor-ok . . . . . . 114 10. . . . . . . . . . . . . . . . . . . . . . 100 9. . . . . . . . . . . . . A dekorátorok . . . . . .3. 97 9. .1. . A tesztvezérelt fejlesztés . .2. . .1.2. . . . . . . . . . . . . .1.3. . . . . . . . . . .2. . . . . .2. . . . . . . . . . . . .1. .2. . . . . . .1. . . . . .3. 109 10. . . . .3. . . . . .3. . . egy példa menüvel . .3. . . tkPhone. . . . . . . . . . . . Technikai objektumok . . . . A doctest modul . . . . A map. . . . . Widget-ek pozícionálása . . . . . . . . . . . . . . . . .2. Parciális függvény-alkalmazások . 122 Függelék viii 124 c Hungarian Translation Daróczy Péter . . .2. . . . . . . . . . .1. . . . . 88 8. Grafikus OO programozás 97 9. 99 9. . .2. . . .2. . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . 106 10. . . . . . . . . . Unit tesztek és funkcionális tesztek . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . .3. . . . . . . . .3. . . . . . . . . filter és reduce függvények . . . . . . . . . . . . . . . . . . . . .Az agile development fogalma 107 10. 93 8. . . . . . . .2. . . . . . . . . . .3. . . A reST formátum . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A tesztek . . . . . . . . . . .6. . . . . 90 8. . . . A functor . . . . . . . . . 110 10. .3. . . . 94 8. . . . __slots__ és __dict__ .2. . . . . . . . . 93 8. . . . . . . . . .3. . . . . .

. . . . . . . . . . . . Karakterkészlet és kódolás B. Fogalmak 136 c Robert Cordeau ix . . . . WEB-es források . Források 124 130 132 133 135 E. .Bevezetés a Python 3-ba A. .1. . . . . . A hash-függvények E. . . . A logikai függvények C. 135 F. . . . Aritmetikai alapok D.

aki meghatározza a projekt fejlesztésének általános irányát. A Python még kereskedelmi felhaszálások esetén is szabad és ingyenes – Guido van Rossum Benevolent Dictator for Life (BDFL). hogy az open source fejlesztők közösségének olyan respektált tagja..7 és v3.2 • Nyílt forrású (Open Source) nyelv – Open Source CNRI licensz. 1. – Jelenős a fejlesztők közössége – Számos standard eszköz áll rendelkezésre : Batteries Included filozófia c Robert Cordeau 1 . ami azt jelenti. de a copyleft korlátozás nélkül. A modulok széles választéka áll rendelkezésre. – 2008 vége : A Python 2. fejezet Bevezetés az informatikába Ez a fejezet bemutatja a Python főbb jellemzőit. ami GPL kompatibilis. definiálja az algoritmus fogalmát és a rendelkezésre álló különböző implementációk felsorolásával zárul. meghatározza a szkriptírás sajátosságait.. a Pythont számos egyetemen oktatják és vállalkozások alkalmazzák . elhelyezi a Pythont a programozási nyelvek történetén belül. évente kollokviumokat rendeznek. A Python • Történet – 1991 : Guido van Rossum a CWI-ben (Hollandia) az ABC programozási nyelvből és az AMOEBA (elosztott operációs rendszer) projektből kiindulva publikálja a Pythont – 1996 : A Numerikus Python megjelenése – 2001 : A PSF (Python Software Fundation) megszületik – Egymást követik a verziók.6 és a Python 3..1.0 párhuzamos megjelenése – 2011 : v2..Bevezetés a Python 3-ba 1.

a függvények és a metódusok első osztályúnak nevezett objektumok. de nem kötelező – Nagyon egyszerű az alkalmazások több file-ba történő struktúrálása : egyszerűek a módosítások és a kiterjesztések – Az osztályok. paraméterként átadhatjuk) • Nyitott a világra – C/C++/FORTRAN-hoz illeszthető – Több fontos alkalmazás szkriptnyelve – Kiválóan portolható • Könyvtárak – Több ezer könyvtár van minden alkalmazási területen 2 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba • Interaktiv – Számos interaktív interpreter létezik – Fontos dokumentációk online elérhetők – Gyors és inkrementális fejlesztés – A tesztelés és a hibakeresés egyszerű – Interaktív adatelemzés • Gyors interpretált nyelv – Lefordított byte-kód értelmezése – Számos. C-ben. mint az összes többi objektumot (hozzárendelhetjük. Ezeket az objektumokat ugyanúgy kezelik. C++-ban illetve FORTRAN-ban írt optimalizált könyvtárból származó modul van • A nyelv egyszerű – Szintaxisa világos és koherens – A forráskódban a behúzások meghatározók – Automatikus memóriakezelés (garbage collector) – Dinamikus erős típusadás : nincs típusdeklarálás • Objektum orientált – Hatékony objektummodell.

állandó memóriákat (merevlemez.2. órát. • A RAM 8 bites szavakba szervezett cellákból áll. gyors cashmemóriát.2. • perifériákat : be-/és kimeneteket. hálózat . • Az alkalmazói programokat speciális feladatoknak szentelik. Ezeket parancsok sorozata alkotja. Kétfajta program Két programtípust különböztetünk meg : • Az operációs rendszer : azoknak a programoknak az együttese. 1. pendrive...). amit úgy alakítanak át. amiket egy forrásprogram tartalmaz.Bevezetés a Python 3-ba 1. c Robert Cordeau 3 . Gyakran multitaskok.2.. ami a program végrehajtásához szükséges utasításokat és adatokat tartalmazza.2. Anyagi környezet és program A számítógép A számítógép definícióját a következő képpen egyszerűsíthetjük : Definíció Elektronikus alkotókból álló determinisztikus automata A számítógép egyebek mellett a következő alkotóelemeket tartalmazza : • mikroproceesszort CU (Contol Unit)-tal és ALU (Arithmetic Logic Unit)-kal. • írható-olvasható memóriát (RAM). CD-ROM . 1.. amik a hardwareés a software-erőforrásokat kezelik. néha többfelhasználósak. hogy a számítógép végre tudja hajtani.1. Az operációs rendszer párbeszédes segítséget ajánl fel a felhasználó és a számítógép között : szöveges (parancsértelmező) vagy grafikus (ablakkezelő) interface-t.

NET. Smalltalk. de az ipar ezeknek csak töredékét használja.. Simula. • 80-es évek (ojektum orientált programozás) : C++. Basic.4. viszont ez az egyetlen nyelv.Bevezetés a Python 3-ba 1.. Gyakran normalizáltak. • 70-es évek () : C. Programok létrehozása Két technika A compilálás (fordítás) a forráskód tárgykódra történő fordítását jelenti. Programnyelvek százait alkották meg. LabView..1.3. mint a gépi nyelv. MODULA-2.. szintaxis és szemantikai elemzés 4 c Hungarian Translation Daróczy Péter . VB. A nyelvek Különböző szintű programnyelvek • Minden processzornak van egy saját. Python.. tcl/Tk. ADA. lehetővé teszik egyik gépről a másikra történő portolást. PASCAL. de nem mindíg portábilis.. A programnyelvek rövid története • 50-es évek (kísérleti megközelítés) : FORTRAN... • 2000-es évek (kereskedelmi szoftverek) : C#... közvetlenül végrehajtható nyelve : a gépi nyelv.1.3. Perl. 1. Ez 0-kból és 1-ekből áll és nem portábilis. Olvashatóbb. Egy assemblerrel fordítják le gépi nyelvre • a magas szintű nyelvek. • 60-as évek (univerzális nyelvek) : PL/1. 1. Egy fordítóval vagy egy értelmezővel (interpreter) gépi nyelvre vannak lefordítva.2. VisualBasic. Ruby.4. amit a számítógép képes megérteni • az assembly nyelv a gépi nyelv alfanumerikus kódolása. COBOL... ALGOL. LISP. • 90-es évek (interpretált obektum orientált nyelvek) : Java.3. legalább négy fázisból áll (három analízis-fázis . Eiffel. 1. 1.lexikális.

A linkek szerkesztése az az eljárás. 1.NET nyelvek) nincs szükségük erre a fordítási fázisra és dinamikusan oldják fel a címeket (hosszabb számítási idő árán). A fordítás menete A tárgykóra történő fordítás bizonyos szimbólumok azonosítását későbbre hagyja. . A link lehet : .. fel kell oldani ezeket a szimbólumokat és egy könyvtárhoz kell őket kapcsolni.Bevezetés a Python 3-ba egy tárgykódgenerálási fázis). 1. ábra. Ez a technika nagyon rugalmas. de a generált kódok nem hatékonyak : a program minden egyes végrehajtásakor használni kell az interpretert . de nem ugyanabba a végrehajtható fájlba. Az interpretálás (értelmezés) azt jelenti. ábra. A fordítás kényszer.statikus : a tárgykódfájl és a könyvtár ugyanabba a végrehajtható fájlba van linkelve. .. Az interpreter működése c Robert Cordeau 5 . Semmilyen tárgykód sem generálódik. aminek a során az tárgykód állományaiból végrehajtható fájlokat illetve dinamikus vagy statikus könyvtárakat lehet létrehozni. hogy a forráskód minden egyes sora az elemzéssel egyidejűleg végrehajtható utasításra lesz lefordítva.1.dinamikus : a tárgykódfájl linkelve van a könyvtárral.2. Egyes modern nyelveknak (Java. Mielőtt végrehajtatnánk ezeket a tárgykódfileokat. viszont az eredménye nagy végrehajtási sebesség. A gépi kód létrehozásához még egy fázisra van szükség : a linkek szerkesztésére. a linkek a végrehajtható állomány elindításakor jönnek létre.

1. Tehát egy összetett problémát egyszerűbb részproblémákra bontuk. ha nincs.pyw) forráskódot a RAM-ba.pyo vagy .Bevezetés a Python 3-ba 1. előállítja a bájtkódot. A program által importált minden modul esetében a Python először ellenőrzi. 6 c Hungarian Translation Daróczy Péter . Felismerjük azokat a konstrukciókat (osztályokat) (class). A Python-programok előállításának technikája • Keveréktechnika : a lefordított bájtkód értelmezése. Ha van ilyen.2.4. 1. amin van virtuális Python gép.py (vagy . Felülről lefelé és alulról felfelé elemezzük a problémát (részproblémákra bontjuk és maximálisan újra hasznosítjuk a részalgoritmusokat). amit létrehozott.3. A lefordított bájtkód értelmezése Egy program végrehajtásához a Python betölti a .py modul szintaktikai vizsgálatát és azt a bájtkódot használja.py fájlénak. Ez a modell először az akciókat struktúrálja. hogy létezik-e egy előzetesen lefordított bájtkód (egy .4. A gyakorlatban nem szükséges explicit módon lefordítani egy modult. Egyebek mellett : • a procedurális módszer. Programok létrehozása A szoftvermérnök a programkészítés módszereit tanulja. Több modell képzelhető el. Jó kompromisszum a fejlesztés egyszerűsége és a végrehajtás gyorsasága között. végül végrehajtja azt.3.pyc fájlban). amik a probléma adatokat (attributumok) és akciókat (metódusok) tartalmazó alkotóinak (objektumok) létrehozására szolgálnak. • a bájtkód (egy közbenső forma) minden olyan számítógépre átvihető. szintaktikai elemzést végez. ábra. akkor a Python ezt használja. aminek a dátuma megfelel a . a Python transzparens módon kezeli ezt a mechanizmust. • az objektum-módszer. Az osztályok egy hierarchikus rendben alposztályokból származnak ( öröklés és polimorfizmus). akkor elvégzi a .

2.a fő-program . 1.1. C-ben van kódolva.5. Gyakran úgy írják meg. Algoritmus és program Definíciók Definíció Algoritmus : Véges számú utasítás véges számú végrehajtásából álló lépések sorozata. mely lehetővé teszi egy probléma megoldását. A nem triviális részek (és csak ezek) jelentését egy kommenttel kell megmagyaráz-ni. A részek közül az egyik . Az olvasását megkönnyítendő kommentekkel kell ellátni. Egy algoritmus véges időtartam alatt befejeződik.5. amit egy számítógép le tud fordítani vagy értelmezni tud. 1. Python-implementációk • CPython : Classic Python.vezérli a többit. a CPython új implementációja • Jython : JVM-re írt (JAVA bájtkódot használ) c Robert Cordeau 7 . Definíció Program : egy algoritmus fordítása egy olyan nyelvre.Bevezetés a Python 3-ba 1. A komment egy # karakterrel kezdődik és a sor végéig tart : #——————— # Ez egy komment #——————— 9 + 2 # Ez egy másik 1.5.6. hogy több részre bontják. Programok megjelenítése A forrásprogram emberek számára készül. különböző rendszerekre van portolva • Python3000 : Python 3.

Bevezetés a Python 3-ba • IronPython : Python. C#-ban van írva. ahogyan akarjuk) • Pypy : európai kutatási projekt Pythonban írt Python interpreterre 8 c Hungarian Translation Daróczy Péter . a MSIL-t (MicroSoft Intermediate Language) használja • Stackless Python : kiküszöböli a C nyelv stack-ét (lehetővé teszi a rekurzálást úgy.NET.

a Python is lehetővé teszi az adatok manipulálását a foglalt szavainak és az adattípusoknak köszönhetően. Utoljára. az egyszerű adattípusokat ( a konténereket a 4.1. • vagy egy interpretert (például IDLE) használunk arra. 2. Ez a fejezet bemutatja az azonosítók képzésének szabályait. fejezetben fogjuk tárgyalni) valamint a(z unicode és bináris) karakterláncokat. objektumhivatkozások és értékadás nem triviális fogalmaira. Programvégrehajtási módok Egy Python-kód két végrehajtási módja • Vagy egy fájlba rögzítünk egy editor segítségével Python-utasításokat (ekkor egy Python-szkript -ről beszélünk). amit egy paranccsal vagy egy editor menüpontjaként hajtatunk végre. = read. eval. print. Az IDLE-be egy Python-interpreter van beépítve. hogy azzonnal eredményt kapjunk. loop). 2. de nem utolsó sorban ez a fejezet kitér a változók. fejezet A Python-számológép Mint minden nyelv.1.1.Bevezetés a Python 3-ba 2. ami végrehajtja a kiértékeléső ciklust (REPL. c Robert Cordeau 9 .

és nagybetűkre és nem lehetnek kulcsszavak. ami egy kezdő karakterből és nulla vagy több folytató karakterből áll. egy szám vagy egy pont. Azonosítók és kulcsszavak Azonosítók A többi programozási nyelvhez hasonlóan a Python is azonosítókat használ az objektumai megnevezéséhez. Ebben a dokumentumban a következő stílust használjuk : • UPPERCASE vagy UPPER_CASE a konstansok.2. hogy • kezdő karakter lehet bármelyik Unicode (Lásd A függeléket) betű és az aláhúzás karakter (_). 2. ábra. Definíció Egy Python-azonosító egy nem üres. Figyelem Az azonosítók érzékenyek a kis. Az IDLE kiértékelő ciklusa 2. 2. hogy koherens névadási konvenciókat alkalmazzunk az azonosítók elnevezésekor. Névadási stílusok Fontos.Bevezetés a Python 3-ba 2.2.2. 10 c Hungarian Translation Daróczy Péter .2. • folytató karakter lehet egy kezdő karakter. tetszőleges hosszúságú karaktersorozat.1.1. Tudni kell.

1. A kifejezés fogalma Definíció A kifejezés egy kódrész. • unmodule_m modulok. amit a Python-interpreter kitud értékelni. • lowercase vagy lower_case minden más azonosító esetében.Bevezetés a Python 3-ba • TitleCase az osztályok. Kerüljük a következőkarakterek használatát : l. a következő jelölések foglaltak : _xxx # belső használatra __xxx # egy osztály attributuma __xxx__ # speciális foglalt név Példák : NB_ITEMS = 12 # UPPER_CASE class MyClass: pass # TitleCase def maFunction(): pass # camelCase my_id = 5 # lower_case 2.3. hogy c Robert Cordeau 11 .2. nagy o és i).2-ben 33 foglalt szó van : and del as elif assert else break except class False continue finally def for from None True global nonlocal try if not while import or with in pass yield is raise lambda return 2. metódusok és grafikus interface-ek. • camelCase függvények.3. O és I(kis l. Végül. • UneExceptionError a kivételek. A Python 3 foglalt szavai A Python 3.

Az int típus Az int típus méretét csak a gép memóriája korlátozza. Konstansok.  Két példa egyszerű és egy példa összetett kifejezésre : id1 = 15.3 i d 2 = maFonction ( i d 1 ) i f id2 > 0: i d 3 = math .  Az egész konstansok alapértelmezetten decimális számok.1. összetettek. Egész adattípusok A Python 3-nak két standard egésztípusa van : az int és a bool.Bevezetés a Python 3-ba egy értéket kapjon.5∗ id2   © 2. 2. s q r t ( i d 2 ) else : id4 = id1 − 5.4. de a következő alapok is használhatók :    >>> 2009 # d e c i m a l i s 2009 >>> 0 b11111011001 # b i n a r i s 2009 >>> 0 o3731 # o k t a l i s 2009 >>> 0 x7d9 # h e x a d e c i m a l i s 2009 Aritmetikai műveletek 20 20 20 20 20 20 + 3 # 23 − 3 # 17 ∗ 3 # 60 ∗∗ 3 # 8000 / 3 # 6.666666666666667 // 3 # 6 ( e g e s z o s z t a s ) 12 c Hungarian Translation Daróczy Péter © .4. azonosítók és operátorok kombinációjából állnak. A kifejezések lehetnek egyszerűek ill.

Használatos számrendszerek Egy 10 alapú számrendszerben írt egész (például a 179) a következő szintaxis használatával írható fel bináris. akkor a True or kifejezés2 értéke True lesz. akkor a False and kifejezés2 értéke False lesz. True. or és and. • Összehasonlító operátorok :    2 > 8 # False 2 <= 8 < 15 # True © • Logikai operátorok (shortcut-elv) : not. Az and és az or igazságtábláját megfigyelve azt vesszük észre. oktális és hexadecimális alakban :    >>> 0 b10110011 # b i n a r i s 179 >>> 0 o263 # o k t a l i s 179 >>> 0xB3 # h e x a d e c i m a l i s 179 © 2. – ráadásul ha az kifejezés első tagjának az értéke True. Tehát nem kell a kifejezést kiszámolni. A bool típus • Két értéke lehet : False.  Ezt az optimalizálást hívják shortcut-elvnek : ( 3 == 3 ) o r ( 9 > 2 4) # True ( az e l s o t a g t o l kezdve ) ( 9 > 24 ) and ( 3 == 3 ) # F a l s e ( az e l s o t a g t o l kezdve ) 13   © c Robert Cordeau . hogy : – ha az kifejezés első tagjának az értéke False.Bevezetés a Python 3-ba 20 % 3 # 2 ( modulo ) abs ( 3 − 2 0) # a b s z o l u t e r t e k   © Jól jegyezzük meg a két osztásoperátor szerepét : / : lebegőpontos osztást eredményez // : egészosztást eredményez.2.4.

• A math modul importálása lehetővé teszi a szokásos matematikai műveleteket:  import math p r i n t ( math . d e g r e e s ( math .1. Boolean kifejezések A boolean kifejezéseknek két lehetséges értéke van : False vagy True A Python akkor rendeli a False értéket egy boolean kifejezéshez. Minden más értéke True 2. • A float típusú adatok véges pontosságúak. 0 14 c Hungarian Translation Daróczy Péter . halmaz. ha az : • a False konstans. 0 2 3 e23   © • A float típusú adatokon ugyanazok a műveletek végezhetők el.epsilon -ban van megadva.718 .float_info.  Lebegőpontos típusok A float típus • Egy float típusú adatot a tizedespont vagy az exponenciális jelölés jelez : 2.5. True boolean eredményeket adjanak. • a None konstans.5. 2. mint az int típusúakon. p i / 4 ) ) # 0 . hogy False ill. 7 0 7 1 0 6 7 8 1 1 8 6 5 4 7 5 p r i n t ( math . s i n ( math . • egy 0 értékű numerikus adat. • egy üres szekvencia ill.02 3 e8 6 . ami az sys. p i ) ) # 1 8 0 .Bevezetés a Python 3-ba • A logikai és az összehasonlító műveleteket azért értékajük ki.

707106781187 j )   © 2. . • Az imaginárius részt j követi :    p r i n t (1 j ) # 1 j p r i n t ((2+3 j ) + (4−7 j ) ) # (6−4 j ) p r i n t ((9+5 j ) . c Robert Cordeau 15 . Amíg az objektum nem módosítható (mint az egészek.9272952180016122) p r i n t ( cmath . Meg fogjuk látni„ hogy a helyzet megváltozik a módosítható objektumok esetében . addig nincs említést érdemlő különbség. r e a l ) # 9 . p o l a r ( 3 + 4 j ) ) # ( 5 . float-ok. hanem inkább az objektumhivatkozás fogalmát kínálja fel. 0..Bevezetés a Python 3-ba p r i n t ( math .14159265359 p r i n t ( cmath . változókra van szükségünk az adatok tárolására..2.). cmath . A complex típus • A komplex számok descartesi jelöléssel vannak felírva. imag ) # 5 .707106781187+0. 0 p r i n t ( ( abs (3+4 j ) ) ) # 5 . A valóságban a Python nem a változó fogalmát. 0 . p i / 4 ) ) # (0. r e c t ( 1 . Változók és értékadás A változók Attól kezdve. 0 : module © • Egy speciális matematikai modul cmath van a komplex számoknak fenntartva:  import cmath p r i n t ( cmath . hogy vannak adattípusaink. l o g ( 1 0 2 4 .5.1. 2. f a c t o r i a l ( 9 ) ) # 362880 p r i n t ( math .6.6. 0 p r i n t ((9+5 j ) . stb. 2 ) ) # 1 0 . amit két lebegőpontos szám alkot. phase (−1 + 0 j ) ) # 3. 0   © 2.

ami egy memóriacímen van. Az értékadás nem összehasonlítás ! Az értékadásnak hatása van (a végrehajtása során módosítja a program belső állapotát). az idők folyamán megváltozhat (az előző érték elvész) :    a = a + 1 # 3 ( inkrementalas ) a = a − 1 # 2 ( dekrementalas ) © 2.2. de nincs értéke (nem tudjuk egy kifejezésben használni) :  >>> a = 2 >>> x = ( a = 3 ) + 2 SyntaxError : i n v a l i d syntax   © Az összehasonlításnak értéke van.Bevezetés a Python 3-ba Definíció A változó egy értékhez kapcsolt azonosító. 2 ∗ math . e / 4 5 . ami szükségessé teszi a jobboldali tagnak megfelelő érték kiszámítását mielőtt azt a baloldali taghoz rendelnénk.3.6. ami felhasználható egy kifejezésben. p i c = b ∗∗ a © Egy változó értéke. Egy objektum hivatkozás. l o g ( math . 1 2 ) − 2∗math . Az értékadás Definíció A = jellel (aminek semmi köze sincs a matematikában használt egyenlőségjelhez !) rendelünk hozzá egy értéket egy változóhoz. 2.    a = 2 # a z t mondjuk : a e r t e k u l kapja 2−t b = 7 . de nincs hatása (a program fejlődését reprezentáló belső automatizmust nem módosítja) :  >>> x = ( a == 3 ) + 2 >>> x 2   © 16 c Hungarian Translation Daróczy Péter . Egy értékadás során a baloldali tag megkapja a jobboldali tagot. amint azt a neve is jelzi.6.

Bevezetés a Python 3-ba

(a) Három értékadás

(b) A ’c’ adatot töröltük

(c) Az ’a’ adatot töröltük

2.2. ábra. Az értékadás ábrákkal illusztrálva

2.6.4. 

Az értékadás változatai

Az egyszerű értékadás mellett a következő formákat is használhatjuk :

# egyszeru ertekadas v = 4 # inkrementalis ertekadas v += 2 # azonos : v = v + 2 −v e l # ha v−r e mar e l o z o l e g h i v a t k o z t u n k # ertekadas jobbrol balra c = d = 8 # tobbszoros celvaltozo # parhuzamos e r t e k a d a s egy s z e k v e n c i a n a k e , f = 2.7 , 5.1 # tuple g , h , i = [ ’G ’ , ’H ’ , ’ I ’ ] # l i s t a c Robert Cordeau 17

Bevezetés a Python 3-ba x , y = coorMouse ( ) # fuggveny e r t e k e n e k t o b b s z o r o z e s e 



©

2.6.5.

Értékadások (grafikus magyarázatok)

A 2.2 ábrán a körök a változókat, a négyszögek az adatokat jelölték. Az értékadások kapcsolják az azonosítókat az adatokhoz : ha egy adat a memóriában nincs többé hozzákapcsolva egy azonosítóhoz, akkor a Python-szemétgyűjtő (garbage collector) automatikusan törli.

2.7.
2.7.1.

Karakterláncok
Karakterláncok : bemutatás

Definíció Az str nem módosítható adattípus egy Unicode karakterszekvenciát reprezentál. A nem módosíthatóság azt jelenti, hogy ha egy adatot létrehoztunk a memóriában, akkor azt a későbbiekben nem lehet megváltoztatni. Három karakterláncszintaxis létezik. Jegyezzük meg, hogy a ’-t használhatjuk a " helyett, ami lehetővé teszi az egyik jelölés használatát a másikon belül : s y n t a x e 1 = " E l s o forma n e w l i n e k a r a k t e r r e l \n " s y n t a x e 2 = r " Masodik forma n e w l i n e k a r a k t e r n e l k u l \n " syntaxe3 = " " " Harmadik , t o b b s o r o s forma """ i d e z o j e l e k = " L ’ eau v i v e " a p o s z t r o f o k = ’ Forme " avec des a p o s t r o p h e s " ’  



©

2.7.2. 

Karakterláncok : műveletek

• Hossz : s = " abcde " len ( s ) # 5 18 c Hungarian Translation Daróczy Péter 



©

Bevezetés a Python 3-ba • Konkatenálás :  

 

s1 = " abc " s2 = " d e f g " s3 = s1 + s2 # ’ a b c d e f g ’

©

• Ismétlés : s4 = " Fi ! " s5 = s4 ∗ 3 # ’ Fi ! Fi ! Fi ! ’ p r i n t ( s5 ) 



©

2.7.3.

Karakterláncok : függvények kontra metódusok

Egy karakterláncon (és általánosabban egy szekvencián) függvények (procedurális felfogás) vagy metódusok (objektum felfogás) segítségével hajt-hatunk végre műveleteket. • Ahhoz, hogy egy függvényt használjunk, a () operátort alkalmazzuk :  



ch1 = " abc " l o n g = l e n ( ch1 ) # 3

©

• Metódust egy objektumra alkalmazunk a pont-jelölés használatával. A pontot azután az adat/változó után tesszük, amire a metódust alkalmazzuk, ezt követi a metódus neve és a () operátor :  



ch2 = " abracadabra " ch3 = ch2 . upper ( ) # "ABRACADABRA"

©

2.7.4.

Egy ch karakterlánc állapotát vizsgáló metódusok

A következő metódusok visszatérési értéke boolean, vagyis True vagy False. Az [xxx] jelölés egy opcionális elemet jelöl, amit a metódus alkalmazásakor elhagyhatunk. • isupper() és islower() : értéke True ha ch csak nagybetűt/kisbetűt tartalmaz: c Robert Cordeau 19

nagybetűkből. upper(). i s d i g i t ( ) ) # True © • startswith(prefix[. isdigit() és isspace() : értéke True ha ch csak alfanumerikus. isalpha ( ) ) # False p r i n t ( " 54762 " . csak betű-. endswith ( ’ a ra ’ ) ) # F a l s e © 2. i s t i t l e ( ) ) # True © • isalnum().5. isalpha(). hogy a start és stop paraméterekkel definiált részkarakterlánc a prefix-szel kezdődik-e illetve suffix-szal végződik-e :    p r i n t ( " abracadabra " . Új karakterláncot adó metódusok • lower().7. start[. lower ( ) ) # chaise basse p r i n t ( s . stop]]) és endswith(suffix[. egy nagybetűvel kezdődő kisbetűs.Bevezetés a Python 3-ba    p r i n t ( " cHAise basSe " . s t a r t s w i t h ( ’ ab ’ ) ) # True p r i n t ( " abracadabra " . c a p i t a l i z e ( ) ) # Chaise b a s s e p r i n t ( s . stop]]) : megvizsgálják. swapcase ( ) ) # ChaISE BASsE © • expandtabs([tabsize]) : a tabulátorokat tabsize (alapértelmezetten 8) darab szóközzel helyettesíti 20 c Hungarian Translation Daróczy Péter . capitalize() és swapcase() : rendre egy kisbetúkből. i s u p p e r ( ) ) # F a l s e © • istitle() : értéke True ha ch-ban minden szónak csak a kezdőbetűje nagybetű:    p r i n t ( " Chaise Basse " . csak számkaraktereket vagy space-eket tartalmaznak    print ( " 3 chaises basses " . start[. vagy egy invertált karakterlánot hoznak létre :    # az s−ben l e v o s t r i n g g e l t e s z t e l j u k a metodusokat s = " cHAise basSe " print ( s . upper ( ) ) # CHAISE BASSE p r i n t ( s .

fillchar]) : rendre egy középre. lstrip([chars]) és rstrip([chars]) : törlik a chars (vagy alapértelmezetten a szóközkarakter) minden kombinációját rendre a karakterlánc elejéről és a végéről. fillchar]) és rjust(width[. ’@ ’ ) ) # @@@@@@@@cHAise basSe © • zfill(width) : a ch stringet baloldalon 0-val egészíti ki a width maximális hosszig :    p r i n t ( s . ’ ha ’ ) ) # c h a i s e basSe © • split(seps[. ’ basSe ’ ] © • join(seq) : úgy konkatenálja a seq konténer karakterláncait. amire a metódust alkalmazzuk : c Robert Cordeau 21 . count]]) : a new-val helyettesíti az old count számú (alapértelmezetten összes) példányát :    p r i n t ( s . rsplit() ugyanezt teszi. az elejéről vagy a végéről :    p r i n t ( s .end] -en belül megtalálható. r j u s t ( 2 0 . new[. r e p l a c e ( ’HA ’ . index() és rindex() ugyanezt teszik. a karakterlánc darabolását a vége felől kezdi el. maxsplit]) : maxsplit részre darabolja fel a karakterláncot. balszélre vagy jobbszélre igazított és a fillchar karakterrel (vagy alapértelmezetten szóköz karakterrel) kiegészített karakterláncot ad :    p r i n t ( s .    p r i n t ( s . azaz megadja a legnagyobb indexértéket. A splitlines() a karakterláncot a sortöréseknél darabolja fel. akkor az értéke -1. Ha nem találja a sub karakterláncot. s p l i t ( ) ) # [ ’ cHAise ’ . start[.Bevezetés a Python 3-ba • center(width[. c e n t e r ( 2 0 . stop]]) : a sub karakterlánc indexét adja meg a starttól stop-ig tartó részkarakterláncban. z f i l l ( 2 0 ) ) # 00000000 cHAise basSe © • strip([chars]). aminél a sub karakterlánc az s[start. find ( ’ se b ’ )) # 4 © • replace(old[. ’− ’ ) ) # −−−−cHAise basSe−−−− p r i n t ( s . s t r i p ( ’ c e ’ ) ) # HAise basS © • find(sub[. ljust(width[. de egy hibát (exception) generálnak ha nem találják a sub karakterláncot :    print ( s . hogy közbe iktatja azt a stringet. Az rfind() ugyanezt teszi a karakterlánc végétől kezdve. fillchar]).

Karakterláncok : egyszerű indexelés Egy karakterlánc indexeléséhez a [ ] operátort használjuk.7. ’ basSe ’ ] ) ) # cHAise ∗∗ basSe © 2.7. Részkarakterláncok kivágása A [ ] operátor 2 vagy 3 . 2− t o l 2− i g )   © 22 c Hungarian Translation Daróczy Péter .paraméterrel lehetővé teszi részkarakterláncok előállítását egy stringből :  s = " Rayon X" # l e n ( s ) == 7 > s [ 1 : 4 ] # ’ ayo ’ ( az 1 b e l e e r t e n d o . a s t r i n g v e g e i g ) s [ : 3 ] # ’ Ray ’ ( az e l e j e t o l a v e g e i g a 3 n i n c s benne ) s [ 3 : ] # ’ on X ’ ( a 3 i n d e x t o l a v e g e i g ) s [ : : 2 ] # ’RynX ’ ( az e l e j e t o l a v e g e i g . Egy karakterlánc indexelése 2.6. ami 0-tól indul és megadja egy karakter pozicióját :  s = " Rayon X" print ( s [ 0 ] ) print ( s [ 2 ] ) print ( s [ −1]) print ( s [ −3]) # # # # # l e n ( s ) == 7 > R y X n   © 2.3.: karakterrel elválasztott . a 4 nem) s [ − 2 : ] # ’ X ’ ( a −2 b e l e e r t e n d o . ábra. j o i n ( [ ’ cHAise ’ .Bevezetés a Python 3-ba    p r i n t ( " ∗∗ " . amiben az index egy előjeles egészszám.7.

4. pop ( ) # ami r e n d e l k e z i k a s z o k a s o s metodusokkal print () p r i n t (bWord . Ezek a "C-szerű" adattípusok igen alkalmasak nagy mennyiségű adat tárolására. A két típus meglehetősen hasonlít a str típusra és rendelkezik az utóbbi metódusainak többségével. A módosítható bytearray típusnak a list típussal közös metódusai vannak. . s z e l : byte t i p u s p r i n t ( b_word ) # b ’ Animal ’ f o r b i n b_word : p r i n t ( b . r e p l a c e ( b " i l l " .  Példák bináris adatokra és metódusaikra :   # b i n a r i s adatok b_word = b " Animal " # b p r e f i x . b " a t " ) ) # b ’ 5 Hats 5 Hats ’ Különbséget kell tenni a kódok. glyph-ek.255] intervallunba eső) előjel nélküli egészekből áll.8. bWord . Egy bináris adat (a [0 .. karakterek és byte-ok között (lásd c Robert Cordeau 23 © .. Ráadásul a python hatékony eszközökkel rendelkezik az ilyen típusú adatok kezeléséhez. upper ( ) ) # b ’ 5 HILLS 5 HILLS ’ p r i n t ( data . end=" " ) # 65 110 105 109 97 108 ( ASCII ) print () bWord = b y t e a r r a y ( b_word ) # egy u j byte−tombot ad . Bináris adatok A Python 3 két bináris típust kinál : a byte (nem módosítható) és a byte-array (módosítható) típust. ábra. " \n " ) # b y t e a r r a y ( b ’ Anima ’ ) data = b " 5 H i l l s \ x35 \ x20 \ x48 \ x69 \x6C\x6C\ x73 " p r i n t ( data . Részkarakterláncok előállítása 2.Bevezetés a Python 3-ba 2. .

Bevezetés a Python 3-ba

2.5. ábra. Kódok, glyphek, karakterek és byteok 2.5)

2.9.

Bemenetek, kimenetek

A felhasználónak szüksége van a programmal történő interakcióra (lásd 2.6). "Konzolmódban" (a grafikus interface-eket a későbbiekben fogjuk megnézni), képesnek kell lennünk információk megadására vagy beírására, amit általában egy billentyűzetről történő beolvasással hajtunk végre. A másik irányban képesnek kell lennünk információk kiíratására illetve kivitelére, ami általában a képernyõre történõ írásnak felel meg.

2.6. ábra. Bementek, kimenetek

24

c Hungarian Translation Daróczy Péter

Bevezetés a Python 3-ba

2.9.1.

Bemenetek

A képernyõre történõ írásról van szó : az input() standard függvény megszakítja a programot, kiír esetleg egy prompt-ot és várja, hogy a felhasználó beírjon egy adatot és lezárja az Enter-rel. Az input() standard függvény mindíg egy text módú bemenetet állít elő (egy karakterláncot), aminek aztán megváltoztathatjuk a típusát (típusátalakításnak) is nevezzük :  



nb_etudiant = i n p u t ( " I r j a be a h a l l g a t ók s z ámá t : " ) p r i n t ( type ( nb_etudiant ) ) # < c l a s s ’ s t r ’> ( egy s t r i n g ) f 1 = i n p u t ( " \ n I r j o n be egy f l o a t −o t : " ) f 1 = f l o a t ( f 1 ) # t í pus á t a l a k í t á s f l o a t −t á # vagy r ö videbben : f 2 = f l o a t ( i n p u t ( " I r j o n be egy f l o a t −o t : " ) ) p r i n t ( type ( f 2 ) ) # < c l a s s ’ f l o a t ’>

©

2.9.2.

Kimenetek

"Kalkulátor üzemmódban" a Python beolvas-kiértékel-kiír, de a print() függvény nélkülözhetetlen a scriptekben a kiíratásokhoz :  



import s y s a, b = 2, 5 print (a , b) # 2 5 p r i n t ( " Osszeg : " , a + b ) # Osszeg : 7 p r i n t ( a − b , " a kü l ö nbs é g " ) # −3 a kü l ö nbs é g print (a , " es " , b , " szorzata : " , a ∗ b) # 2 é s 5 s z o r z a t a : 10 p r i n t ( ) # egy ú j s o r t í r k i # az ú j s o r h e l y e t t egy be t ükö z k i í r a t á s á hoz : p r i n t ( a , end=" " ) p r i n t ( " \ n F a t a l i s hib a ! " , f i l e =s y s . s t d e r r ) # f i l e −ba p r i n t ( "On a <" , 2∗∗32 , "> c a s ! " , sep="###" ) # On a <###4294967296###> c a s !

©

c Robert Cordeau

25

Bevezetés a Python 3-ba

2.9.3.

Escape-szekvenciák

Egy karakterlánc belsejében a backslash ( \ ) karakter segítségével adhatunk speciális jelentést bizonyos karaktersorozatoknak : Szekvencia \newline \\ \’ \" \a \b \f \n \N{name} \r \t \uxxxx \Uxxxx \v \ooo \xhh Jelentés figyelmen kívül hagyja Backslash (\) Single quote ( ’ ) Double quote ( " ) ASCII Bell (BEL) ASCII Backspace (BS) ASCII Formfeed (FF) ASCII Linefeed (LF) A name nevű karakter a Unicode adatbázisban ASCII Carriage Return (CR) ASCII Horizontal Tab (TAB) Karakter 16 bites xxxx hexadecimális értékkel (csak Unicode) Karakter 32 bites xxxx hexadecimális értékkel (csak Unicode) ASCII Vertical Tab (VT) Karakter ooo oktális értékkel Karakter hh hexadecimális értékkel 2.1. táblázat: Escape-szekvenciák 

Escape-szekvenciák használata : p r i n t ( " \N{pound s i g n } \u00A3 \U000000A3 " ) p r i n t ( " d \144 \ x64 " ) # d d d 



# i n a k t í v escape −s z e k v e n c i a s t r i n g b e n p r i n t ( r " d \144 \ x64 " ) # d \144 \ x64

©

26

c Hungarian Translation Daróczy Péter

Bevezetés a Python 3-ba 3. 0 nb_valeurs = 0 for v in valeurs : nb_valeurs = nb_valeurs + 1 somme = somme + v a l e u r s c Robert Cordeau 27 . Minden utasítássort egy vagy több fizikai sor képez. fejezet Az utasításfolyam vezérlése Egy Python szkriptet felülről lefelé sorban végrehajtott utasítások sorozata alkot. ami a fejsorhoz képpest be van húzva. Az egymást követő utasítások sorban történő végrehajtása módosítható annak érdekében.1. Összetett utasítások Szintaxis Egy összetett utasítás a következő részekből áll : • egy fejsorból. Ennek a fejezetnek ez a tárgya. ami még nincs lezárva.  Példa : somme = 0 . amit egy kettőspont zár le. 3. melyeket egy backslash \ vagy egy nyitó [ ( { karakterrel folytathatunk. • egy utasításblokkból. hogy kiválaszthassunk vagy megismételhessünk kódrészleteket.

format ((−b−r a c _ d e l t a ) / ( 2 ∗ a ) . format(−c /b ) ) else : p r i n t ( " \ nNincs megold á s .0: rac_delta = sqrt ( delta ) p r i n t ( " \nx1 = { : .Bevezetés a Python 3-ba moyenne = somme / nb_valeurs   © Figyelem Minden utasítás. 3. 2 f } " . 2 f } \ t x2 = { : .1. (−b+r a c _ d e l t a ) / ( 2 ∗ a ) ) ) 28 c Hungarian Translation Daróczy Péter . ami ugyanolyan mértékban van behúzva. 2 f } " . ugyanahhoz a blokkhoz tartozik. " ) else : d e l t a = b∗∗2 − 4∗ a∗ c i f delta > 0. ábra. Összetett utasítások  Gyakran szükség van az összetett utasítások egymásba ágyazására : from math import ∗ a = 1 b = 8 c = 3 i f a == 0 : i f b != 0 : p r i n t ( " \nx = { : .

[elif] . 2 f } " . 3 # K l a s s z i k u s í r ásmód : if x < y: kisebb = x else : kisebb = y # A t e r n á l i s oper á t o r a l k a l m a z á sa : kisebb = x i f x < y e l s e y p r i n t ( " Kisebb : " . 3. format(−b /(2∗ a ) ) )   © 3. " ) else : p r i n t ( " \nx = { : .  Választás Választás : if .2. használhatjuk a (Cből vett) ternális operátort :   x. k i s e b b ) # 3 © c Robert Cordeau 29 .2. Egy alternatíva tömör szintaxisa  Ahhoz.1. hogy például megtaláljuk két szám közül a kisebbiket. y = 4.2.0: p r i n t ( " \nA gy ök nem v a l ó s .Bevezetés a Python 3-ba e l i f delta < 0.2.[else] Egy alternatíva kiválasztása : i f x < 0: print ( "x negativ " ) e l i f x % 2: p r i n t ( " x p o z i t i v é s pá r a t l a n " ) else : p r i n t ( " x nem n e g a t i v é s pá r o s " ) Egy boolean változó tesztelése :    ©   i f x : # jobb mint ( i f x i s True : ) vagy ( i f x == True : ) pass © 3.

Ciklusok Programhurok : while Egy programrész ismétlése :    x .3. ’a ’ . " \n " ) # 8 © Klasszikus alkalmazás : egy numerilus érték bevitelének a szűrése (meg kell adnunk a típust mert az input() egy karakterláncot visz be:    n = i n t ( i n p u t ( ’ I r j o n be egy eg é s z e t [ 1 .Bevezetés a Python 3-ba 3. end=" " ) # c i a o for x in [2 .1. end=" " ) # 2 a 3 . cpt = 257 . . end=" " ) # 0 1 2 3 4 © 30 c Hungarian Translation Daróczy Péter .2. akár nem sorban bejárhatunk típus szerint) :    for l e t t r e in " ciao " : p r i n t ( l e t t r e . 3.3. 1 4 f o r i i n range ( 5 ) : p r i n t ( i . 1 4 ] : p r i n t ( x . x . 3 . . " ) kö z e l í t é s e = " ) while x > 1: x //= 2 # d i v i s i o n avec t r o n c a t u r e c p t += 1 # increment á l á s p r i n t ( cpt . Bejárás : for Egy iterálható objektum bejárása (minden konténer amit elemről elemre akár sorban. 1 0 ] : ’ ) ) © 3. 0 p r i n t ( " l o g 2 ( " . 1 0 ] : ’ ) ) w h i l e not ( 1 <= n <= 1 0 ) : n = i n t ( i n p u t ( ’Ké rem í r j o n be egy eg é s z e t [ 1 .3.

Ciklus rövidrezárása : continue Az utasítást tartalmazó éppen futó for vagy while ciklus következő iterációjára ugrik.2.4. ami csak akkor hajtódik végre. 10 i f x == 5 : continue p r i n t ( x . 9 .4. Ciklusok teljes szintaxisa while . 3 .1.3. 2 .4. 5 . 7 . 4 . 10 i f x == 5 : break p r i n t ( x . a ciklus fejsorára :  f o r x i n range ( 1 . "−r e " )   © 3. 2 . 7 . end=" " ) p r i n t ( " \nA c i k l u s megszakad # A kö v e t k e t ö k e t í r j a k i : # 1 2 3 4 # A c i k l u s megszakad x = 5−r e x =" . end=" " ) p r i n t ( " \nA c i k l u s á t u g r o t t a az 5−ö t " ) # Ki í r a t j a : # 1 2 3 4 6 7 8 9 10 # A c i k l u s á t u g r o t t a az 5−ö t   © 3. 1 1 ) : # 1 . magyarul megszakítás nélkül : c Robert Cordeau 31 . 6 . 5 . x . 8 . 8 . 3. 6 . Utasításszekvenciák megszakadása Egy ciklus megszakítása : break A Python azonnal kilép a break utasítást tartalmazó éppen futó for vagy while ciklusból :  f o r x i n range ( 1 . 3 .4.else A while és a for ciklusnak lehet egy else része. ha a ciklus szabályszerűen fejeződik be. 1 1 ) : # 1 .Bevezetés a Python 3-ba 3. 4 . 9 .

"−ben " ) to_save = None # to_save v é r t é ke te h á t t o _ s e a r c h vagy None : p r i n t ( " To_save =" . 5 . hogy felkészítsük az alkalmazásokat szokatlan körülmények között történő működésre.4. akkor egy exception objektum halad át a kivétel 32 c Hungarian Translation Daróczy Péter . 9 . sequence . format ( y .else ©  Egy példa lista bejárásával : sequence = [ 2 . " n i n c s benne " . 7 . amikor minden rendben megy.4. " pr í mszám" ) for . 11] t o _ s e a r c h = i n t ( i n p u t ( " I r j o n be egy eg é s z e t : " ) ) f o r i in sequence : i f i == t o _ s e a r c h : to_save = i break # i t t van a megszak í t á s ! else : p r i n t ( to_search . szükség van az érzékeny kódrészek végrehajtási hibáinak kezelésére. A kivételkezelő (exception) mechanizmus elválasztja egyrészt azt az utasítássorozatot. Kivételek (exceptions) Annak érdekében. amit akkor kell végrehajtani.Bevezetés a Python 3-ba    y = i n t ( i n p u t ( ’ I r j o n be egy p o z i t í v eg é s z e t : ’ ) ) w h i l e not ( y > 0 ) : y = i n t ( i n p u t ( ’Ké rem í r j o n be egy p o z i t í v eg é s z e t : ’ ) ) x = y // 2 while x > 1: i f y % x == 0 : p r i n t ( " {} −nak s z o r z ó t é nyez ö j e {} " . Amikor egy hiba lép fel.hiba esetén végrehajtandó . to_save )   © 3. x ) ) break # i t t van a megszak í t á s ! x −= 1 else : p r i n t ( y .utasítássorozatot. másrészt egy vagy több .

# #normá l v é g r e h a j t á s ú kó dr é s z e x c e p t <exception_1> as e1 : . ..Bevezetés a Python 3-ba terjedési mechanizmuson és a programvégrehajtás az ad hoc hibakezelő utasítássoroknak adódik át. # a 2 kiv é t e l kezel é se . . # az 1 k i v é t e l k e z e l é s e e x c e p t <exception_2> as e2 : . Az alosztályok hierarchiája mintegy húsz standard kivételt tartalmaz. −1. else : . 1 . Ha a Python egy hibát észlel (exception generálása). • a hiba megfelelő kezelése. format ( s i n ( x ) / x ) . . end=" " ) # k e z e l i a 0 k i v é t e l t   # −0. . A mechanizmus két lépésben működik : • egy kivétel generálódik a hiba észlelésekor. 4 5 5 0 . #mind í g v é g r e h a j t a n d ó kód A raise utasítással szándékosan hozhatunk létre kivételt : c Robert Cordeau 33 © . 0 4 7 0 . ennek kezelése a megfelelő except blokkban történik.189 A Python által generált össszes kivétel az Exception osztály alosztályának példánya. ©  Egy kivétel teljes szintaxisa :   try : . 5 ) : # −4. 8 4 1 1 . 0 0 .. 3 . −3. 3 f } ’ . . 2 . . . 4 5 5 0 . 4 try : p r i n t ( ’ { : .189 0 . . Szintaxis A normál utasítások sorozatát egy try blokkban helyezzük el. . 0 4 7 −0. . −2.  from math import s i n f o r x i n range ( −4 . 0 . end=" " ) e x c e p t Z e r o D i v i s i o n E r r o r : # mind í g e l öá l l í t egy k i v é t e l t p r i n t ( 1 . 0 . #hiba h i ányában v é g r e h a j t a n ó kód finally : . 8 4 1 0 .

hogy ne blokkoljuk a kivételt. Ezt a mechanizmust egy klasszikus példával illusztráljuk melyben fontos a haszált fájlok lezárása :  i l i mporte de f e r m e r l e f i c h i e r u t i l i s é : # e h e l y e t t a kód h e l y e t t : f h = None try : f h = open ( f i l e n a m e ) f o r l i n e in fh : process ( line ) e x c e p t EnvironmentError as e r r : print ( err ) finally : i f f h i s not None : fh . 1]− ben " ) © Megjegyzés Egy except blokkban az érték nélküli raise lehetővé teszi. Kontextuskezelő : Ez a szintaxis azzal egyszerűsíti a kódot. hogy bizonyos műveletek végre lesznek hajtva az adott utasításblokk előtt és után. hogy biztosítja. a kivétel továbbterjedését. . c l o s e () # e g y s z e r übb a kö v e t k e z ö t í r n i : try : with open ( f i l e n a m e ) as f h : f o r l i n e in fh : process ( line ) e x c e p t EnvironmentError as e r r : print ( err )   © 34 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba    x = 2 i f not ( 0 <= x <= 1 ) : r a i s e Val ueErr or ( " x n i n c s benne [ 0 .

Szekvenciák Mi a szekvencia ? Definíció A szekvencia olyan konténer. a halmazokat és a szövegfájlokat részletezi. fejezet Standard konténerek A második fejezet az egyszerű adattípusokat mutatta be.1. A Python azonban sokkal többet nyújt a felhasználónak : a konténereket. 4. • listák. Általában fogalmazva egy konténer más objektumok tárolására szánt objektum. A Pythonnak három elöre definiált szekvenciatípusa van : • karakterláncok.Bevezetés a Python 3-ba 4. Ez a fejezet a szekvenciákat.1. az asszociatív táblázatokat. • tuple-ek c Robert Cordeau 35 . 4. ami egészszámokkal indexelt rendezett elemeket tartalmaz.1.

6 i n l 3 ) # True F a l s e True f o r i i n range ( l e n ( l 3 ) ) : p r i n t ( i . Listák Definíció. ’ carreau ’ . 4. 6 . l 1 ) # l 1 = [ 0 . 9 .2. 2 . 14 . sep="−" . 8 i n l 2 .1. a tartalmazás operátorának (in) és az iterráció operátorának range() használata : t r u c . l 3 ) # l 3 = [ 2 . 7 ] l 3 = l i s t ( range ( 2 . 0 . 2 ) ) p r i n t ( " l 3 =" . 8 ) ) p r i n t ( " l 2 =" . end=" " ) # 0−2 1−4 2−6 3−8 36 c Hungarian Translation Daróczy Péter   © . szintaxis és példák Definíció Adott esetben heterogén. ’ coeur ’ . [4 . 4 . l i s t 2 ] # l i s t ák l i s t á j a print ( l i s t 3 ) # [ [ ’ a ’ . 8 ] p r i n t ( 2 i n l 1 . 1 . [ 0 . 0 ] l 1 = l i s t ( range ( 4 ) ) p r i n t ( " l 1 =" . ’b ’ ] li st 2 = [4 . 0 . 5 . ’ pique ’ ] p r i n t ( c o l o r s ) # [ ’ t r e f l e ’ . módosítható elemek gyűjteménye Szintaxis Az elemeket vessző választja el és szögletes zárójelben vannak. ’ pique ’ ] l i s t 1 = [ ’a ’ . 2.2.Bevezetés a Python 3-ba 4. 6 . 7 1 8 ] ] © 4. Inicializálás és tesztek  Az ismétlés.2. l 2 ) # l 2 = [ 4 . ’ pique ’ ] c o l o r s [ 1 ] = 14 p r i n t ( c o l o r s ) # [ ’ t r e f l e ’ . machin = [ ] .2.    c o l o r s = [ ’ t r e f l e ’ . 0 . ’ carreau ’ . 0 . 2 . l 3 [ i ] . ’ coeur ’ . 3 ] l 2 = l i s t ( range ( 4 . ’b ’] . ’ coeur ’ .718] l i s t 3 = [ l i s t 1 . 0 ] ∗ 3 print ( truc ) # [ ] (ü res l i s t a ) p r i n t ( machin ) # [ 0 .

’ tomate ’ ] © c Robert Cordeau 37 . 1 7 . 2 5 . 1 7 . ’ c o n f i t u r e ’ . 7 2 ] nombres . ’ s e l ’ . helyettesíteni akarjuk.  Metódosok Néhány listamódosító utasítás : nombres = [ 1 7 . vagy több elemet be akarunk illeszteni a listába. Listarészek manipulálása Szintaxis Ha egy lista több elemét törölni. 3 ]   © 4. ’ p o u l e t ’ . 7 2 ] nombres . extend ( [ 1 . 1 4 . ’ s e l ’ . ’ mayonnaise ’ . ’ tomate ’ ] mots [ 2 : 2 ] = [ ’ m i e l ’ ] # b e s z ú r á s a 3 . 1 4 . 2 5 . i n d e x ( 1 7 ) ) # 3 nombres [ 0 ] = 11 nombres [ 1 : 3 ] = [ 1 4 . 1 0 ] p r i n t ( nombres . 1 7 . 3 8 . 7 2 . 2 .2. p o z i c i óba p r i n t ( mots ) # [ ’ jambon ’ . akkor egy értákadás baloldali tagjában meg kell adnunk egy listarészt és a jobboldali tagban egy listát kell magadnunk. 2 ] p r i n t ( nombres .4. 2 . ’ m i e l ’ . 2 . ’ p o u l e t ’ . r e v e r s e ( ) nombres . 2 5 .    mots = [ ’ jambon ’ . 1 7 . ’ p o u l e t ’ . pop ( ) ) # 10 p r i n t ( nombres ) # [ 1 1 . 3 ] ) p r i n t ( nombres ) # [ 1 1 . ’ s a l a d e ’ ] mots [ 1 : ] = [ ’ mayonnaise ’ . s o r t ( ) p r i n t ( nombres ) # [ 1 0 . append ( 1 2 ) nombres . 1 0 .2. ’ b e u r r e ’ ] mots [ 2 : 4 ] = [ ] # t ö r l é s egy ü r e s l i s t a hozz á r e n d e l é s é v e l p r i n t ( mots ) # [ ’ jambon ’ . ’ b e u r r e ’ ] mots [ 1 : 3 ] = [ ’ s a l a d e ’ ] p r i n t ( mots ) # [ ’ jambon ’ . ’ tomate ’ ] p r i n t ( mots ) # [ ’ jambon ’ . 3 8 . 1 . 1 7 ] p r i n t ( nombres .Bevezetés a Python 3-ba 4. 1 7 . count ( 1 7 ) ) # 2 nombres .3. ’ m i e l ’ . 1 7 . remove ( 3 8 ) p r i n t ( nombres ) # [ 1 2 . ’ mayonnaise ’ . 2 .

3. szintaxis és példák Definíció Egy szűkített lista egyenértékű egy olyan for ciklussal. Definíció. számokból álló lista kombinációja : ©   r e s u l t 5 = [ x+y f o r x i n une_seq f o r y i n une_autre ] # ugyanaz a hat á sa . append ( x+1) A harmadik forma . hogy nagyon tömör formában hozzunk létre egy listát. A szűkített listák három formában használhatók.számok listája szűréssel : ©    r e s u l t 3 = [ x+1 f o r x i n une_seq i f x > 2 3 ] # ugyanaz a hat á sa . mint : result2 = [ ] f o r x i n une_seq : r e s u l t 2 . append ( x+y ) 38 c Hungarian Translation Daróczy Péter © . mint : result6 = [ ] f o r x i n une_seq : f o r y i n une_autre : r e s u l t 6 . mint : result4 = [ ] f o r x i n une_seq : i f x > 23: r e s u l t 4 . ami lehetővé teszi.3. 11)] 4.számok egyszerű listája :    r e s u l t 1 = [ x+1 f o r x i n une_seq ] # ugyanaz a hat á sa .1.  Az első forma .két. Ez a jelölésmód fedi egy szűkített halmaz matematikai definícióját : {x2 |x ∈ [2. Szűkített listák Egy szűkített lista egy olyan kifejezés. 10]} ⇒ [x**2 for x in range(2. ami ugyanazt a listát állítja elő az append() metódussal.Bevezetés a Python 3-ba 4. append ( x+1) A második forma .

" 78 " . [0 . a tuple-k sem módosíthatók ! c Robert Cordeau 39 . • Hasznosak konstansok definiálásakor. mint : s = 0 for i in valeurs_s : s = s + int ( i ) p r i n t ( s ) # 761 # egy 2D l i s t a i n i c i a l i z á l á sa m u l t i _ l i s t e = [ [ 0 ] ∗ 2 f o r l i g n e i n range ( 3 ) ] print ( multi_liste ) # [[0 . de a bejárásuk gyorsabb. " 671 " ] # s t r i n g e k b ö l á l l ó l i s t a k o n v e r z i ó j a eg é s z e k b ö l á l l ó l i s t ává valeurs_i = [ i n t ( i ) f o r i in valeurs_s ] # [ 1 2 . 2 . 0] . [0 . 0 ] ]   © 4. 0] . 671] # l i s t a ö s s z e g é nek k i s z ámí t á sa a be ép í t e t t sum f üggv é n n y e l p r i n t ( sum ( [ i n t ( i ) f o r i i n v a l e u r s _ s ] ) ) # 761 # ugyanaz a hat á sa .Bevezetés a Python 3-ba A Pythonra nagyon jellemző felhasználás :  v a l e u r s _ s = [ " 12 " . Figyelem Mint a karakterláncok. 78 . Tuple-k Definíció Rendezett és nem módosítható adott esetben heterogén elemek gyűjteménye Szintaxis Az elemeket vessző választja el és kerek zárójelben vannak. [ 1 . 3 ] ) © • A tuple-ket ugyanúgy használjuk mint a listákat.    mon_tuple = ( ’ a ’ .4.

hogy az értékadás látszólag egyszerű művelete a Pythonban egy valós nehézség. 2 . append ( 5 ) print ( c ) print (a) # egy h i v a t k o z á s # [1 . ’ c a s s e ’ . 4 . • egy változónév létrehozása (baloldali tag). ’ p l i e ’ . Visszatérés a hivatkozásokhoz Már láttuk. 3 . hogy az objektum minden eleme és atributuma külön és rekurzív módon legyen másolva. ’ ne ’ . 2 . " p o i n t " ] phrase = f a b l e phrase [ 4 ] = " casse " p r i n t ( f a b l e ) # [ ’ Je ’ . " romps " . akkor a copy. amikor azt is akarjuk. 40 c Hungarian Translation Daróczy Péter . copy ( a ) c .5.Bevezetés a Python 3-ba 4. 2 .718   © A fenti példában az értékadások több műveletet foglalnak magukba : • egy ad hoc típusú objektum (jobboldali tag) létrehozása a memóriában. ’ p o i n t ’ ]   © Ha egy objektumnak egy igazi másolatát akarjuk létrehozni. 5] # [1 . 2 . 4] # egy " f e l s z í nes " má s o l a t # [1 .deepcopy() függvényt alkalmazzuk. ’ mais ’ . 4]   © Azon ritka alkalmakkor. " ne " . akkor a copy modult kell használni :  import copy a = [1 .  i = 1 msg = " Quoi de n e u f ? " e = 2. 3] b = a b . Ennek a mechanizmusnak az egyik következménye az. • az adat tárolása a létrehozott objektumba. 3 . ha egy módosítható objektumnak adunk értéket. append ( 4 ) print (a) c = copy . akkor az egyik objektumon végrehajtott minden változtatás a másik objektumot is módosítani fogja :  f a b l e = [ " Je " . " mais " . " p l i e " . 3 . • ennek a változónévnek az összekapcsolása az értéket tartalmazó objektummal.

Inkrementális értékadás egy módosítható objektumnak A hozzárendelésről elmondottak grafikai kiegészítése Inkrementális értékadás egy nem-módosítható objektumnak (egy egészszám esete : ??) : Bemutattuk a közbenső összeadás lépését.1. ábra. Inkrementális értékadás egy nem-módosítható objektumnak (a) Egy lista hozzárendelése (b) Közbenső lista létrehozása a memóriában (c) Inkrementális hozzárendelés 4. ábra. c Robert Cordeau 41 .Bevezetés a Python 3-ba (a) Egy egész hozzárendelése (b) Közbenső összeadás (c) Megnövelt érték hozzárendelése 4.2.

Jellemzői : • egy kulcs előfordulását tesztelő operátor (in) . de függvények. 4. érték párok számát.6. • a (len()) függvény. de nem rendezett. 42 c Hungarian Translation Daróczy Péter . Az értékek lehetnek numerikus értékek.. 4. A szótárak egy összetett adattípust képeznek. osztályok vagy objektumok is.) Egy kulcs lehet alfabetikus. de nem szekvenciák. de a tárolt adatpárok nem foglalnak el egy megváltoztathatatlan sorrendet. bármilyen hash-elhető típus. ami kulcs : érték párok tárolását teszi lehetővé. kapcsos zárójel határolja.2. A listákhoz hasonlóan a szótárak is módosíthatók.6. szekvenciák. (Lásd a hash-függvényeknél. 4.. Asszociatív tömbök Az asszociatív tömb típus Definíció Az asszociatív tömb olyan adattípus. Az adathoz való hozzáférés a kulcs segítségével nagyon gyors. mert a kulcs csak egyszer fordulhat elő a tömbben. A szótárak (dict) Szintaxis kulcs : érték párok vesszővel elválasztva. ami megadja a tárolt kulcs : • iterrálható (bejárható). szótárak.6.Bevezetés a Python 3-ba Inkrementális értékadás egy módosítható objektumnak (egy lista esete : ??) : Bemutattuk a közbenső lista létrehozásának lépését. numerikus . az helyüket egy speciális algoritmussal kezeli a Python. A Python a standard dict típust kínálja fel a felhasználónak.1.

values ( ) ) ) # [4098 . ’ j a c k ’ ] p r i n t ( sorted ( t e l . 4127] p r i n t ( ’ guido ’ i n t e l . " s i z e " : 176} p r i n t ( d2 ) # { ’ name ’ : 3 . 6)} p r i n t ( d3 ) # { 2 : 4 . ’ s i z e ’ : 176} Metódusok ©  Néhány szótárakra alkalmazható metódus :   t e l = { ’ j a c k ’ : 4 0 9 8 . ’ guido ’ ] p r i n t ( s o r t e d ( t e l . ’ s i z e ’ : 176} # kiterjesztett defin í ci ó d2 = { " name " : 3 . 4 : 1 6 . ’ j a c k ’ : 4 0 9 8 . ’ guido ’ : 4127} p r i n t ( l i s t ( t e l .Bevezetés a Python 3-ba Példák szótárak létrehozására    # k u l c s / é r t é k pá rok b e s z ú r á sa d1 = {} # egy ü r e s s z ó t á rba d1 [ " name " ] = 3 d1 [ " s i z e " ] = 176 p r i n t ( d1 ) # { ’ name ’ : 3 . keys ( ) ) ) # [ ’ guido ’ . 4127 . 4 . ’ guido ’ : 4127} p r i n t ( t e l [ ’ j a c k ’ ] ) # 4098 d e l t e l [ ’ sape ’ ] t e l [ ’ i r v ’ ] = 4127 p r i n t ( t e l ) # { ’ j a c k ’ : 4 0 9 8 . keys ( ) ) ) # [ ’ j a c k ’ . ’ j a c k ’ not i n t e l ) # True F a l s e © c Robert Cordeau 43 . 3 ) . ’ i r v ’ : 4 1 2 7 . ’ i r v ’ . 6 : 36} # né v v e l megadott param é t e r e k haszn á l a t a d4 = d i c t ( name=3. ’ i r v ’ . ’ name ’ : 3} # k u l c s / é r t é k pá rok l i s t á j á nak a l k a l m a z á sa d5 = d i c t ( [ ( " name " . s i z e =176) p r i n t ( d4 ) # { ’ s i z e ’ : 1 7 6 . ( " s i z e " . ’ sape ’ : 4139} t e l [ ’ guido ’ ] = 4127 p r i n t ( t e l ) # { ’ sape ’ : 4 1 3 9 . ’ s i z e ’ : 176} # s z ük í t e t t d e f i n í c i ó d3 = {x : x ∗∗2 f o r x i n ( 2 . 1 7 6 ) ] ) p r i n t ( d5 ) # { ’ name ’ : 3 .

’ b ’ . ábra. Műveletek halmazokon    X. Az információk tartós megőrzéséhez azonban permanens memóriát kell használni. .. például merevlemezt. DVD-t. de jelzem .3. Y) # Y = { ’ s ’ . ezért nincs szükség külső modul importálására. ’ c ’} p r i n t (Y − X) # { ’ s ’} p r i n t (X | Y) # { ’ a ’ . ’ c ’ .1. 44 c Hungarian Translation Daróczy Péter . Ez a Pythonban egy előre definiált típus.8. 4. ’ b ’ . 4. Y = s e t ( ’ abcd ’ ) . a Python a file fogalmát használja. hash-elhető elemek rendezetlen iterrálható gyűjteménye. X) # X = { ’ a ’ . Szövegfile-ok A file-ok : bevezetés A számítógép csak a RAM-ban lévő programokat hajtja végre. ’ d ’ . egy editorral olvasható) korlátozódik a tárgyalás. ’ d ’} p r i n t ( "Y =" . s e t ( ’ sbds ’ ) p r i n t ( "X =" . ’ b ’ . A szövegfile-okra (portábilis. ’ d ’ } © 4.7..Bevezetés a Python 3-ba 4. ’ s ’ } p r i n t (X & Y) # { ’ b ’ . Halmazok (set) Definíció Különböző. Mint a programnyelvek többsége. ’ d ’} : e g y e t l e n elem ’ s ’ p r i n t ( ’ c ’ i n X) # True p r i n t ( ’ a ’ i n Y) # F a l s e p r i n t (X − Y) # { ’ a ’ . flash-memóriát. hogy a binárisan kódolva tárolt file-ok tömörebbek és gyorsabb a kezelésük.8. ’ c ’ .

close () # a p r i n t f i l e o p c i ó haszn á l a t a f 2 = open ( " t r u c 2 . t x t " . "w" . w r i t e ( s ) # az s s t r i n g e t k i í r j a f−be l = [ ’a ’ . "w" ) p r i n t ( " abcd " .Bevezetés a Python 3-ba 4. ’ascii’ . A file-ok kezelése File-ok megnyitása és lezárása  A szövegfile-ok megnyitásának módjai :   f 1 = open ( " monFichier_1 " . "w" ) s = ’ t o t o \n ’ f .    A lezárásra egyetlen metódus van: © f1 . ’b ’ . A leggyakoribb kódolások az ’utf-8’ (a Python 3 ezt a kódolást preferálja).. Amíg a file nincs lezárva. " a " . Az opcionális encoding biztosítja a byte és str típusok közötti átalakítást. " r " . ’latin1’. e n c o d i n g= ’ u t f −8 ’ ) # í r á s f 3 = open ( " monFichier_3 " . e n c o d i n g= ’ u t f −8 ’ ) # o l v a s á s f 2 = open ( " monFichier_2 " . ’ c ’ ] f . addig a tartalma nincs kimentve a diszkre. close ()  Soros kiírás Metódusok :   f = open ( " t r u c . f i l e =f 2 ) f2 .2.. close () © c Robert Cordeau 45 . e n c o d i n g= ’ u t f −8 ’ ) # hozz á f üz é s © A Python alapértelmezetten text módban (t jelöli) használja a file-okat (a bináris file-ok esetében a b módot kell megadni).8. t x t " . w r i t e l i n e s ( l ) # az l l i s t a s t r i n g j e i t k i í r j a f−be f .

r e a d l i n e ( ) # a kö v e t k e z ö s o r t −−> s t r i n g s = f . r e a d l i n e s ( ) # az eg é s z f i l e −t −−> s t r i n g e k l i s t á j a f . " q u e s t " . " r " ) s = f . " f a v o r i t e c o l o r " ] answers = [ " L a n c e l o t " . v in knights . " t a c " . t x t " . close () © 4. Iterrálás a konténereken A következő technikák klaszikusak és igen hasznosak. end=" " . " Robin " : " th e brave " } f o r k . a ) ) # What i s your name? I t i s L a n c e l o t . 46 c Hungarian Translation Daróczy Péter © . t x t " ) # a l a p é r t e l m e z e t t e n " r " mód for ligne in f : p r i n t ( l i g n e [ : − 1 ] ) # a s o r e l e j é r e ugr á shoz f . a i n z i p ( q u e s t i o n .  Kulcsok és értékek kinyerése egy szótár ciklussal történő bejárásával :    k n i g h t s = { " Gallahad " : " t he pure " . r ead ( 3 ) # l e g f e l j e b b n byte−o t −−> s t r i n g s = f .9. " t o e " ] ) : p r i n t ( i . # What i s your f a v o r i t e c o l o r ? I t i s b l u e . " b l u e " ] f o r q . v) # Gallahad t h e pure # Robin th e brave Kulcsok és értékek kinyerése egy lista ciklussal történő bejárásával : ©    f o r i . v i n enumerate ( [ " t i c " . # What i s your q u e s t ? I t i s t h e Holy G r a i l . r ead ( ) # az eg é s z f i l e −t −−> s t r i n g s = f . sep="−>" ) # 0−> t i c 1−>t a c 2−>t o e Két (vagy több) szekvencia ciklussal történő párosítása : ©   q u e s t i o n = [ " name " .Bevezetés a Python 3-ba Soros olvasás Metódusok :    f = open ( " t r u c . " . " th e Holy G r a i l " . v . items ( ) : print (k . format ( q . close () # Egy f i l e s o r a i n a k e g y e s s é v e l t ö r t énö k i í r á sa f = open ( " t r u c . answers ) : p r i n t ( " What i s your {}? I t i s { } .

end=" " ) # a p p l e banana orange pear   © 4. format ( " z é r o " . " a p p l e " . " deux " ) ) # deux z é r o un p r i n t ( " Je m’ a p p e l l e {} " . " orange " . 1 0 . format ( "−" ∗ 1 0 ) ) # −−−−−−−−−− Helyettesítések nevesített mezőkkel : ©   a. " orange " . " un " . format ( c=a+b . " un " . format ( " Bob " ) ) # Je m’ a p p e l l e Bob p r i n t ( " Je m’ a p p e l l e {{{}}} " . format ( " z é r o " . " deux " ) ) # z é r o un deux p r i n t ( " {2} {0} {1} " . 2 ) ) : p r i n t ( i . b = 5. " banana " . d=a−b ) ) # The s t o r y o f 8 and 2 © c Robert Cordeau 47 . end=" " ) # 9 7 5 3 1 ©  Egy olyan szekvencia bejárása. amiben az eredeti szekvencia minden eleme csak egyszeres fordul elő (az eredeti szekvencia változatlan) : b a s k e t = [ " a p p l e " . " p ear " .Bevezetés a Python 3-ba Egy invertált szekvencia bejárása (az eredeti szekvencia változatlan) :    f o r i i n r e v e r s e d ( range ( 1 . 3 p r i n t ( " The s t o r y o f { c } and {d} " . " orange " ] f o r f in sorted ( set ( basket ) ) : p r i n t ( f . format ( " Bob " ) ) # Je m’ a p p e l l e {Bob} p r i n t ( " {} " . Formázott kiíratás A format() metódussal mindenféle kiíratás vezérelhető.  Egyszerű helyettesítések :    p r i n t ( " {} {} {} " .10.

1415926535897931 p r i n t ( " {} . str() és repr() : ©    >>> p r i n t ( " { 0 ! s } { 0 ! r } " . format ( s t o c k ) ) # Nous avons de l ’ e n c r e e t du p a p i e r en s t o c k Formázás szótár segítségével : ©    p r i n t ( "My name i s { 0 [ name ] } " . format ( d i c t ( name= ’ Fred ’ ) ) ) # My name i s Fred d = d i c t ( animal = ’ é l é phant ’ . format ( math . ’ e n v e l o p p e ’ . p i } . f l o a t _ i n f o . e t {} " . format ( n . 1 4 1 5 9 2 6 5 3 5 9 p r i n t ( " {0} . 1 4 1 5 9 2 6 5 3 5 9 e t 100 48 c Hungarian Translation Daróczy Péter . {1} e t {0} " . e p s i l o n = 2 . ’ e n c r e ’ . format ( " t e x t e \n " ) ) texte ’ t e x t e \n ’ Numerikus formázás : © p r i n t ( " {0} { 0 : b} { 0 : o} { 0 : x} " . 2 2 0 4 4 6 0 4 9 2 5 e −16 Szövegkonverziók. format ( n . 1 4 1 5 9 2 6 5 3 5 9 . p i ) ) # 1 0 0 . ’ chemise ’ . ’ buvard ’ ] p r i n t ( " Nous avons de l ’ { 0 [ 3 ] } e t du { 0 [ 0 ] } en s t o c k \n " . p o i d s = 12000) p r i n t ( " L ’ { 0 [ animal ] } pé s e { 0 [ p o i d s ] } kg\n " . e t {} " . s y s ) ) # math . p i ) ) # 1 0 0 . 1 4 1 5 9 2 6 5 3 5 9 p r i n t ( " {} . p i ) ) # 1 0 0 . e t 3 . p i = { . p i = 3 . format ( d ) ) # L ’ é l é phant pé s e 12000 kg Helyettesítés nevesített atributumokkal : ©    import math import s y s p r i n t ( " math .Bevezetés a Python 3-ba Formázás lista segítségével :     s t o c k = [ ’ p a p i e r ’ . e p s i l o n = { . format ( n . e t 3 . 3 . format ( 1 7 9 ) ) # 179 10110011 263 b3 n = 100 pi = 3. e p s i l o n } " .

format ( s ) ) p r i n t ( " [ { : . 4 e } " . format (m) ) # [ The sword o f ] # 000123456789 # ###123456789 © c Robert Cordeau 49 . format ( n . 2 f } " . format ( s ) ) p r i n t ( " [ { : 2 5 } ] " . . < 2 5 } ] " . . . 1 4 1 5 9 msg = "Ré s u l t a t s u r { : d} é c h a n t i l l o n s : { : . 1 4 Különböző formázások : # # # # # # [ The sword o f t r u t h ] [ The sword o f t r u t h ] [ The sword o f t r u t h ] [ The sword o f t r u t h ] [−−−The sword o f t r u t h −−−−] [ The sword o f t r u t h . format ( s [ : l o n g ] ) ) m = 123456789 p r i n t ( " {:0=12} " . format ( s ) ) p r i n t ( " [ { : − ^ 2 5 } ] " . p i ) p r i n t ( msg ) # Ré s u l t a t s u r 100 é c h a n t i l l o n s : 3 . format ( p i ) ) # 3 . format (m) ) p r i n t ( " {:#=12} " . . 1 4 1 6 e+00 p r i n t ( " { : g} " .Bevezetés a Python 3-ba p r i n t ( " { : . format ( s ) ) p r i n t ( " [ { : > 2 5 } ] " . format ( s ) ) l o n g = 12 p r i n t ( " [ { } ] " . format ( s ) ) p r i n t ( " [ { : ^ 2 5 } ] " . . . ]    ©   s = " The sword o f t r u t h " p r i n t ( " [ { } ] " . format ( p i ) ) # 3 .

fejezet Függvények és névterek 5.Bevezetés a Python 3-ba 5. Mindíg definiálnunk kell egy függvényt. amikor egy utasításblokk többször előfordul a kódban. " " " <b l o c _ i n s t r u c t i o n s >   © Az utasításblokk kötelező. akkor a pass utasítást alkalmazzuk. tulajdonképpen a közös kódrészlet "kiemeléséről" van szó. A (fakultatív) dokumentálás melegen ajánlott. Definíció és szintaxis Megjegyzés A függvények minden procedurális nyelv alapvető szerkezeti elemei.  Szintaxis Ez egy összetett utasítás : d e f nomFonction ( p a r a m e t r e s ) : " " " Documentation de l a f o n c t i o n . Ha üres. Definíció Egy név alatt csoportosított és kérésre végrehajtott utasítások együttese. 50 c Hungarian Translation Daróczy Péter .1.

és kimeneteket (c) Az import teszi lehetővé a kódújrafelhasználást (d) Javítja a kódtervezést 5. ábra.Bevezetés a Python 3-ba (a) Elkerüli a kódismétlést (b) Kiemeli a be.1. A függvények használatának előnyei c Robert Cordeau 51 .

1. 5. 5. 5. ábra. A megfeleltetés hozzárendeléssel történik. • Egy összetett feladatot egyszerűbb feladatokra bontják : az alkalmazás tervezése. ami a script végrehajtása során ismétlődik. Argumentumok átadása Általános mechanizmus Megjegyzés Értékátadás hozzárendeléssel : a függvénydefiníció minden paramétere rendre megfelel a függvényhívás egy paraméterének.2. • Lehetővé teszik a kód ismételt felhasználását : az importmechanizmus.Bevezetés a Python 3-ba A következő előnyeik vannak : • Elkerülik az ismétlődéseket : "faktorizálhatjuk" a kód egy részét. Argumentumátadás hozzárendeléssel 52 c Hungarian Translation Daróczy Péter . • Kiemelik az adatokat és az eredményeket : a függvény bemenetei és kimenetei.2.2.

end ) : " " " Ki í r j a a <base> s z o r z ó t á b l á t <begin> −t ö l <end> −i g . amit gyakran eljárásnak (procedure) nevezünk. 2 . p i ∗ r ∗∗2 v o l = s u r f ∗ r /3 return surf . n ∗ base .Bevezetés a Python 3-ba 5. volumeSphere ( r a d i u s ) ) Példa többszörös return használatára : © import math d e f su r f a c e V o l u me S p h e r e ( r ) : s u r f = 4 . 1 1) # 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 # 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63 10 x 7 = 70 11 x 7 = 77 © 5. 0    # Sugá r bek é r é s e é s a t é r f o g a t k i í r á sa r a d i u s = f l o a t ( i n p u t ( ’ Sugá r : ’ ) ) p r i n t ( "A gömb t é r f o g a t a =" . ’ x ’ .2.2. visszatérési érték nincs  return utasítás nélküli példa.3. Egy vagy több paraméter. " " " n = begin w h i l e n <= end : p r i n t ( n . 0 ∗ p i ∗ cube ( r ) / 3 . 0 ∗ math . begin . vol c Robert Cordeau 53 . Ebben az esetben a függvény visszatérési értéke impliciten None : d e f t a b l e ( base . ’= ’ .2. visszatérési érték használata Példa egyetszeres return használatára : from math import p i d e f cube ( x ) : r e t u r n x ∗∗3 d e f volumeSphere ( r ) : r e t u r n 4 . base . end=" " ) n += 1   # Pé l d a a f üggv é nyh í vá s r a : t a b l e ( 7 .  Egy vagy több paraméter.

p a r i t y=" p a i r e " . 10 ) # f ( −5. −5..00 # f ( −4. format ( x . Paraméterek alapértelmezett értékkel  Az alapértelmezetten nem-módosítható értékeket előszeretettel használják.  Függvény átadása paraméterben d e f t a b u l a t e ( f u n c t i o n . p a r i t y ) p r i n t ( data . a t é r f o g a t a { : g} " .00 # . lowerBound w h i l e x <= upperBound : y = function (x) p r i n t ( " f ( { : . s t o p s .2.00) = 250. lowerBound . s t e p s ) : " " "A <f u n c t i o n > é r t é k e i n e k k i í r a t á sa .00   © 5. " p a r i t á s : " . # f (5. upperBound . y ) ) x += h d e f myFunction ( x ) : r e t u r n 2∗x ∗∗3 + x − 5 t a b u l a t e ( myFunction . " s t o p b i t " ) # L e h e t s é g e s h í vá sok : 54 c Hungarian Translation Daróczy Péter .4. " b i t s / s −r e " .Bevezetés a Python 3-ba   # Fö program radius = f l o a t ( input ( ’ radius : ’ )) s . data =8. v ) ) © 5. mert a paraméter első függvényhívás által végrehajtott módosítása a következő alkalmakkor látható : d e f i n i t P o r t ( speed =9600 .00) = −260. " a d a t b i t " . " .2.. x = ( upperBound − lowerBound ) / f l o a t ( s t e p s ) . format ( s . v = s u rf a c e V o l u m e Sp h e r e ( r a d i u s ) p r i n t ( "A gömb f e l s z í ne { : g} . 5 . 2 f }) = { : . 2 f } " .00) = −137. Szü ks é g van egy ( lowerBound < upperBound ) é s ( s t e p s > 0) é r t é kre " " " h . speed .5. s t o p s =1): p r i n t ( " I n i .

6) p r i n t ( somme(∗ e l e m e n t s ) ) # 12   ©    © c Robert Cordeau 55 . c ) : r e t u r n a+b+c # Pé l d a f üggv é nyh í vá s r a : elements = (2 . 1 3 ) ) # 78 Megjegyzés : Ha a függvénynek több argumentuma van. 9600 b i t s / s −r e p a r i t á s : p a i r e # 8 adatbit 1 stopbit i n i t P o r t ( p a r i t y=" n u l l e " ) # I n i . 2400 b i t s / s −r e p a r i t á s : p a i r e # 7 adatbit 2 stopbit   © 5. b . A függvényhíváskor egy tuple-t is átadhatunk paraméterként (valójában egy szekvenciát).Bevezetés a Python 3-ba initPort () # I n i . 2) # I n i . 7 . a tuple az utolsó pozícióban van. " p a i r e " . 4 .6. ami egy "klasszikus" függvény paraméterlistává alakul át : d e f somme ( a .2.  Tetszőleges számú argumentum : egy tuple átadása d e f somme(∗ a r g s ) : " " "A <t u p l e > é r t é k e i n e k ö s s z e g e a v i s s z a t é r é s i é r t é k . 9600 b i t s / s −r e p a r i t á s : n u l l e # 8 adatbit 1 stopbit i n i t P o r t (2400 . 4 2 . " " " resultat = 0 f o r nombre i n a r g s : r e s u l t a t += nombre return r e s u l t a t # Pé l d ák f üggv é nyh í vá s r a : p r i n t ( somme ( 2 3 ) ) # 23 p r i n t ( somme ( 2 3 .

2.2. 5. ’ e ’ : 1 4 .   © 5. ’ f ’ : 9} Megjegyzés : Ha a függvénynek több argumentuma van. Globális érvényességi kör : a függvények (és osztályok) belső objektumai lokálisak. ’ b ’ : 42} # egy s z ó t á r megadá s á v a l : # mots = { ’ d ’ : 8 5 . A globális objektumok nem módosíthatók a lokális érvényességi körökben.1.3.3. Nevek feloldása : az LGI szabály A nevek keresése először lokálisan (L). Egy szótár kezeli a globális objektumokat : a globals() utasítás szolgáltatja a változó : érték-párokat. Globális érvényességi kör : ez a __main__ modul. a szótár a legutolsó pozícióban van (egy esetleges tuple mögött).3.Bevezetés a Python 3-ba 5. végül a Pythonon belül (internal) (I) történik : 56 c Hungarian Translation Daróczy Péter . de nem láthatók csak bizonyos memóriaterületeken belül. 5. majd globálisan (G). ’ f ’ : 9 } p r i n t ( unDict (∗∗ mots ) ) # { ’ e ’ : 1 4 . Névterek Objektumok érvényeségi köre Megjegyzés Érvényességi kör : az objektumok nevének létrehozása az első hozzárendeléskor történik.  Tetszőleges számú argumentum : egy szótár átadása d e f unDict (∗∗ k a r g s ) : return kargs # Pé l d ák f üggv é nyh í vá s r a # n e v e s í t e t t param é t e r e k k e l : # p r i n t ( unDict ( a =23 .7. ’ d ’ : 8 5 . b=42)) # { ’ a ’ : 2 3 . A locals() utasítás szolgáltatja a változó : érték-párokat.

Az LGI szabály  Példák érvényességi körökre # x é s f u n c hozz á r e n d e l é s e a modulban t ö r t é n i k : g l o b á l i s a k d e f f u n c ( y ) : # y é s z hozz á r e n d e l é s e f u n c −ban : l o k á l i s a k g l o b a l x # l e h e t öv é t e s z i x mó dos í t á s á t a kö v e t k e z ö sorban x += 2 z = x + y return z x = 99 p r i n t ( f u n c ( 1 ) ) # 102    © # x é s f u n c hozz á r e n d e l é s e a modulban t ö r t é n i k : g l o b á l i s a k d e f f u n c ( y ) : # y é s z hozz á r e n d e l é s e a f u n c −ban : l o k á l i s a k # a f u n c −ban : l o k á l i s é rv é n y e s s é g i k ö r z = x + y return z x = 99 p r i n t ( f u n c ( 1 ) ) # 100   © c Robert Cordeau 57 . ábra.3.Bevezetés a Python 3-ba 5.

x .Bevezetés a Python 3-ba  # x é s f u n c hozz á r e n d e l é s e a modulban t ö r t é n i k : g l o b á l i s a k d e f f u n c ( y ) : # y . z hozz á r e n d e l é s e a f u n c −ban : l o k á l i s a k x = 3 # e z az ú j x l o k á l i s m a s z k o l j a a g l o b á l i s x−e t z = x + y return z x = 99 print ( func ( 1 ) ) # 4   © 58 c Hungarian Translation Daróczy Péter .

Bevezetés a Python 3-ba 6. amiket moduloknak nevezünk. • a rendszer névterének megosztása.py. Modulok Definíció Modul : olyan független file. A modulok előnyei: • a kód újra történő felhasználása. ami lehetővé teszi több modul csoportosítását. 6. hogy más programokban felhasználhatók legyenek. ami lehetővé teszi egy program több script-re történő felbontását. c Robert Cordeau 59 . Ez a fejezet bemutatja hogyan kell a modulokat kódolni és egy másik modulba importálni. fejezet Modulok és csomagok Egy Python program általában több forrásfile-ból áll. • megosztott szolgáltatások vagy adatok előállítása. akkor a moduloknak függetleneknek kell lenni egymástól. • a dokumentáció és a tesztek beépíthetők a modulba. Meg fogjuk ismerni a csomag (package) fogalmát.1. Ha korrekten vannak kódolva. A filekiterjesztés . Ez a mechanizmus lehetővé teszi hatékony függvény és osztálykönyvtárak létrehozását.

Példák  Az "autot-test" fogalma A cube_m. objektumait importálja :    from math import pi .py egy modul. Importáljuk a cube_m.py file-ban lévő függvényt : © 60 c Hungarian Translation Daróczy Péter .1. • harmadik fél könyvtári moduljai . parancs csak a modul obj1.1. • saját modulok..1.. s i n .. Modul importálása Kétféle szintaxis lehetséges : • az import <nom_module> parancs a modul összes objektumát importálja :    import t k i n t e r © • a from <nom_module> import obj1. obj2. 6. l o g © A modulok importálása a következő sorrendben tanácsolt : • a standard könyvtár moduljai. obj2. " " " r e t u r n y ∗∗3   # Auto−t e s t −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i f __name__ == "__main__" : # F a l s e import á l á s k o r == f i g y e l m e n k í vü l hagyja > h e l p ( cube ) # k i í r a t j a a f üggv é ny d o c s t r i n g j é t p r i n t ( " cube de 9 : " .2. Figyeljük meg az "autot-test" használatát.Bevezetés a Python 3-ba 6. ami lehetővé teszi a modul tesztelését: d e f cube ( y ) : " " " Kisz á molja az <y> param é t e r köbé t .. cube ( 9 ) ) # cube de 9 : 729 A modul használata.

open ( " d3 . j o i n ( plot_data ) ) dem . ( ’ d3 . close ( ) . w r i t e ( "%g %g\n " %(x . ’ p o i n t s ’ ) . c [ 1 ] ) f o r c i n c o u r b e s ] dem . ’ . dem " . "w" ) f o r i i n range ( 2 0 1 ) : x = 0. c l o s e ( ) os . open ( " d2 . "w" ) # minden r a j z n á l ú j r a f e l h a s z á l h a t ó f i l e dem . y ) ) h . ’ p o i n t s ’ ) ] ) p l o t F i c ( [ ( ’ d1 . " kö be =" . g . w r i t e ( "%g %g\n " %(x . w r i t e ( "%g %g\n " %(x . dat " . ami lehetővé teszi file-ok kimeneti adatainak kiíratását: import os def plotFic ( courbes ) : dem = open ( "_. w r i t e ( " p l o t " + ’ . f . close () p l o t F i c ( [ ( ’ d1 .0 y = x ∗∗3 − 20∗ x ∗∗2 f . w r i t e ( " s e t g r i d \n " ) plot_data = [ " ’% s ’ with %s " % ( c [ 0 ] . ( ’ d2 . dat " . end=" " ) # 1 kö be = 1 2 kö be = 8 3 kö be = 27 Egy interface a gnuplot-hoz ©  A szabadon terjeszthető gnuplot alkalmazással görbéket lehet kiíratni. cube ( i ) . ’ l i n e s ’ ) . dat ’ . ’ l i n e s ’ ) ] ) 61   © c Robert Cordeau . w r i t e ( ’ \ npause −1 " \ ’ Enter \ ’ a f o l y t a t á shoz " \ n ’ ) dem . dem " ) A következő auto-test bemutatja a használatát :    © i f __name__ == ’__main__ ’ : f . close ( ) . dat " .1∗ i − 5. "w" ) . g .Bevezetés a Python 3-ba    from cube_m import cube f o r i i n range ( 1 . w r i t e ( " r e s e t " ) dem . dat ’ . dat ’ . system ( " wgnuplot _. "w" ) . h = open ( " d1 . y ) ) y = x ∗∗3 − 40∗ x ∗∗2 h . dat ’ . y ) ) y = x ∗∗3 − 30∗ x ∗∗2 g . A következő függvény egy interface. 4 ) : p r i n t ( i .

2. dat " ) scanner ( f a j l . amik választ adnak a legváltozatosabb aktuális problémákra. amivel a reguláris kifejezéseket lehet kezelni. Példa : az io. elsoSzo ) 62 c Hungarian Translation Daróczy Péter  . digits. A difflib modul segítségével hasonlíthatunk össze szekvenciákat. Példa egy file sorról sorra történő kezelésére vagy egy karakterláncnak ugyanazzal a scanner() függvénnyel kezelésére : def scanner ( fajl_objektum . s p l i t ( ) [ 0 ] ) f a j l = open ( " data . A textwrap modult szövegformázásra használják : minden egyes sor hosszát. A struct modul segítségével számokat. a behúzást szabályozza. Végül nem feledkezhetünk meg a re modulról. Standard "diff" vagy HTML a kimenetük.1. mint az ascii_lowercase. 6.. hogy a Pythont "elemekkel együt" (batteries included) adják.2. amiből karakterláncok formázására specializált alosztályokat lehet leszármaztatni. olyan kiterjedt a standard könyvtára : több mint 200 csomagból és modulból áll.Bevezetés a Python 3-ba 6. boolean értékeket és karakterláncokat lehet átalakítani bináris reprezentációjukká az alacsony szintű (gyakran C-be írt) könyvtárakkal történő kommunikáció céljából. Néhány hasznos funkció felületes bemutatása : Karakterláncok kezelése A string modul olyan konstansokat ad meg. Standard könyvtár A standard könyvtár Azt szokták mondani.. sor_kezelo ) : f o r l i n e in fajl_objektum : sor_kezelo ( l i n e ) i f __name__==’__main__ ’ : def elsoSzo ( l i n e ) : print ( l i n e .StringIO Ez a modul a fileobjektumok interface-ével kompatibilis objektumokat szolgáltat. és a Formatter osztály.

Bevezetés a Python 3-ba   import i o c h a i n e = i o . d e s t=" v e r b o s e " . add_option ( "−f " . metavar=" FILE " ) p a r s e r . C-ből örökölt régebbi modullal és az újabb. h e l p=" don ’ t p r i n t s t a t u s messages t o s t d o u t " )        ( options . −−q u i e t don ’ t p r i n t s t a t u s messages t o s t d o u t © c Robert Cordeau 63 . sokkal hatékonyabb optparse modullal : from o p t p a r s e import O p t i o n P a r s e r parser = OptionParser ( ) p a r s e r . d e f a u l t=True . "−−q u i e t " . e l s o S z o ) © A parancssor kezelése Két modullal lehetséges a parancssort kezelni : a getopt. py [ o p t i o n s ] Options : −h . add_option ( "−q " . parse_args ( ) A parancssorok : © python 6_025 . a c t i o n=" s t o r e _ f a l s e " . h e l p=" w r i t e r e p o r t t o FILE " . py −−h e l p ©    ugyanazt a dokumentációt állítják elő :   Usage : 6\_025 . −− f i l e =FILE w r i t e r e p o r t t o FILE −q . "−− f i l e " . d e s t=" f i l e n a m e " . args ) = parser . −−h e l p show t h i s h e l p message and e x i t −f FILE . S t r i n g I O ( " egy \ n k e t t ö xxx\nhárom\n " ) s c a n n e r ( ch ai n e . py −h © illetve python 6_025 .

és dátumkezelő függvényeket : import c a l e n d a r . g e t c o n t e x t ( ) . 2 0 . t i m e d e l t a ( days =1) w h i l e e l o z o _ p e n t e k .125 ’ ) ) # −1/8 p r i n t ( F r a c t i o n ( ’ 7e−6 ’ ) ) # 7/1000000 d . 09−Oct −2009 Algoritmusok és a collection adattípusok A bisect modul rendezett szekvenciák keresőfüggvényeit tartalmazza. s t r f t i m e ( "%A.FRIDAY: e l o z o _ p e n t e k −= egy_nap p r i n t ( e l o z o _ p e n t e k . Decimal ( 7 ) ) # 0 . time és datetime modulok tartalmazzák az aktuális idő.Bevezetés a Python 3-ba Matematikai és numerikus típusú könyvtárak A Python standardként a fraction és a decimal modulokat nyújtja a felhasználónak: from f r a c t i o n s import F r a c t i o n import d e c i m a l as d p r i n t ( F r a c t i o n ( 1 6 . getcontext ( ) . 4 0) p r i n t ( moon_apollo11 ) p r i n t ( time . de annál gyorsabb . today ( ) egy_nap = d a t e t i m e . weekday ( ) != c a l e n d a r . %d−%b−% ) ) Y" # Friday .mivel a tartalma homogén típust kínál a felhasználónak. prec = 6 p r i n t ( d . time moon_apollo11 = d a t e t i m e . datetime . 7 . a s c t i m e ( time . Decimal ( 1 ) / d . Decimal ( 7 ) ) # 0 . 2 0 . 64 c Hungarian Translation Daróczy Péter    © . Decimal ( 1 ) / d . Az idő és a dátumok kezelése A calendar. d a t e t i m e ( 1 9 6 9 . p r e c = 18 p r i n t ( d . 1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7    © A már látott math és a cmath könyvtárakon túl a random könyvtár több véletlenszámfüggvényt tartalmaz. date . −10)) # −8/5 p r i n t ( F r a c t i o n ( 1 2 3 ) ) # 123 p r i n t ( F r a c t i o n ( ’ −3/7 ’ ) ) # −3/7 p r i n t ( F r a c t i o n ( ’ −. gmtime ( 0 ) ) ) # Thu Jan 01 0 0 : 0 0 : 0 0 1970 ( " epoch " UNIX) e l o z o _ p e n t e k = d a t e t i m e . Az array modul egy a listára hasonlító. 1 4 2 8 5 7 d . 1 7 .

2 . 4 ] ) ] ) s = ’ mississippi ’ d = defaultdict ( int ) c Robert Cordeau 65 . A defaultdict típus lehetővé tesz haladó alkalmazásokat : from c o l l e c t i o n s import d e f a u l t d i c t s = [ ( ’y ’ . ( ’b ’ . 2 . 6 . 3 ] ) . 1) . z ) ) # point : [ 1 . 8 . 2 . append ( v ) print (d . 3 . 5 . ( ’b ’ . 2. items ( ) ) # dict_items ( [ ( ’ y ’ . p o i n t . p o i n t . 6 . r a n d i n t ( 2 . 4 . y . 3 . 1)] d = defaultdict ( l i s t ) for k . A 0 index mindíg a legkisebb index : import heapq import random heap = [ ] f o r i i n range ( 1 0 ) : heapq . x . [ 1 . [ 2 . {} . ( ’y ’ . 4 ] ©  Természetesen lehetőség van egymásba ágyazott nevesített tuple-ekre. 3 . ( ’ b ’ . [ 1 ] ) . v in s : d [ k ] . heappush ( heap . { } ] " . 7 .Bevezetés a Python 3-ba A heapq modul a heap queue algoritmus. 4) . namedtuple ( " Point " . ( ’ r ’ . 3) . 7 . 4 ) # ki í ratjuk : p r i n t ( " p o i n t : [ { } .3 . melyek mindegyik szülő csomópontja kisebb értékű mint bármelyik gyermekcsomópontjuké. 9 ) )    p r i n t ( heap ) # [ 2 . " x y z " ) # egy pont−pé l d á nyt l é t r e h o z u n k : p o i n t = Point ( 1 . 2) . ( ’ r ’ . 8 ] ©  A C struktúráit követve mostantól kezdve a Pyton a collections modul révén a nevesített tuple fogalmát is felkínálja a felhasználónak : import c o l l e c t i o n s   # a t í pus l e í r á sa : Point = c o l l e c t i o n s . A heap-ek bináris fák. random . format ( p o i n t . implementációját tartalmazza. ami prioritási sor algoritmusként is ismert. 3 .

3. 7 ∗ S >>> v = d/ t >>> v 66 c Hungarian Translation Daróczy Péter . A http://pypi. ( ’m ’ .   © 6.1.python. Harmadik fél könyvtárai Nagy heterogenitás A standard Python-disztribúcióba beépített modulok mellett minden területhez találunk könyvtárakat : • tudomány. ( ’ p ’ .org/pypi (The Python Package Index) weboldal modulok és csomagok ezreit sorolja fel. 2 ) . items ( ) ) # d i c t _ i t e m s ( [ ( ’ i ’ ... Egy példa : az unum könyvtár Ez a könyvtár lehetővé teszi az S. • .. 4 ) .. • adatbázisok.Bevezetés a Python 3-ba for k in s : d [ k ] += 1 print (d . 6. mértékegységrendszer figyelembevételével történő számolásokat.2. 1 ) ] ) És még annyi más terület . ( ’ s ’ .  Egy interaktiv példa : −− Welcome i n Unum C a l c u l a t o r ( v e r 0 4 . 6. • 3D. 4 ) .I. • funkcionális tesztek és minőségellenőrzés. 0 0 ) −− >>> d = 1609 ∗ M >>> t = 1 1 .3.3.

Bevezetés a Python 3-ba 1 3 7 . 5 2 1 3 6 7 5 2 1 [m/ s ] >>> a = v/ t >>> a 1 1 . 7 5 3 9 6 3 0 3 6 [m/ s2 ] >>> 



©

6.4.

Csomagok

Definíció Egy csomag (package) egy olyan modul, ami más modulokat tartalmaz. Egy csomag moduljai lehetnek alcsomagok (sub-packages,) amik egy fastruktúrát alkotnak.

Összefoglalóan : a csomag egyszerűen egy folder, ami modulokat és egy - a csomag fastruktúráját leíró - __init__.py file-t tartalmaz.

c Robert Cordeau

67

Bevezetés a Python 3-ba

7. fejezet Objektum orientált programozás
Az Objektum Orientált Programozás : • az objektumok, az osztályok megértése révén lehetővé teszik a valóság jobb modellezését. • Ezekkel az osztályokkal olyan objektumokat konstruálhatunk, amik interakcióban vannak egymással és a külvilággal • Az objektumok létrehozása az egységbezárásnak (encapsulation) – ez egy olyan mechanizmus, ami lehetővé teszi, hogy az objektumok tulajdonságait és az azokat kezelő metódusokat egy egységként kezeljük és elzárjuk őket a külvilágtól - köszönhetően egymástól függetlenül történik. • Az oszályok alkalmazásával maximálisan elkerülhetjük a globális változók alkalmazását. • Végezetül, az osztályok gazdaságos és hatékony eszközök új objektumoknak már meglévő objektumokból történő létrehozására.

7.1.

A procedurális megközelítés elégtelensége

Egy példa Egy kört szeretnénk ábrázolni, amihez három információra van szükségünk: a középpontjának koordinátáira és a sugarára : c e r c l e = (11 , 60 , 8) 68 c Hungarian Translation Daróczy Péter
©  



Bevezetés a Python 3-ba De hogyan értelmezzük ezt a három adatot ?  



c e r c l e = ( x , y , rayon ) # vagy c e r c l e = ( rayon , x , y )

©

A probléma megoldása és a kód jobb olvashatósága érdekében használhatunk nevesített tuple-eket :  from c o l l e c t i o n import namedtuple C e r c l e = namedtuple ( " C e r c l e " , " x y rayon " ) c e r c l e = Cercle (11 , 60 , 8) # a l k a l m a z á s i pé l d a : distance = distance_origine ( cercle . x , cercle . y) 



©

Viszont megmarad az érvénytelen adatok problémája (példánkban a negatív sugár) :  


c e r c l e = C e r c l e ( 1 1 , 6 0 , −8)

©

Ha a köröknek változtatni kell a jellemzőit, akkor egy módosítható típus, lista vagy szótár, mellett kell döntenünk, ami még mindig nem oldja meg az érvénytelen adatok problémáját . . . Szükségünk van tehát egy mechanizmusra, ami úgy csomagolja be a kört reprezentáló adatokat és az erre az új adattípusra (class) alkalmazható metódusokat, hogy csak az érvényes műveletek legyenek alkalmazhatók.

7.2.

Terminológia

Az OOP szóhasználata Az osztály (class) egy új adattípus ekvivalense. Már ismerjük az int-et és a str -t. Egy objektum vagy példány egy class típusú változó. Például a "truc" egy példánya a str osztálynak. Az osztályok többsége egységbe zárja az adatokat és az objektumra alkalmazható metódusokat. Például egy str típusú objektum tartalmaz egy Unicode karakterláncot (az adatokat)és számos metódust, mint amilyen például az upper(). Egy objektumot úgy definiálhatunk, mint egy kapszulát, ami alatt egy adatokat és metódusokat tartalmazó "csomagot" kell érni : c Robert Cordeau 69

A fejlesztőnek. hogy egy Python-class mindíg specializálható. és úgy hápog.StringIO egy példányával. Több különböző objektumtípus esetében az azonos metódusnév használatát javasolva a polimorfizmus egy sokkal általánosabb programozást tesz lehetővé.. Végül a Python támogatja a duck typing programozási logikát : "ha valami úgy jár. Az atributumok rendszerint példányváltozóként vannak implementálva. mint egy kacsa. • számos metódusa van. ami lehetővé teszi azok érvényességének vizsgálatát és a biztonságossá tételét. 70 c Hungarian Translation Daróczy Péter . A két megközelítés ugyanazt az API-t (Application Programming Interface) nyújtja. Ez azt jelenti. Mivel minden atributum újradefiniálható.Bevezetés a Python 3-ba objektum = [atributumok + metódusok] Sok osztálynak vannak kiegészítő jellemzői. Az OOP határozott előnye. az alkalmazható függvényeket metódusoknak nevezzük. hogy a Pythont csak az objektumok viselkedése érdekli. de ezek különböző műveleteket hajthatnak végre (overloading) és a Python dinamikusan fog alkalmazkodni az értékadástól kezdve. • speciális metódusai vannak : +. ami egyszerűen a + operátort alkalmazza.real az atributumai. ezért a leszármaztatott osztálynak és a szülőosztálynak lehet azonos nevű metódusa. akkor az kacsa". az az ugyanazokat a metódusokat. -. Például a + operátor azért használható. mint például a karakterláncok konkatenálása.. hogy ez az objektum fogja implementálni a metódust. mint pl. Elegendő azt tudni. (Vagyis az. . amire a metódus alkalmazva lesz. /. nem kell ismernie az objetum pontostípusát. Az objektumoknak általában kétféle atributuma van : az adatokat egyszerűen attributumoknak. Ezeket speciális metódusokkal érik el. conjugate(). amik minden objektum esetében specifikusak.imag és . leszármaztatható belőle egy osztály. A property mechanizmus ellenőrzött hozzáférést jelent az adatokhoz. amikor egy metódust programoz. mert újra definiáltuk az __add()__ metódust.) Például egy fileobjektum létrehozható az open() -nel vagy az io. Például a complex class egy objektumának : • . hogy hívhatóak legyenek rajtuk a megfelelő metódusok. ami minden atributumot (adatokat és metódusokat) örököl a szuper class-ától.

2. az osztályoknak is saját névterük van : c Robert Cordeau 71 . 7. x ) # 2 3 . . Visszatérés a névterekre Pontosan úgy. y ) # A t t r i b u t e E r r o r : b−nek n i n c s ’ y ’ a t t r i b u t u m a   © 7.3. . b i s m e r i c l a s s a t t r i b u t u m á t . Objektumok létrehozása és attributumai • A class-ok objektumgyárak : mielőtt objektumokat gyártunk. " " " x = 23   © Ebben a példában C az osztály neve (ami megállapodás szerint nagybetűvel kezdődik) és x osztályatributum.3. Osztályok és objektumok létrehozása A class utasítás  Szintaxis Összetett utasítás : fej (docstring-gel) + behúzott kód : c l a s s C: " " " Documentation de l a c l a s s e .3. x a c l a s s egy a t t r i b u t u m a a . ) p r i n t (C.Bevezetés a Python 3-ba 7. de . . x ) # 2 3 . 7.3. x = 12 # mó dos í t j a az o b j . y = 44 # ú j objektumattributum b = C( ) # b a C c l a s s egy ú j objektuma p r i n t ( b . egy a t t r i b u t u m á t ( f i g y e l e m . p r i n t ( b . x ) # k i í r 23− a t . a c l a s s a t t r i b u t u m a vá l t o z a t l a n a .3. ami ami a C-re lokális. előtte konstruálunk egy üzemet ! • A class nevére történő hivatkozással hozunk létre egy objektumot (azaz az üzem állítja elő):  a = C( ) # a C c l a s s egy objektuma p r i n t ( d i r ( a ) ) # k i í r j a az a objektum a t t r i b u t u m a i t p r i n t ( a .1. mint a függvényeknek. .

Bevezetés a Python 3-ba • Minden osztálynak saját névtere van. A következő példa kiíratja a C osztályhoz kapcsolódó szótárat. ’ __reduce_ex__ ’ . ’ __delattr__ ’ . osztályattributumoknak nevezzük. # ’__module__ ’ . __dict__ ) # { ’ __dict__ ’ : <a t t r i b u t e ’ __dict__ ’ o f ’C ’ o b j e c t s >. ’__hash__ ’ . A moduloknak. amik részei ennek a névtérnek példányattributumnak nevezzük. ’__doc__ ’ : None} a = C( ) print ( dir (a )) # [ ’ __class__ ’ . ’ __weakref__ ’ .és a főszinten definiált változókat. ’__doc__ ’ . melyektől az objektum függ (de nem keresi a modulokban). ’ __init__ ’ . majd mindazokban az osztályokban. ’ __reduce__ ’ . # ’ __repr__ ’ . # ’ __getattribute__ ’ . ’ __setattr__ ’ . ’ __str__ ’ . • Nem minősített nevek : (példa : dimension a hozzárendelés az aktuális lokális érvényességi körben hozza létre vagy változtatja meg a nevet. amik részei az osztály névterének.height a hozzárendelés az attributumot az objektum névterében hozza létre vagy módosítja. az osztályoknak és az objektumoknak a névtereket szótárakkal implementálták. Azokat a változókat. • Az osztályok használhatják (de nem módosíthatják) a főszinten definiált változókat. • Az objektumpéldányok használhatják (de nem módosíthatják) az osztály. Azokat a változókat. # ’ __weakref__ ’ : <a t t r i b u t e ’ # __weakref__ ’ o f ’C ’ o b j e c t s >. # ’ x ’ : 2 0 . ’__module__ ’ : ’__main__ ’ . • Minősített nevek : (példa : dimension. Az LGI szabálynak megfelelően keresi a Python őket. ’ __dict__ ’ . ’ x ’ ]    © 72 c Hungarian Translation Daróczy Péter . majd egy C objektumhoz kapcsolódó attributumok listáját : c l a s s C: x = 20 p r i n t (C. • Minden objektumpéldánynak (amit egy osztályból hoztak létre) saját névtere van. Egy attributumot a Python az objektumban keres. ’__new__ ’ .

A self azt az objektumot reprezentálja. ami elõtt és után két aláhúzáskarakter áll. print ( s e l f . Ezek a metódusok : • a létrehozott objektumpéldányok inicializálására..Bevezetés a Python 3-ba 7. a f f i c h e ( ) # 28 42 ( a h í vá s r a az ob hozz á r e n d e l i a s e l f −e t )   © 7. • a kiíratás módosítására. valók. y ) # egy metó dusban megadjuk egy o s z t á l y a t t r i b u t u m # e l é r é s i ú t j á t a m o d u l s z i n t t ö l kezdve . mint az osztály testének egy függvényét. Speciális metódusok A speciális metódusok Ezeknek a metódusoknak elõredefiniált nevük van. c Robert Cordeau 73 .4. Az elsõ paraméter kötelezõen a self.1. amire a metódus alkalmazva lesz. z ) # de nem adjuk meg pé l d á nyattributum e l é r é s i ú t j á t ob = C( ) # l é t r e h o z z u k az ob objektump é l d á nyt ob .5. 7.. Más szóval : a self az ojektumpéldány hivatkozása. Metódusok Szintaxis Egy metódust úgy írunk meg. • .  c l a s s C: x = 23 # x e t y : o s z t á l y a t t r i b u t u m y = x + 5 d e f a f f i c h e ( s e l f ) : # a f f i c h e ( ) metó dus s e l f . • operátoroverloadingra.5. z = 42 # objektump é l d ány a t t r i b u t u m p r i n t (C.

__str__. Az inicializátor  Egy objektom inicializálásakor az __init__ metódust automatikusan hívja a Python. n −hez r e n d e l v e p r i n t ( egy_peldany .2.3..). 7. x ) # 42   © Ez az inicializálás alatt automatikusan hívott eljárás : soha sem tartalmaz return utasítást. Operátor újradefiniálás (Operátoroverloading)  Az operátoroverloading lehetõvé teszi. • szekvenciák esetében (__len__. • számok esetében (__add__.Bevezetés a Python 3-ba 7. . Így lehetõvé válik minden szükséges inicializálás : c l a s s C: d e f __init__ ( s e l f . Például + operátor lehetõvé teszi : x = 7 + 9 # eg é s z e k ö s s z e a d á sa s = ’ ab ’ + ’ cd ’ # konkaten á c i ó A Python következõ metódusai overload-olhatók : • minden típus esetében (__call__.5...5. hogy egy operátornak az operandusaitól függõen más legyen az értelmezése. a következõ speciális metódusok a szokásos aritmetikai mûveletek végrehajtását teszik lehetõvé : Név Speciális metódus Alkalmazás negálás __neg__ -obj1 összeadás __add__ obj1 + obj2 kivonás __sub__ obj1 . n ) : s e l f . __div__. ..).).obj2 szorzás __mul__ obj1 * obj2 osztás __div__ obj1 / obj2 egészosztás __floordiv__ obj1 // obj2 74 c Hungarian Translation Daróczy Péter .   © Legyen obj1 és obj2 két objektum. .. x = n # az x pé l d á nyattributum i n i c i a l i z á l á sa egy_peldany = C( 4 2 ) # kö t e l e z ö param é t e r .. __iter__.

Bevezetés a Python 3-ba 7. 3 ) v2 = Vector2D ( 3 . x . Példa az operátor újradefiniálásra (operátoroverloadingra)  c l a s s Vector2D : d e f __init__ ( s e l f . 5 ) p r i n t ( v1 + v2 ) # Vector ( 4 . mely az utóbbitól eltérő vagy további funkciókkal rendelkezik. x . c Robert Cordeau 75 .x = x self . 8 )   © 7. Öröklés és polimorfizmus Öröklés és polimorfizmus Definíció Az öröklés az a mechanizmus. Ezt a tulajdonságot az overload-technika biztosítja. y ) d e f __str__ ( s e l f ) : # egy 2D v e k t o r k i í r á sa r e t u r n " Vektor ( { : g } . 2 .4. 6 . Definíció A polymorfizmus a különböző örökölt osztályokhoz tartozó.5. x + a u t r e . de azonos nevű metódusok számára a lehetőség eltérő feladat végrehajtására. a u t r e ) : # v e k t o r i á l i s ö s s z e a d á s r e t u r n Vector2D ( s e l f . 6 . y + a u t r e .y = y d e f __add__( s e l f .6. s e l f . ami lehetővé teszi egy új osztály előállítását egy már létező osztályból. 4 . y ) : self .1. 2 . y ) v1 = Vector2D ( 1 . { : g }) " % ( s e l f .6. s e l f . 4 . 7. x .

nom = l e n g t h . nom) # ’ s q u a r e ’   © 7.1. l e n g t h =30 .x. 7. Visszatérés a kiindulási példára A circle osztály : tervezés Először kifejesztünk egy Point nevű osztályt. s i d e . y =0): self . ami az object szülőosztálytól örököl. l . s i d e =10): R e c t a n g l e .2. y 1 Unified Modeling Language : az objektumtervezés grafikus megjelenítése 76 c Hungarian Translation Daróczy Péter .6. " r e c t a n g l e " c l a s s Square ( R e c t a n g l e ) : d e f __init__ ( s e l f . 7. x=0.7. Példa az öröklésre és a polimorfizmusra  A következő példában a Square osztály a Rectangle osztálytól örököl és az __init__ metódus polymorf : c l a s s Rectangle : d e f __init__ ( s e l f . Az alábbi UML-sémákban 1 a dőlt betűvel szedett metódusok öröklöttek. s e l f .7.y = x. width =15): s e l f . __init__ ( s e l f . width . s e l f . s i d e ) s e l f .Bevezetés a Python 3-ba 7.2.  A circle osztály A Point osztály kódja : c l a s s Point : d e f __init__ ( s e l f . L . nom = " s q u a r e " r = Rectangle () p r i n t ( r . self . a normál betűvel szedettek újak. a vastag betűvel szedettek újradefiniáltak (overloaded).7. Utána a Circle osztály alaposztályaként használhatjuk fel a Point osztályt. nom) # ’ r e c t a n g l e ’ c = Square ( ) p r i n t ( c .

Point ( 3 . 0 © A property dekorátornak köszönhetően a float visszatérési értéket adó metódusok attributumokként lesznek kezelve :  c l a s s C i r c l e ( Point ) : d e f __init__ ( s e l f . x and s e l f .1.Bevezetés a Python 3-ba @property def distance_origine ( s e l f ) : r e t u r n math . x ! s } . A Circle osztály UML-terve A property dekorátor alkalmazása csak olvasási hozzáférést tesz lehetővé a distance_origine() metódus eredményéhez. hypot ( s e l f . y ! s }) " . p2 . ábra. r a d i u s . x == o t h e r . d i s t a n c e _ o r i g i n e ) # ( 3 . 4 ) p r i n t ( p1 == p2 ) # F a l s e p r i n t ( p2 . o t h e r ) : r e t u r n s e l f . { 0 . 4 ) 5 . x . y =0): c Robert Cordeau 77 . x=0. s e l f . p2 = Point ( ) . amit így egyszerű attributumnak tekint a Python (mivel nincs zárójel) :    i f __name__ == "__main__" : p1 . y == o t h e r . y ) d e f __eq__( s e l f . format ( s e l f )   © 7. y d e f __str__ ( s e l f ) : r e t u r n " ( { 0 .

c i r c u m f e r e n c e ) 78 c Hungarian Translation Daróczy Péter . c1 . __init__ ( x . p i ∗ ( s e l f . d i s t a n c e _ o r i g i n e − s e l f . r a d i u s ! s } . radius = radius @property d e f a r e a ( s e l f ) : r e t u r n math . p i ∗ s e l f . " " { 0 . format ( s e l f ) ) i f __name__ == "__main__" : c1 = C i r c l e ( 2 . area .Bevezetés a Python 3-ba s u p e r ( ) . r a d i u s == o t h e r . Vegyük észre. amit a setter (módosító metódus) fog megváltoztatni. s e t t e r def radius ( s e l f . __radius = r a d i u s Példa a Circle-objektumok használatára:    © d e f __eq__( s e l f . o t h e r ) : r e t u r n ( s e l f . __class__ . r a d i u s )   © A következő szintaxis alkalmazásával a radius metódus olvasható-írható attributumként használható. 4 ) p r i n t ( c1 . hogy a radius() metódus védett attributumot ad visszatérési értéknek : __radius. r a d i u s @property def distance_bord_origine ( s e l f ) : r e t u r n abs ( s e l f . radius ) : a s s e r t r a d i u s > 0 . __eq__( o t h e r ) ) d e f __str__ ( s e l f ) : r e t u r n ( " { 0 . c1 .  @property def radius ( s e l f ) : r e t u r n s e l f . y ) s e l f . 3 . __radius @radius .__name__} ( { 0 . { 0 . r a d i u s ∗∗ 2 ) @property d e f c i r c u m f e r e n c e ( s e l f ) : r e t u r n 2 ∗ math . " a sug á r s z i g o r úan p o z i t i v " s e l f . y ! s }) " . x ! s } . r a d i u s and s u p e r ( ) .

. Kompozíció Definíció A kompozíció több különböző osztály közötti együttműködés egy asszociáción (használ egy ... y ) : s e l f . hogy milyen kapcsolatokat fogunk létrehozni az alkalmazásunk objektumai között. r a d i u s ) # 4 . A kompozit osztály hasznot húz más olyan osztályok funkcióinak a hozzáadásából. kétféle módon tervezhetjük meg osztályainkat : • a kompozíció a : (van neki egy . x .8. • a származik az : ez egy .) reláción alapul.) reláción alapul... " " " d e f __init__ ( s e l f . Természetesen ez a két konstrukció együtt is élhet és sokszor ez is a helyzet ! 7. x1 . py = x .) vagy egy agregáción (van neki egy .5663706144 p r i n t ( c1 . c1 . c1 .. 0 1   © 7..) keresztül. 4) 12.1. r a d i u s ) # 3 . mely osztályokban semmi közös nincs. o r i g = Point ( x1 . A Python implementáció általában a kompozit osztály konstruktorában lévő osztálypéldányokat használja. r a d i u s = 1 # a sug á r mó dos í t á sa p r i n t ( c1 . y1 . s e l f . 0 2 c1 . d i s t a n c e _ b o r d _ o r i g i n e .. y1 ) c Robert Cordeau 79 .Bevezetés a Python 3-ba # C i r c l e (2 .. y c l a s s Segment : " " " Az e l t é r ö Point o s z t á l y t haszn á l ó kompozit o s z t á l y .5663706144 12. Példa  c l a s s Point : d e f __init__ ( s e l f . x2 . Az objektum orientált tervezés fogalma Aszerint. 3 ..8. px . y2 ) : s e l f .) illetve a (használ egy . d i s t a n c e _ b o r d _ o r i g i n e .

s i d e =20): # A Square szuper −c l a s s e −á nak k o n s t r u k t o r á t h í vjuk : s u p e r ( ) . py ) ) s = Segment ( 1 . s e l f . ( { : g } . Példa  c l a s s Rectangle : d e f __init__ ( s e l f . 3 . 0 . 0 ) p r i n t ( s ) # Segment : [ ( 1 . y2 ) # é s " van egy " v é g p o n t j a d e f __str__ ( s e l f ) : r e t u r n ( " Segment : [ ( { : g } . o r i g . " r e c t a n g l e " c l a s s Square ( R e c t a n g l e ) : # e g y s z e r ü ö r ö k l é s " " "A R e c t a n g l e szuper −c l a s s s p e c i a l i z á l t a l o s z t á l y a . l . s e l f .Bevezetés a Python 3-ba # a s z a k a s z n a k " van egy " kezd ö pontja . L . extrem . name = " s q u a r e " # az a t t r i b u t u m ú j r a d e f i n i á l á sa   © 80 c Hungarian Translation Daróczy Péter . { : g } ) .8. o r i g . s e l f . Leszármaztatás Definíció A leszármaztatás az alosztályok specializációval történő létrehozását írja le. l e n g t h =30 . 0 . s e l f . py . 0 . width . { : g } ) ] " . ( 3 . s e l f . name = l e n g t h . 2 ) . " " " d e f __init__ ( s e l f . akár a super utasítással. format ( s e l f . s e l f . px . width =15): s e l f . s i d e ) s e l f . extrem . akár névszerint. 4 ) ]   © 7. 4 . Ebben az esetben az öröklési mechanizmust alkalmazzuk.2. extrem = Point ( x2 . __init__ ( s i d e . A Python implementáció általában a szülőosztály konstruktorát hívája a leszármaztatott osztály konstruktorában. 2 . px .

[ s t a r t . meth ) .1.Bevezetés a Python 3-ba 8. append ( o b j e c t ) −− append o b j e c t t o end L . i n d e x ( value . az objektum és a funkcionális programozásból.1. 8. amit a Python támogat : a procedurális. [ s t o p ] ] ) −> i n t e g e r −− c Robert Cordeau 81 . s t a r t s w i t h ( ’_ ’ ) ] f o r meth i n methods : p r i n t ( g e t a t t r ( element .1. __doc__) i f __name__ == "__main__" : printApi ( [ ] ) """ L . mint a help() : d e f p r i n t A p i ( element ) : methods = [ e l f o r e l i n d i r ( element ) i f not e l . Procedurális technikák A dokumentálás javítása  A printApi() felhasználói függvény szűri az element rendelkezésre álló metódusait és a kapcsolódó docstring-eket olvashatóbb formában írja ki. extend ( i t e r a b l e ) −− extend l i s t by appending e l e m e n t s from t he i t e r a b l e L . 8. count ( v a l u e ) −> i n t e g e r −− r e t u r n number o f o c c u r r e n c e s o f v a l u e L . fejezet Haladó technikák Ez a fejezet bemutat néhány haladó programozási technikát abból a három paradigmából.

o b j e c t ) −− i n s e r t o b j e c t b e f o r e i n d e x L . remove ( v a l u e ) −− remove f i r s t o c c u r r e n c e o f v a l u e . append ( i n t ( i n p u t ( " I r j o n be egy eg é s z e t : " ) ) ) d e f fromQueue ( ) : i f l e n ( queue ) == 0 : print ( " \ nLehetetlen : ü res a sor ! " ) else : p r i n t ( " \nA ’%d ’ .  A függvénymodul forráskódja : " " " Egy FIFO queue a d m i n i s z t r á c i ó s modulja " " " queue = [ ] # i n i c i a l i z á l á s d e f intoQueue ( ) : queue . r e v e r s e=F a l s e ) −− s t a b l e s o r t ∗IN PLACE∗ . s o r t (cmp=None . r e v e r s e ( ) −− r e v e r s e ∗IN PLACE∗ L . L . 1 """   © 8. pop ( [ i n d e x ] ) −> item −− remove and r e t u r n item a t i n d e x ( d e f a u l t l a s t ) .a kulcs legyen a menü egy elemének a neve.2. cmp( x . elem t ö r ö l v e van " % queue . Ezt az adatstruktúrát egy jegypénztárnál várakozó sor illusztrálja : az első érkezőt szolgálják ki először. L . key=None . R a i s e s ValueE rror i f th e v a l u e i s not p r e s e n t . i n s e r t ( index . Menük készítése szótárral Egy szótár kulcs:érték párját a következő módon használhatjuk fel egy menü implementálására : . . y ) −> −1. queue )   © 82 c Hungarian Translation Daróczy Péter .a megfelelő érték egy hivatkozás : egy argumentum nélküli eljárás hívása. R a i s e s I n d e x E r r o r i f l i s t i s empty o r i n d e x i s out o f range . A példa egy FIFO programozását mutatja be.Bevezetés a Python 3-ba return f i r s t index of value .1. pop ( 0 ) ) d e f writeQueue ( ) : p r i n t ( " \ nqueue : " . R a i s e s ValueE rror i f th e v a l u e i s not p r e s e n t . 0 . L .

Egy ( s z ó t á r a t haszn á l ó ) menü argumentum né l k ü l i e l j á r á s o k a t h í v """ # import from queue_FIFO_menu_m import intoQueue . fromQueue . l o w e r ( ) except : choice = ’q ’ i f c h o i c e not i n ’ avsq ’ : p r i n t ( " I n v a l i d o p t i o n ! Try a g a i n " ) else : break i f c h o i c e == ’ q ’ : p r i n t ( " \ Quit ! " ) break CMDs[ c h o i c e ] ( )   © c Robert Cordeau 83 .Bevezetés a Python 3-ba Az adminisztrációs menü forráskódja  " " " Egy FIFO queue implement á l á sa egy l i s t á v a l . ’ s ’ : fromQueue } menu = " " " (A) ppend (V) iew ( S ) upprimer (Q) u i t Your c h o i c e ? " " " w h i l e True : w h i l e True : try : c h o i c e = i n p u t ( menu ) . writeQueue # main program −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− writeQueue ( ) CMDs = { ’ a ’ : intoQueue . s t r i p ( ) [ 0 ] . ’ v ’ : writeQueue .

Bár gyakran nehezebb megérteni és kódolni ezt a módszert. A program mindaddig halmozza a rekurzív függvényhívásokat. bizonyos esetekben ez a módszer a legközvetlenebb alkalmazása a matematikai definíciónak. majd rendezzük a maradék N-1 elemű táblázatot. majd a legutolsó függvényhívástól kezdve kiszámolja a függvényértékeket.. n ∗ (n − 1)!. 1 Szemben az iterrativ definícióval : n! = n*(n-1)*(n-2)*.*2*1 84 c Hungarian Translation Daróczy Péter . A következő klasszikus példa a faktoriális függvény definíciója rekurzióval 1 :  1. Rekurzív függvények Definíció Egy rekurziv függvény hívhatja önmagát. Az ábra ezt a mechanizmust szemlélteti. ha n ≥ 1 Megjegyzés A matematikai definíciót nagyon pontosan másolja a kód :    def f a c t o r i a l (n ) : i f n == 0 : # a l a p e s e t : a b e f e j e z é s f e l t é t e l e return 1 e l s e # rekurz í v eset r e t u r n n∗ f a c t o r i a l ( n−1) © Ebben a definícióban az n! értéke nem ismert.3.. mint a klasszikus iterratívnak nevezett módszert.Bevezetés a Python 3-ba 8.1. míg el nem éri a befejezés feltételét. Például egy N elemű táblázat elemeinek növekvő sorrendbe rendezéseelőször kiválasztjuk a legkisebb elemet. n! = ha n = 0. amíg el nem érjük a rekurzió befejező feltételét (itt n == 0).

ábra. A generátorok és a generátor-kifejezések A generátorok A generátorok egy olyan eszközt adnak a kezünkbe.1. 0 ) : w h i l e True : y i e l d n e x t _ qu a r t e r n e x t_ q u a r t er += 0 . Ennek az a lényege.Bevezetés a Python 3-ba 8. amennyit kérünk : d e f q u a r t e r s ( n e xt _ q u a r te r = 0 . amíg az értékre ténylegesen szükség lesz. append ( x ) i f x == 1 . hogy mindaddig késlelteti egy kifejezés kiértékelését. 0 : break c Robert Cordeau 85 .1. A 4! rekurzív kiszámításának modellje 8.4.  A következő generátorpélda annyi értéket ad meg. 2 5 i f __name__ == "__main__" : result = [ ] for x in quarters ( ) : r e s u l t . amivel megvalósítható a késleltetett kiértékelésnek ("lazy evaluation" vagy call-by-need) nevezett kiértékelési stratégia. mint például egy nagy lista egyszerre történő kiszámolása. Ez sokkal hatékonyabbnak bizonyulhat (memóriahasználatban).

5. 0 ) # ú j r a i n i c i a l i z á l j a a gener á t o r t r e s u l t . 0 .1. 7 5 . 7 5 . hogy egy generátorkifejezés zárójelbe van zárva. 2 . 5 ) < s y s . Két alkalmazást különböztetünk meg : 86 c Hungarian Translation Daróczy Péter . 0 .Bevezetés a Python 3-ba p r i n t ( " Eredmé n y l i s t a : " . 0 . 1 . 2 5 else : n e x t_ q u a r t er += r e c e i v e d i f __name__ == "__main__" : result = [ ] generator = quarters () while len ( r e s u l t ) < 5: x = next ( g e n e r a t o r ) i f abs ( x − 0 . a különbség az. e p s i l o n : x = g e n e r a t o r . 5 . 0 . 0 . 2 5 . Egymásba ágyazott függvények (closure) A Pythonban a függvénydefiníció szintaxisa megengedi a függvénydefiníciók egymásba ágyazását. 1 . append ( x ) p r i n t ( " Eredmé n y l i s t a : " . 0 ) : w h i l e True : r e c e i v e d = ( y i e l d ne x t _ q u ar t e r ) i f r e c e i v e d i s None : n e x t_ q u a r t er += 0 . 0 ]   © A generátorkifejezések Szintaxis Egy generátorkifejezésnek majdnem azonos a szintaxisa a szűkített listák szintaxisával. 8. 5 . r e s u l t ) # Eredmé n y l i s t a : [ 0 . 2 5 . 0 . f l o a t _ i n f o . r e s u l t ) # Eredmé n y l i s t a : [ 0 . 0 ] Egy kezdőérték is átadható a generátornak :    © # import import s y s d e f q u a r t e r s ( n e xt _ q u a r te r = 0 . send ( 1 . 1 .

Bevezetés a Python 3-ba • A függvénygyár-idióma visszatérési értéke egy beágyazott függvény :  d e f c r e a t e _ p l u s ( add ) : " " " Függv é nygy á r " " " def plus ( increment ) : " " " Beá g y a z o t t f üggv é ny : a c r e a t e _ p l u s ( ) l o k á l i s n e v e i t haszn á l j a . aMethod ( ) # s p e c i a l 87   © c Robert Cordeau . aMethod ( ) # normal other_instance = caseIsSuitableFor ( False ) o t h e r _ i n s t a n c e . aminek v i s s z a t é r é s i é r t é ke egy o s z t á l y . p ( 1 0 0 ) ) p r i n t ( " q ( 1 0 0 ) =" . " " " r e t u r n CaseNormal ( ) i f isNormal e l s e C a s e S p e c i a l ( ) # Fö program # −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− a n_ i ns t an c e = c a s e I s S u i t a b l e F o r ( ) a n_ i ns t an c e . q ( 1 0 0 ) )    © • A függvénygyár egy osztályt ad visszatérési értékül : # classes c l a s s CaseNormal ( o b j e c t ) : d e f aMethod ( s e l f ) : p r i n t ( " normal " ) c l a s s CaseSpecial ( object ) : d e f aMethod ( s e l f ) : print ( " special " ) # function d e f c a s e I s S u i t a b l e F o r ( isNormal=True ) : " " " Függv é nygy á r . " " " r e t u r n i n c r e m e n t + add return plus # Fö program −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # k é t kü l önbö z ö f üggv é nygy á r g e n e r á l á sa # p = create_plus (23) q = create_plus (42) # alkalmaz á s # p r i n t ( " p ( 1 0 0 ) =" .

 Szintaxis Legyen deco() egy dekorátor. metódus vagy osztály hívásakor lehetővé teszik előzetes műveletek végrehajtását. amik egy függvény. .1. . arg2 . . ) : pass f u n c t i o n = deco ( f u n c t i o n ) # −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # Egy t ö bbsz ö r ö sen dekor á l t g f üggv é ny pé l d á j a @f1 @f2 @f3 def g ( ) : pass # A j e l ö l é s egyen é r t é kü a kö v e t k e z ö v e l : g = f 1 ( f 2 ( f 3 ( g ) ) )   ©  Egy egyszerű példa : # f üggv é nyek d e f unDecorateur ( f ) : d e f _ i n t e r n e (∗ a rg s . b ) : return a + b 88 c Hungarian Translation Daróczy Péter . b ) : return a + b def autreFonction (a . ∗∗ kwargs ) return _interne @unDecorateur d e f uneFonction ( a . ) : pass Ez az írásmód egyenértékű a következö függvénykompozícióval :    © d e f f u n c t i o n ( arg1 . ∗∗ kwargs ) : p r i n t ( " Dekor á l t f üggv é ny ! " ) r e t u r n f (∗ a rg s . arg2 .6. . . A dekorátorok A Python dekorátorok olyan függvények. .Bevezetés a Python 3-ba 8. Egy függvény dekorálásához a következőt kell írnunk: @deco d e f f u n c t i o n ( arg1 .

2)) """ Dekor á l t f üggv é ny ! 3 Dekor á l t f üggv é ny ! 3 """ © 8. hogy miért lehet egy objektum attributumaihoz újabbakat hozzátenni illetve belőlük törölni.illetve leszármaztatott típus osztályként implementált absztrakt adattípus. a Python minden osztálypéldány számára transzparens módon létrehoz egy __dict__ nevű privát szótárat és ez a szótár tartalmazza a példányok attributumait. akkor létrehozhatunk privát c Robert Cordeau 89 .1. sem pedig belőlük elvenni nem akarunk. 2 ) ) # f üggv é nykompoz í c i ó haszn á l a t a # a u t r e F o n c t i o n = unDecorateur ( a u t r e F o n c t i o n ) print ( autreFonction (1 . Ez a magyarázat arra. x=0. az object osztályból.y = y   © Amikor egy osztályt a __slot__ utasítás alkalmazása nélkül hozunk létre. y =0): self . 8. Ha viszont megelégedünk olyan objektumokkal.Bevezetés a Python 3-ba   # Fö program =============================================== # dekor á t o r haszn á l a t a # p r i n t ( uneFonction ( 1 . Ezen osztályok mindegyike egyetlen szülőosztályból származik. Minden alap. ahogyan azt idáig tettük.  __slots__ és __dict__ Vizsgáljuk meg a következő kódot : c l a s s Point : __slot__ = ( " ’ x " ’ .2. melyek attributumaihoz se hozzátenni.2. a Python teljesen objektum orientált nyelv. Technikai objektumok Amint azt az előző fejezetben láttuk. " ’ y " ’ ) d e f __init__ ( s e l f .x = x self .

metódusra.2. Hagyományosan a következő láthatóságokat különböztetjük meg : 90 c Hungarian Translation Daróczy Péter . lambda-függvényre. deux ) : r e t u r n un + deux >>> a = A( ) >>> c a l l a b l e ( a ) True >>> a ( 1 . Ezt valósítja meg az alábbi példa egy __slot__ osztályattributum definiálásával.2. osztályra. 6 ) 7   © 8.2. A functor  A Pythonban egy függvényobjektum vagy functor egy hivatkozás minden hívható objektumra : függvényre. 8. Az accessor-ok Az egységbezárás problémája Az objektum orientált paradigmában egy objektum állapota privát. un .3. ami minden egyes objektumgeneráláskor memóriát fog megtakarítani. amit az attributumok nevéből áll. sem módosítani.Bevezetés a Python 3-ba szótár nélküli osztályokat. más objektumoknak nincs joguk azt sem megnézni. ha az osztályban definiálva van a __call__() speciális metódus :   ©  >>> c l a s s A: d e f __call__ ( s e l f . aminek az értéke egy tuple. A beépített callable() függvénnyel tesztelhetjük ezt a tulajdonságot : >>> d e f myFunction ( ) : p r i n t ( ’ This i s " c a l l a b l e " ’ ) >>> c a l l a b l e ( myFunction ) True >>> c h a i n = ’ This i s " c a l l a b l e " ’ >>> c a l l a b l e ( c h a i n e ) False Egy osztály példányait átalakíthatjuk functor-okká.

Ezt a megoldást két szintaxis implementálja. Ez a védelem deklaratív marad és nem nyújt abszolút védelmet. _ma_propriete = None def getx ( s e l f ) : """ getter . A Pythonban minden attributum (adatok. metódusok) public ! Mostantól finomíthatunk ezen a tényen. aminek speciális funkciói vannak. _x def setx ( s e l f . value ) : """ setter . A Python semmire sem kötelez.Bevezetés a Python 3-ba • public. Például : _attrib. A property megoldás Az egységbezárás elvét a tulajdonság fogalmával dolgozták ki. Egy egyszerű és hasznos megállapodás : az egy aláhúzás karakterrel kezdődő neveket fogjuk a protected attributum jelölésére használni. """ s e l f . Definíció Egy tulajdonság property egy példány-attributum. a fejlesztőn múlik a megállapodás betartása ! A Python javasol egy mechanizmust (name mangling) a private attributumok emulálására : az osztályazonosítók két aláhúzás-karakterrel (__) kezdődnek. • private. _x = v a l u e c Robert Cordeau 91 . • protected. Például : __ident. """ r e t u r n s e l f . Az első explicit módon definiálja az x tulajdonságot és négy paraméterét (ren dre) : c l a s s C: d e f __init__ ( s e l f ) : s e l f .

__doc__) # documentation """ 10 En vagyok az ’ x ’ t u l a j d o n s ág . Megjegyzem. _x = v a l u e @x . x) # getter p r i n t (C. """ A második. x . " " " r e t u r n s e l f . _x x = p r o p e r t y ( getx . s e t x . s e t t e r def x( s e l f . " En vagyok az ’ x ’ t u l a j d o n s ág . _x = None @property def x( s e l f ) : " " " En vagyok az ’ x ’ t u l a j d o n s ág . value ) : s e l f . hogy a property dokumentációs stringje itt az x tulajdonság docstringje : c l a s s C: d e f __init__ ( s e l f ) : s e l f . _x @x . x = 10 # s e t t e r print ( test . delx .Bevezetés a Python 3-ba def delx ( s e l f ) : """ deleter . " ) # auto−t e s t =============================== i f __name__ == ’__main__ ’ : t e s t = C( ) t e s t . d e l e t e r def x( s e l f ) : 92 c Hungarian Translation Daróczy Péter   ©  . """ d e l s e l f . egyszerűbb a dekorátorok szintaxisát alkalmazza.

3. ha az argumentuma nem 1. 8.Bevezetés a Python 3-ba d e l s e l f . x = 10 # s e t t e r print ( test . x) # getter p r i n t (C. a lambda direktíva lehetővé teszi egy anonim függvény definiálását. """   © 8.1.3. x . __doc__) # documentation """ 10 En vagyok az ’ x ’ t u l a j d o n s ág . aminek a visszatérési értéke egy kifejezésre van korlátozva. Függvénytechnikák A lambda direktíva Funkcionális nyelvek (mint amilyen a Lisp) konstrukciója. különben egy üres karakterlánc : s = lambda x : " " i f x == 1 e l s e " s " További példák : ©    >>> d e f makeIncrementor ( n ) : r e t u r n lambda x : x+n >>> f 2 = makeIncrementor ( 2 ) >>> f 6 = makeIncrementor ( 6 ) c Robert Cordeau 93 . _x # auto−t e s t =============================== i f __name__ == ’__main__ ’ : t e s t = C( ) t e s t . Szintaxis lambda [paraméterek]:kifejezés  Például ennek a függvénynek "s" a visszatérési értéke.

Bevezetés a Python 3-ba >>> p r i n t ( f 2 ( 3 ) .egy függvényt alkalmaz egy szekvencia minden elemére és visszatérési értékként egy iterrátort ad : >>> d e f r e n v o i T i t r e s ( element ) : r e t u r n element . ami csak egyetlen eredményt ad minden egyes bemeneti értékegyüttesre 3 . hanem egymásba ágyazott függvényeket. end=" " ) 4 8 16   © 8. A függvények alkalmazását hangsúlyozza. " l o r d o f t he f l y " ] ] [ ’ F i a t Lux ’ . Így a függvények nem bezetnek be mellékhatásokat. A map() függvény :  map() . Minden doboznak több bemeneti paramétere van. ami az állapotváltozásokat helyezi előtérbe 2 . A program tehát egy alkalmazás matematikai értelemben. minden bemeneti érték n-esre csak egy lehetséges kimeneti értéket adhat ki.3. A map. A funkcionális programozás három fogalmon nyugszik : mapping. lambda x : x ∗ ∗ 4 ] >>> f o r f i n L : p r i n t ( f ( 2 ) . amiket egymásba ágyazhatunk. de csak egyetlen kimenete van.2. filter() és reduce(). amiket a Pythonban három függvényel implementáltak : map(). szemben az imperatív programozással. ’ Lord Of The Fly ’ ] 2 3 Lásd Wikipedia Lásd Wikipedia 94 c Hungarian Translation Daróczy Péter . [ ’ f i a t l u x ’ . lambda x : x ∗∗3 . t i t l e ( ) f o r element i n [ ’ f i a t l u x ’ . A funkcionális paradigma nem használ állapotokat egy program leírására. amiket úgy tekinthetünk mint "fekete dobozokat". filtering és reducing. t i t l e ( ) >>> map( r e n v o i T i t r e s . f 6 ( 3 ) ) 5 9 >>> >>> L = [ lambda x : x ∗∗2 . " l o r d o f t h e f l y " ] ) <map o b j e c t a t 0 x3602490> >>> [ element . ami a számításokat matematikai függvények kiértékelésének tekinti és elutasítja az állappotváltozást és az adatok megváltoztatását. filter és reduce függvények A funkcionális programozás egy programozási paradigma.

a functools modul egy függvénye. Egy két argumentumos függvényt alkalmaz kumulatív módon balról jobbra egy szekvencia elemeire úgy. A reduce() függvény : reduce() . y ) : p r i n t x . amit visszatérési értékként ad :  >>> d e f somme ( x . 4 ] ) 2 3 4 sum ( [ 1 . 3 . [ 1 . hogy a map() helyettesíthető egy szűkített listával. −2. 3 . 3 . f i l t e r ( lambda x : x > 0 . hogy ezt a szekvenciát egy értékre redukálja. [ 1 . −2. 3 . 2 .létrehoz és visszaad egy iterrátort egy listán. −4]) 3] [ x f o r x i n [ 1 . hogy a filter() helyettesíthető egy tesztes szűkített listával. 2 . >>> >>> [1 . ami a kiindulási szekvencia mindazon elemeit tartalmazza. A filter() függvény : filter() . ’+ ’ . y return x + y >>> 1 + 3 + 6 + 10 >>> >>> 10 r e d u c e ( somme . amik megfelelnek a következő kritériumnak : function(element) == True :    >>> [1 .Bevezetés a Python 3-ba >>>   © Megjegyzem. −4] i f x > 0 ] 3] © Megjegyzem. 4 ] ) ©   c Robert Cordeau 95 .

3.a maradék n-1 paramétert használó . f g= ’ b l a c k ’ . f g= ’ p u r p l e ’ . egy n-paraméteres PFA (parciális függvényalkalmazás) az első argumentumot rögzített paraméterként veszi és visszatérési értékül egy . bg= ’ g r e e n ’ ) MonBouton ( t e x t=" Bouton 1 " ) . Tk ( ) # i n s t a n c i a t i o n p a r t i e l l e de c l a s s e : MonBouton = p a r t i a l ( tk . Parciális függvény-alkalmazások A funkcionális programozás konstrukciója. r o o t .3. t i t l e ( "PFA ! " ) r o o t . pack ( ) MonBouton ( t e x t="QUITTER" . amiknek gyakran számos paraméterük van. q u i t ) . pack ( f i l l =tk .Bevezetés a Python 3-ba 8.  Egyszerű példa :   >>> from f u n c t o o l s import p a r t i a l >>> baseTwo = p a r t i a l ( i n t . expand=True ) r o o t . A következő példában újra definiáljuk a Button osztályt bizonyos paramétereit rögzítve (amiket mindíg felül lehet írni) : from f u n c t o o l s import p a r t i a l import t k i n t e r as tk r o o t = tk . base =2) >>> baseTwo ( ’ 10010 ’ ) 18 A PFA-k nagyon hasznosak parciális widget-modellek előállításánál. mainloop ( ) ©    © 96 c Hungarian Translation Daróczy Péter .függvényobjektumot (vagy példányt) ad. Button . pack ( ) MonBouton ( t e x t=" Bouton 2 " ) . command=r o o t . bg= ’ re d ’ . X.

Használhatjuk Perlben.) között. A könyvtár importálása után a feladatunk a widget-ek létrehozására.Bevezetés a Python 3-ba 9.2..1.1. a widget-ekhez kapcsolt függvények/metódusok kódolására.1 ábrát. a tkinter könyvtár (a standard Python interface a Tk GUI toolkithez) széles körben alkalmazott. Qt . Ousterhout által 1988-ban a Berkeley University-n kifejlesztett Tcl nyelv grafilus kiterjesztéséből. Ez a kiterjesztés széles körben elterjedt a Tcl/Tk-n kívül.. a Tk-ból származik. 9. Eseményvezérelt programok Grafikus objektumok programozásakor a script szekvenciális végrehajtását egy eseménykezelő programhurokkal helyettesítik. Pythonban.) 9. ami a John K. wxPython. 9. konfigurálására és pozícionálására.2. majd az eseménykezelő programhurokba való belépésre korlátozódik. A Python esetében a kiterjesztést átnevezték tkinterre. (Lásd 9. c Robert Cordeau 97 . Rubyban. fejezet Grafikus OO programozás Az operációs rendszerekben és az alkalmazásokban elterjedten használt grafikus interface-ek programozhatók Pythonban. A tkinter könyvtár Bemutatás Ez egy elég egyszerű könyvtár. stb. A tkinter lehetővé teszi egyszerű grafikus interface-ek létrehozását. mivel minden Python-disztribúcióban alapértelmezetten telepítve van. A Pythonban használható különböző grafikus könyvtárak (GTK+.

Az aktuális 8. 9.5 verzió egy Ttk nevű könyvtárat kínál fel.1. Label ( None . Például a standard Tix modul mintegy negyven widget-et kínál a fejlesztőnek.2. Egy egyszerű példa 98 c Hungarian Translation Daróczy Péter . mainloop ( ) # az esem é n y k e z e l ö hurok e l i n d í t á sa © 9.1. pack ( ) # a Label poz í c i o n á l á sa wi dg et .2    import t k i n t e r wi dg et = t k i n t e r . melyek küzül egyeseket használnak Pythonban. ami lehetővé teszi a widget-ek különböző stílusokban történő "felöltöztetését".1-ben is rendelkezésre áll. A Tcl/Tk nyelv igen fejlett.Bevezetés a Python 3-ba 9. ábra. Egy egyszerű tkinter példa. Szekvenciális és eseményvezérelt programozás A Tk-val párhuzamosan fejlesztettek egyéb kiterjesztéseket. ábra. Ez a modul a Python 3. t e x t= ’ Bonjour monde g r a p h i q u e ! ’ ) wi dg et .

2. egy könyvtár grafikus alapelemeit jelöli.egymást kizáró . ami a window és a gadget szavak összevonásával keletkezett.állapotú gomb többállapotú csúszka képeknek widget-re való elhelyezésére szolgál bitmap-eknek widget-re való elhelyezésére szolgál a Menubutton-hoz kapcsolódik egy menüopciót megnyitó gomb görgetősáv lehetővé teszi a felhasználó által megadott adatok kiválasztását a legördülő listából Text többsoros szöveg szerkesztése Canvas zóna rajzok és fotók számára OptionMenu legördülő menü ScrolledText a Text widget görgetősávval PanedWindow interface fülekkel (tabs) LabelFrame egy keretet és egy címet tartalmaz Spinbox többszörös kiválasztást lehetővé tevő widget 9. A tkinter widget-ek Definíció A widget szó.2.1.2.3. A tkinter főbb widget-jeinek listája: Widget Tk Frame Label Button Message Entry Checkbutton Radiobutton Scale PhotoImage BitmapImage Menu Menubutton Scrollbar Listbox Funkció a legmagasabb szintű ablak más widget-ek szervezésére szoláló konténer üzenetmező gomb szöveggel vagy képpel több soros szöveg kiíratására való mező adatbeírásra való mező két állapotú gomb két . táblázat: A tkinter főbb widget-jei 9.Bevezetés a Python 3-ba 9. Widget-ek pozícionálása A tkinter-nek három pozíciókezelője van : c Robert Cordeau 99 .

2. Először is természetes dolog három zónát megkülönböztetni : 1. akkor létrehozza azt). Első lépésként következzen a grafikus interface kódja. Ez a metódus követi a grafikus tervezést és feltölti a frame-ek mindegyikét. 3. amit az adatokat tároló file adataival feltölt (ha a file nem létezik.Bevezetés a Python 3-ba Pozíciókezelő Funkció packer Minden egyes widget-et méretez és pozícionál egy widgetkonténerben az egyes widget-ek helyigényének megfelelően gridder Minden egyes widget-et méretez és pozícionál egy widgetkonténer egy táblázatának a celláiban placer Minden egyes w widget-et méretez és pozícionál egy widgetkonténerben annak megfelelően.3. az alsó zónát a fölötte lévő listát kezelő gombok képezik.3 ábra mutatja. létrehozza a root alapablakot és hívja a makeWidgets() metódust. egy listát. egy menü nélküli példa Egy telefonkönyvet kezelő scriptet fogunk írni. Grafikus tervezés A grafikus tervezés segíteni fog a jó widgetek kiválasztásánál. Az alkalmazás megjelenését a 9. Az inicializátor létrehoz egy phoneList attributumot.1.3. Két példa tkPhone. amit a w igényel. 9. a középső zóna egy névsor szerint rendezett lista. Ezen zónák mindegyikét egy-egy Frame() objektummal kódoltuk. A 100 c Hungarian Translation Daróczy Péter . amiket a packer metódussal pozícionáltunk egymás alá és mindhármat egy Tk() objektumba foglaltunk bele (lásd a fenti ábrát) A grafikus interface kódja A problémák elválasztása érdekében a következő módszer ajánlott : Megjegyzés Válasszuk el egymástól a grafikus interface és a callback-ek kódját. 9. a kiíratásra szánt felső zónát.

f i c ) : " " " I n i t i a l i s a t e u r / l a n c e u r de l a f e n e t r e de base " " " s e l f . Mint minden jó modul esetében. ábra.Bevezetés a Python 3-ba (a) A grafikus interface (b) A grafikus terv 9. phoneList = [ ] self . append ( l i n e [ : −1].3. " " " d e f __init__ ( s e l f . tkPhone callback-ek üresek (a minimális pass utasítást tartalmazzák). fic = fic # f = open ( f i c ) try : f = open ( f i c ) for l i n e in f : s e l f . p h o n e L i s t . egy auto-teszttel ellenőrizni lehet az interface jó működését (ebben az esetben a jó kinézetet) :  # −∗− c o d i n g : UTF−8 −∗− import t k i n t e r as tk # class c l a s s Allo_IHM ( o b j e c t ) : " " " IHM de l ’ a p p l i c a t i o n ’ r é p e r t o i r e t é l é phonique ’ . s p l i t ( ’ ∗ ’ ) ) e x c e p t : # c r é a t i o n du f i c h i e r de r é p e r t o i r e c Robert Cordeau 101 .

r o o t . bd=3) s e l f . pady=10) tk . pack ( ) tk . s o r t () s e l f . Label ( frameH . pack ( ) s e l f . g r i d ( row=0. nameEnt = tk . s e t . columnspan =2.W) s e l f . c l e a r ) b . g r i d ( row=2. column =0. s t i c k y=tk . s c r o l l = tk . t e x t=" Tel : " ) . t e x t=" E f f a c e r " . s t i c k y=tk . f i c . phoneEnt = tk . L i s t b o x ( frameM . RAISED. pack ( s i d e=tk . f i l l =tk . Frame ( s e l f . s e l e c t = tk . s t i c k y=tk . s c r o l l . c o n f i g ( r e l i e f =tk . RIGHT. padx=5. c o n f i g (command= s e l f . r o o t = tk . r o o t .Bevezetés a Python 3-ba f = open ( s e l f . column =1. r o o t . s c r o l l . t e x t="Nom : " ) . makeWidgets ( ) s e l f . Button ( frameH . Tk ( ) s e l f . t i t l e ( " Allo ! " ) s e l f . g r i d ( row=0. g r i d ( row=1. phoneEnt . Label ( frameH . s c r o l l . yscrollcommand= s e l f . column =1. Entry ( frameH ) s e l f . command= s e l f . pady=3) # frame " l i s t e " ( au m i l i e u ) frameM = tk . root . pady=2) b = tk . S c r o l l b a r ( frameM ) s e l f . padx=5. column =0.W) s e l f .W. r o o t ) frameM . close () s e l f . Y. phoneList . h e i g h t =6) s e l f .W.GROOVE. bd=2) frameH . Entry ( frameH ) s e l f . s t i c k y=tk . Frame ( s e l f . pady=5) 102 c Hungarian Translation Daróczy Péter . mainloop ( ) d e f makeWidgets ( s e l f ) : " Configure et positionne l e s widgets " # frame " s a i s i e " ( en haut avec bouton d ’ e f f a c e m e n t ) frameH = tk . yview ) s e l f . column =0. "w" ) finally : f . r e l i e f =tk . s e l e c t . nameEnt . g r i d ( row=1.

lambda e v e n t : s e l f . command= s e l f . t e x t=" A f f i c h e r " .END. r e l i e f =tk . a f f i c h e r ) b1 . r o o t . pady=2) b3 . a f f i c h e r ( e v e n t ) ) # frame " boutons " ( en bas ) frameB = tk . Button ( frameB .Bevezetés a Python 3-ba s e l f . s e l e c t . i n s e r t ( tk . t e x t=" A j o u t e r " . e v e n t=None ) : pass def clear ( s e l f ) : pass # auto−t e s t −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− i f __name__ == ’__main__ ’ : app = Allo_IHM ( ’ phones . pady=2) b2 . supprimer ) b3 = tk .GROOVE. LEFT. a j o u t e r ) b2 = tk . pack ( s i d e=tk . LEFT. t x t ’ ) # i n s t a n c i e l ’IHM   © c Robert Cordeau 103 . command= s e l f . pack ( pady=3) b1 = tk . s e l e c t . pack ( s i d e=tk . pack ( s i d e=tk . LEFT. Button ( frameB . Frame ( s e l f .BOTH. i [ 0 ] ) s e l f . LEFT. bind ( "<Double−Button−1>" . bd=3) frameB . phoneList : s e l f . pack ( s i d e=tk . pady=2) def ajouter ( s e l f ) : pass d e f supprimer ( s e l f ) : pass d e f a f f i c h e r ( s e l f . s e l e c t . Button ( frameB . command= s e l f . f i l l =tk . pady=5) # r e m p l i s s a g e de l a L i s t b o x # f o r i in s e l f . t e x t=" Supprimer " . expand =1.

" Allo_IHM . phoneList . t x t ’ ) : " C o n s t r u c t e u r de l ’IHM . • újra kell definiálni a callback-eket. g e t ( ) a j o u t [ 1 ] = s e l f .END) f o r i in s e l f . nameEnt . " " ] a j o u t [ 0 ] = s e l f .END. p h o n e L i s t . • létrehozzunk egy leszármaztatott Allo osztályt. clear () s e l f . # −∗− c o d i n g : UTF−8 −∗− # imports import t k i n t e r as tk from tkPhone_IHM import Allo_IHM # classes c l a s s A l l o ( Allo_IHM ) : " " " Ré p e r t o i r e t é l é phonique . hogy az előbbi örökölje az utóbbi minden jellemzőjét. f i c ) def ajouter ( s e l f ) : # maj de l a l i s t e ajout = [ " " . s o r t () # maj de l a l i s t e b o x s e l f . tk . nameEnt . f o c u s ( ) 104 c Hungarian Translation Daróczy Péter . g e t ( ) i f ( a j o u t [ 0 ] == " " ) o r ( a j o u t [ 1 ] == " " ) : return s e l f . s e l e c t . i [ 0 ] ) s e l f . s e l e c t . • ennek az inicializátora azért hívja a szülőosztály inicializátorát. i n s e r t ( tk . phoneList : s e l f . phoneEnt . append ( a j o u t ) s e l f .Bevezetés a Python 3-ba Az alkalmazás kódja A következő képpen fogjuk használni a modult : • Az előző modulból importáljuk az Allo_IHM osztályt. __init__ ( s e l f . d e l e t e ( 0 . " " " d e f __init__ ( s e l f .  Végül a script létrehoz egy alkalmazásobjektumot. f i c = ’ phones .

clear () # maj de l a l i s t e retrait = [ " " . tk . phoneEnt . a j o u t [ 1 ] ) ) f . " " ] r e t r a i t [ 0 ] . phoneList : f . s e l e c t . w r i t e ( "%s∗%s \n " % ( a j o u t [ 0 ] . p h o n e L i s t [ i n t ( s e l f . nameEnt . s e l e c t . curselection ( ) [ 0 ] ) ] s e l f . i [ 0 ] ) # maj du f i c h i e r f = open ( s e l f . p h o n e L i s t . w r i t e ( "%s∗%s \n " % ( i [ 0 ] . phoneEnt . nameEnt . clear () name . phoneList [ i n t ( s e l f . i n s e r t ( tk . e v e n t=None ) : s e l f . remove ( r e t r a i t ) # maj de l a l i s t e b o x s e l f . phone ) def clear ( s e l f ) : s e l f . close () d e f supprimer ( s e l f ) : s e l f .END) f o r i in s e l f . f i c . r e t r a i t [ 1 ] = s e l f .END) # f ö program # −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− app = A l l o ( ) # l é t r e h o z z a az a l k a l m a z á s t   © c Robert Cordeau 105 . s e l e c t . phone = s e l f . i n s e r t ( 0 .END) s e l f . phoneList : s e l f .END. curselection ( ) [ 0 ] ) ] s e l f . tk . tk . " a " ) f . close () d e f a f f i c h e r ( s e l f . name ) s e l f . s e l e c t . i n s e r t ( 0 . d e l e t e ( 0 . d e l e t e ( 0 . "w" ) f o r i in s e l f .Bevezetés a Python 3-ba # maj du f i c h i e r f = open ( s e l f . d e l e t e ( 0 . i [ 1 ] ) ) f . f i c .

4 ábrát)..4. IDLE 1 2 Egyes linuxdisztribúciókban az IDLE egy különálló csomag. 106 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba 9. hogy ebben a jegyzetben tárgyaljuk . (a) Az IDLE interpreter (b) Az IDLE editor 9.2. egy példa menüvel Minden Python disztribuciónak része az IDLE alkalmazás . Ez az alkalmazás egy komplett grafikus interface-szel rendelkező menüs alkalmazás (lásd 9.egy Pythonban írt interpreter/editor 1 . ábra. IDLE. A forráskódja hozzáférhető és és önmagában egy komplett tkinter tanfolyamot képez 2 . De túlságosan terjedelmes ahhoz.3..

integrációt és a folyamatos projektilletve a szoftverfejlesztés egyéb formáit alkalmazzák. A legfontosabb elvek : • Első rendű szempont a megrendelő maradéktalan kielégítése • Flexibilitás a követelmények változásával szemben • Működő szoftver gyors átadása (inkrementálisok) • Az üzleti szakembereknek és a fejlesztőknek napi kapcsolatban kell lenniük c Robert Cordeau 107 . Scrum. hogy képessé tegyék az embereket az együttműködésre és a gyors és hatékony döntéshozatalra. Bár az említett módszerek egyediek a speciális probléma megközelítésük tekintetében.a folyamatos visszacsatolás. Nagyon rövid iterrációkkal építkeznek. azonban vannak közös jellemzőik : . 2001-ben 17 neves szoftver fejlesztő alapította meg az "Agile Allience"-t és fogalmazta meg a "Manifesto for Agile Software Development"-et.valamennyien iterrarívak és inkrementálisak . . fejezet Az agile development fogalma Az "Agile Development" gyűjtőfogalom. egyszerre csak egy-két funkciót implementálnak. Az iterrációs ciklus végén egy működőképes programverzió a kimenet. A legnépszerűbb "Agile Development" módszerek közé tartozik az Extreme Programming (XP).. Crystal. stb.. tesztelést.Bevezetés a Python 3-ba 10. ami számos iterrarív és inkrementális szoftverfejlesztési stílust takar. ami fokozatos finomítást tesz lehetővé Mindannyian folyamatos tervezést. Mindannyian arra koncentrálnak.

tervekre) • Rendszeres időközönként a teamnek önvizsgálatot kell tartani és viselkedését esetleg módosítani Ezen elveket követő módszerek: • Extreme Programming • Adaptive Software Development • Dynamic Software Development Method • Scrum • Crystal • Feature Driven Development • Agile Modeling Ez a filozófia a projektfejlesztés ciklusának egészére érvényes. teremtsd meg a feltételeket a munkájukhoz • Szorgalmazd a szemtől-szembeni párbeszédet a teamen belül az információ cserére • A haladás legjobb mértéke a működő szoftver • "Agile process" fenntartható fejlődést ösztönöz • A fejlesztőknek és a megrendelőnek egy állandó ütemet kell fenntartani a fejlesztési folyamatban • A kiváló műszaki színvonalra és a jó tervre folyamatosan ügyelni kell • Egyszerűség – csak az igazán fontos feladat elvégzése • Az önszerveződő. most viszont csak a dokumentálás és a tesztek problémájára fogunk szorítkozni. aktív teamektől származnak a legjobb megoldások (szerkezetekre. 108 c Hungarian Translation Daróczy Péter . követelményekre.Bevezetés a Python 3-ba • Motivált szakembereket gyűjts a projekt köré.

1. ahogyan a végfelhasználó tenné. 10.py nevű modulnak lesz egy tests/test_calculus. Funkcionális tesztek : a teljes alkalmazást egy "fekete doboznak" veszik és úgy manipulálják. Megemlíthetem a következő projekteket : • Mechanize : ez a könyvtár automatizálja a WEB-oldalak kiválasztását és a velük való interakciót • Selenium : funkcionális tesztek WEB-alkalmazások számára egy valódi böngészőben. • FunkLoad : egy benchmark és riportkészítő rendszer c Robert Cordeau 109 . Unit tesztek és funkcionális tesztek Két tesztcsaládot különböztetünk meg : Unit tesztek : Unit: egy program legkisebb különállóan tesztelhető része (procedurális nyelv esetén egy függvény. Módszer Az "agile development" filozófiájának megfelelően a teszteket a kód írásával egyidőben vagy előbb írják meg. objektum orientált nyelv esetén egy metódus). Megállapodás szerint minden modul kapcsolatban van a unit test modulok egyikével. hogy ez a jellemző úgy viselkedik-e ahogyan azt terveztük. hogy a dokumentációban megadott jellemzőt egy ’use case’nek megfelelő forgatókönyv szerint hívunk és megvizsgáljuk.1. • guitest : GTK alkalmazásokat tesztel.Bevezetés a Python 3-ba 10. hogy egy program túljut a kisméretű script stádiumon. Ezeknek a teszteknek ugyanazokon az interface-eken keresztül kell történni. elkerülhetetlenül megjelenik a hibák és a tesztek problémája. A tesztek Attól kezdve. A tesztesetek egymástól függetlenek. ami a csomag egy tests folderében van. ezért ezek a programre nézve specifikusak és nehezebb őket kidolgozni.py nevű tesztmodulja. Például : egy calculus. a teszteket a programozók írják.1. mint amiket a felhasználók használnak. Definíció Egy teszt abból áll. Tesztvezérelt fejlesztésről (TDD = Test Driven Developpement) beszélünk.

JSUnit (Javascript). d e f tearDown ( s e l f ) : 1 A példa forrása : http://www. c =0): ’ ’ ’A s i m p l e adding f u n c t i o n t o demo u n i t t e s t ’ ’ ’ r e t u r n a+b+c # The f o l l o w i n g i s th e c l a s s i n which a l l # f u n c t i o n s w i l l be ran by u n i t t e s t c l a s s AddTest ( u n i t t e s t . A tesztvezérelt fejlesztés Az unittest modul szolgáltatja a PyUnit tool-t. Egy egyszerű példa. ’ ’ ’ This i s a s i m p l e program t o demonstrate how t o c r e a t e a u n i t t e s t i n Python . python . html ’ ’ ’ import u n i t t e s t #I n c l u d e th e pyUnit u n i t t e s t framework d e f add ( a .com/2011/11/getting-started-with-python-unit-testing-pyunit/  110 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba 10. Ezek mind egy eredetileg a SmallTalk nyelv számára kifejlesztett tool-ból .py -ként hajtathatjuk végre. o rg / l i b r a r y / u n i t t e s t . 1 A kódot unittest. p l e a s e s e e t he o f f i c i a l documentation page h e r e : h t t p : / / docs . Minden. amit más nyelvekben is megtalálhatunk : JUnit (Java).2.thelinuxdaily. b . NUnit (. TestCase ) : ’ ’ ’ Main c l a s s f o r add t e s t i n g .1.py néven elmentve. Can be added t o a s u i t e ’ ’ ’ # The f u n c t i o n " setUp " w i l l always be ran i n o r d e r t o # s e t u p th e t e s t environment b e f o r e a l l th e t e s t s have run .az SUnit-ból erednek. For more i n f o r m a t i o n and documentation . a TestCase-ből leszármaztatott osztályban implementált és test_ prefix-szel ellátott metódust unittesztnek tekint. a konzolról python unittest. d e f setUp ( s e l f ) : ’ ’ ’ V e r i f y environment i s s e t u p p r o p e r l y ’ ’ ’ # Printed i f t e s t f a i l s pass # The f u n c t i o n " tearDown " w i l l always be ran i n o r d e r t o # c l e a n u p th e t e s t environment a f t e r a l l th e t e s t s have run .Net). A PyUnit a TestCase alaposztályt kínálja fel a felhasználónak.

# @unittest . a s s e r t E q u a l ( add ( 1 . 5 5 ) # Test w i l l f a i l i f " f a l s e " ( b o o l e a n ) s e l f . 1 7 ) . 11 ) # F u n c t i o n s b e g i n n i n g with " t e s t " w i l l be ran # as a u n i t t e s t . def test_positive_add ( s e l f ) : ’ ’ ’ V e r i f y t h a t adding p o s i t i v e numbers works ’ ’ ’ # Printed i f t e s t f a i l s s e l f . 2 2 ) . 3 4) s e l f . 2 3 . skip ( " demonstrating skipping " ) # Skip t h i s t e s t ( Python >= 2 . #@ u n i t t e s t . s k i p ( " d e m o n s t r a t i n g s k i p p i n g " ) d e f test_negative_add_skip ( s e l f ) : ’ ’ ’ V e r i f y t h a t adding n e g a t i v e numbers works ’ ’ ’ # Printed i f t e s t f a i l s s e l f .23) . 19 ) # F u n c t i o n s b e g i n n i n g with " t e s t " w i l l be ran # as a u n i t t e s t . a s s e r t E q u a l ( add ( −12 . # In t h i s ca s e .23) . a s s e r t E q u a l ( add ( 1 0 . main ( ) Egy másik példa :    © " " " Sz ámolá s o k a t v é gz ö modul " " " # fonctions d e f a v e r a g e (∗ a r g s ) : c Robert Cordeau 111 . a s s e r t E q u a l ( add ( 1 1 .Bevezetés a Python 3-ba ’ ’ ’ V e r i f y environment i s t o r e down p r o p e r l y ’ ’ ’ # Printed i f t e s t f a i l s pass # F u n c t i o n s b e g i n n i n g with " t e s t " w i l l be ran # as a u n i t t e s t . 2 3 ) . a s s e r t E q u a l ( add ( −12 . t h i s t e s t w i l l be s k i p p e d . 1 . 7 ) d e f test_negative_add ( s e l f ) : ’ ’ ’ V e r i f y t h a t adding n e g a t i v e numbers works ’ ’ ’ # Printed i f t e s t f a i l s s e l f . 11 ) i f __name__==’__main__ ’ : u n i t t e s t .

dirname ( __file__ ) i f dirName == ’ ’ : dirName = ’ . 2 . r e a l p a t h ( dirName ) upDir = os . makeSuite ( C a l c u l T e s t ) ] 112 c Hungarian Translation Daróczy Péter    © . b ) : " " " Kisz á molja a há nyadost . a s s e r t E q u a l s ( average (2 . 4 . a s s e r t E q u a l s ( average (1 . 0) def test_suite ( ) : t e s t s = [ u n i t t e s t . path . path . " " " r e t u r n a/b " " "A s z ámolá s o k a t v é gz ö modul t e s z t m o d u l j a " " " # imports import u n i t t e s t import os import s y s dirName = os . path : s y s . 5) . 3) . s p l i t ( dirName ) [ 0 ] i f upDir not i n s y s . append ( upDir ) from c a l c u l s import average . 2) s e l f . ’ dirName = os . d i v i s i o n # classes c l a s s C a l c u l T e s t ( u n i t t e s t . 10 . 6) . " " " length = len ( args ) sum = 0 f o r ar g i n a r g s : sum += ar g r e t u r n sum/ l e n g t h def division (a . path . 4) def test_division ( s e l f ) : s e l f . path . d i v i s i o n .Bevezetés a Python 3-ba " " " Kisz á molja az á t l a g o t . ass ertEquals ( d i v i s i o n (10 . a s s e r t R a i s e s ( ZeroDivisionError . 2) s e l f . TestCase ) : def test_average ( s e l f ) : s e l f .

• létrehozza a tesztek sorozatainak sorozatát és elindítja a tesztsorozatot. mint a kódot : egy egyszerű szövegszerkesztővel olvashatóknak és szerkeszthetőknek kell lenniük.Bevezetés a Python 3-ba return unittest . ami : • megkeres minden tesztmodult: ezeknek a neve test_ prefix-szel kezdődik és egy test nevű folderben vannak. main ( ) Egy tesztsorozat végrehajtásához egy olyan scriptet kell írni.2.   © 10. • a kódhoz kapcsolódó technikai (mainstream documentation). A mainstream dokumentumok a kód ritmusában fejlődnek és ezért úgy kell őket kezelni. c Robert Cordeau 113 . Két fontos eszköz van a Python-alkalmazások dokumentációinak létrehozására : • a reStructuredText (vagy reST): egy rich text formátum. • a test_suite globális függvény suite visszatérési értékét begyűjti. • a felhasználói kézikönyveket és más magas szintű dokumentumokat (downstream documentation). A dokumentálás Egy projekt élettartama során több dokumentációtípust különböztetünk meg : • specifikációs dokumentumokat (upstream documentation). Lehetővé teszi a szöveg kombinálását a tesztekkel. TestSuite ( t e s t s ) i f __name__ == ’__main__ ’ : u n i t t e s t . • a doctests : kompatibilis a reST formátummal.

ami elválasztja a szöveg különböző strukturáit. ami lehetővé teszi interaktív prezentációk létrehozását HTML-ben. Sous−s e c t i o n :::::::::::: C e c i e s t une sous−s e c t i o n .1. egy szövegek formázására használt tag-rendszer. Egyebek között megjegyzem. • egy cím alatt és felett általában ugyanaz a karaktersor van. A • a rst2latex : egy ekvivalens L TEX-file-t generál. Egy egyszerű példa reST formátumú textfile-ra. A reST formátum A reStructuredText formátum. A A L TEX-től eltérően a dokumentum minőségét "non intrusive" módon javítja.Bevezetés a Python 3-ba 10. • a rst2s5 : egy s5 formátumú prezentációt hoz létre. 114 c Hungarian Translation Daróczy Péter . az alkalmazott karaktert összeköti egy fejezetszinttel. Amikor az interpreter egy ilymódon aláhúzott szöveget talál. • a strukturálás a különböző szintű részek címeinek = .2._ : . A reST interpretert tartalmazó docutils projekt egy sor utility-t kínál fel: • a rst2html ): html kimenetet ad integrált css-sel. azaz a file-ok közvetlenül olvashatók maradnak. stb. amit szokásosan reSt-nek neveznek. mint a következő példában :  ====================== F i c h i e r au format reST ====================== Section 1 ========= On e s t dans l a s e c t i o n 1 . hogy : • a fő-tag az üres sor. karakterekkel történő aláhúzásával történik.

| h e l e n | image : : h e l e n . | shamr | image : : shamr .... −−−−−−−−−−−−−−− Un t a b l e a u de t r o i s images au format " png " :::::::::::::::::::::::::::::::::::::::::: ======= ======= ======= Image 1 Image 2 Image 3 ======= ======= ======= | shamr | | e l y s T | | h e l e n | ======= ======= ======= ... c Robert Cordeau 115 . .. png   © Az rst2html utility erre a file-ra alkalmazva ugyanezt a file-t állítja elő . Section 3 ========= La s e c t i o n 2 e s t un peu v a n t a r d e : la s e c t i o n 1 est ∗ t r e s bien ∗. C e c i e s t une sous−sous−s e c t i o n ... ... png .. . .... ..Bevezetés a Python 3-ba Sous−sous−s e c t i o n .html kiterjesztéssel. png . e t c e c i un commentaire Section 2 ========= La s e c t i o n 2 e s t ’ ’ beaucoup p l u s ’ ’ ∗∗ i n t é r e s s a n t e ∗∗ que l a s e c t i o n 1 .. | e l y s T | image : : e l y s T .

másrészt a vé116 c Hungarian Translation Daróczy Péter . Mindegyik esetében megadom egyrészt a forráskódot a dokumentációs stringjével. mint az Epydoc ezeket ki tudják szűrni a modulokból a dokumentum előállításához. A doctest modul A A L TEX létrehozója. amiben a standard doctest modul lehetővé teszi ezeknek a session-öknek a kinyerését. Tovább is mehetünk és alkalmazói példákat is belefoglalhatunk a dokumentációs stringekbe.2.Bevezetés a Python 3-ba 10. hogy ezek működnek. ábra. melyek interaktív session-ök formájában vannak megírva.1. majd elindítását annak ellenőrzéséhez. Az olyan programok. Példa HTML formátumú outputra 10. Nézzünk meg három példát. Donald Knuth literate programming elvét vették át a Pythonban az API-k dokumentációs stringekkel történő dokumentálásához.2.

format ( " Mode s i l e n c i e u x " ) ) d o c t e s t . >>> somme ( 2 .Bevezetés a Python 3-ba grehajtás eredményéről egy képernyőképet.  Első példa : doctest1. 4 ) 6 """ r e t u r n a+b i f __name__ == ’__main__ ’ : p r i n t ( " \{: −^40\} " . testmod ( v e r b o s e=True ) A doctest1. testmod ( ) p r i n t ( "Ha minden rendben van . format ( " Ré s z l e t e z ö mód " ) ) d o c t e s t . 2 ) 4 >>> somme ( 2 .py " " "A d o c t e s t pr ó bamodulja " " " # import import d o c t e s t # fonctions d e f somme ( a . 2 ) E x p e cti ng : 4 ok Trying : somme ( 2 . b ) : " " " V i s s z a t é r é s i é r t é ke a + b . semmit sem l á tunk ! " ) input () p r i n t ( " \{: −^40\} " .py script végrehajtásának eredménye :    © −−−−−−−−−−− Mode s i l e n c i e u x −−−−−−−−−−−− Ha minden rendben van . 4 ) E x p e cti ng : c Robert Cordeau 117 . semmit sem l á tunk ! −−−−−−−−−−−− Ré s z l e t e z ö mód −−−−−−−−−−−− Trying : somme ( 2 .

C ette t e c h n i q u e permet d ’ i n t e r n a t i o n n a l i s e r l e s a p p l i c a t i o n s pour l e s r e n d r e c o m p a t i b l e s avec c e r t a i n e s r é g i o n s f r a n c a i s e s . r e p l a c e ( ’ r ’ . """ t e x t e = t e x t e . somme 2 t e s t s in 2 items .Bevezetés a Python 3-ba 6 ok 1 i t e m s had no t e s t s : __main__ 1 items passed a l l t e s t s : 2 t e s t s i n __main__ . . . i l s en bavent . Les ’ r ’ s o n t T r i p l é s . 2 p a s s e d and 0 f a i l e d . l e s ’ e ’ s u i v i d ’ un ’ u ’ Exemple : >>> t e x t e = " Est−c e que tu as r e g a r d é l a t é l é h i e r s o i r ? I l y a v a i t un th éma s u r l e s r a m a s s e u r s d ’ e s c a r g o t s en Laponie . . .    © Második példa : doctest2. ’ rRr ’ ) p r i n t ( t e x t e . Test p a s s e d . i l s eun baveunt . " >>> a c c e n t E t r a n g e ( t e x t e ) Est−ceu queu tu as rRreugarRrd é l a t é l é h i e u r R r s o i r R r ? I l y a v a i t un th éma surRr l e u s rRramasseuurRrs d ’ e u s c a r R r g o t s eun Laponieu . testmod ( v e r b o s e=True ) 118 c Hungarian Translation Daróczy Péter . ’ eu ’ ) ) def _test ( ) : import d o c t e s t d o c t e s t .py " " " Module d ’ e s s a i de d o c t e s t . " " " # fonctions def accentEtrange ( texte ) : " " " Ajoute un a c c e n t é t r a n g e á un t e x t e . r e p l a c e ( ’ e ’ .

. © c Robert Cordeau 119 . _ t e s t 1 items passed a l l t e s t s : 2 t e s t s i n __main__ . .Bevezetés a Python 3-ba   i f __name__ == ’__main__ ’ : _test ( ) © A script végrehajtásának eredménye :    Trying : t e x t e = " Est−c e que tu as r e g a r d é l a t é l é h i e r s o i r ? I l y a v a i t un th éma s u r l e s r a m a s s e u r s d ’ e s c a r g o t s en Laponie . a c c e n t E t r a n g e 2 t e s t s in 3 items . i l s eun baveunt . Test p a s s e d . . 2 p a s s e d and 0 f a i l e d . . " E x p e cti ng n o t h i n g ok Trying : accentEtrange ( texte ) E x p e cti ng : Est−ceu queu tu as rRreugarRrd é l a t é l é h i e u r R r s o i r R r ? I l y a v a i t un th éma surRr l e u s rRramasseuurRrs d ’ e u s c a r R r g o t s eun Laponieu . i l s en bavent . ok 2 i t e m s had no t e s t s : __main__ __main__ .

f a c t o r i a l ( ) .. O v e r f l o w E r r o r : n t oo l a r g e """ 120 c Hungarian Translation Daróczy Péter .. \ h y p e r t a r g e t { page110 }{Egy} >>> [ f a c t o r i a l ( n ) f o r n i n range ( 6 ) ] [ 1 . 1 ) Traceback ( most r e c e n t c a l l l a s t ) : .. 0 ) 265252859812191058636308480000000 I t must a l s o not be r i d i c u l o u s l y l a r g e : >>> f a c t o r i a l ( 1 e100 ) Traceback ( most r e c e n t c a l l l a s t ) : . 1 .. The example module s u p p l i e s one f u n c t i o n . r e t u r n an i n t . but th e f l o a t must be an e x a c t i n t e g e r : >>> f a c t o r i a l ( 3 0 ... For example .py  """ This i s th e " example " module . 120] >>> f a c t o r i a l ( 3 0 ) 265252859812191058636308480000000 >>> f a c t o r i a l ( −1) Traceback ( most r e c e n t c a l l l a s t ) : . I f th e r e s u l t i s s m a l l enough t o f i t i n an i n t . V a l ueErro r : n must be >= 0 F a c t o r i a l s o f f l o a t s a r e OK.Bevezetés a Python 3-ba Harmadik példa : example. 6 . 24 . >>> f a c t o r i a l ( 5 ) 120 """ def f a c t o r i a l (n ) : " " " Return t he f a c t o r i a l o f n . 2 . E l s e r e t u r n a l o n g . an e x a c t i n t e g e r >= 0 . V a l ueErro r : n must be e x a c t i n t e g e r >>> f a c t o r i a l ( 3 0 .

2 . testmod ( v e r b o s e=True ) i f __name__ == "__main__" : _test ( ) p r i n t ( "OK" )    © A script végrehajtásának eredménye : Trying : f a c t o r i a l (5) E x p e cti ng : 120 ok Trying : [ f a c t o r i a l ( n ) f o r n i n range ( 6 ) ] E x p e cti ng : [ 1 . 120] ok Trying : f a c t o r i a l (30) E x p e cti ng : 265252859812191058636308480000000 ok Trying : f a c t o r i a l ( −1) c Robert Cordeau 121 .Bevezetés a Python 3-ba import math i f not n >= 0 : r a i s e Val ueErr or ( " n must be >= 0 " ) i f math . 6 . 1 . 24 . f l o o r ( n ) != n : r a i s e Val ueErr or ( " n must be e x a c t i n t e g e r " ) i f n+1 == n : # c a t c h a v a l u e l i k e 1 e300 r a i s e O v e r f l o w E r r o r ( " n t oo l a r g e " ) result = 1 factor = 2 w h i l e f a c t o r <= n : r e s u l t ∗= f a c t o r f a c t o r += 1 return r e s u l t def _test ( ) : import d o c t e s t d o c t e s t .

Test p a s s e d .1) E x p e c ti ng : Traceback ( most r e c e n t c a l l l a s t ) : . innentől kezdve a kódba beépített dokumentáció a kódfejlesztés gyengéjét jelenti : amikor a dokumentáció mérete nő. 7 p a s s e d and 0 f a i l e d .Bevezetés a Python 3-ba E x p e c ti ng : Traceback ( most r e c e n t c a l l l a s t ) : ..0) E x p e c ti ng : 265252859812191058636308480000000 ok Trying : f a c t o r i a l ( 1 e100 ) E x p e c ti ng : Traceback ( most r e c e n t c a l l l a s t ) : .testfile() 122 c Hungarian Translation Daróczy Péter . O v e r f l o w E r r o r : n t oo l a r g e ok 1 i t e m s had no t e s t s : __main__ .. nem látjuk a kódot ! A megoldás ennek a dokumentációnak az áthelyezése : a doctest.... V al ueErro r : n must be >= 0 ok Trying : factorial (30.2. _ t e s t 2 items passed a l l t e s t s : 1 t e s t s i n __main__ 6 t e s t s i n __main__ . f a c t o r i a l 7 t e s t s in 3 items . A dokumentálás vezérelt fejlesztés Amint az látható.. V al ueErro r : n must be e x a c t i n t e g e r ok Trying : factorial (30. OK   © 10.3.

Ami többlet. c Robert Cordeau 123 .Bevezetés a Python 3-ba függvény lehetővé teszi a dokumentációs file nevének megadását. ezt a file-t reST formátumban írhatjuk. más részt ugyanaz a file naprakész dokumentációt szolgáltat. Egyrészt függvénybe (illetve metódusba) integrált tesztjeink vannak. így két legyet ütünk egy csapásra.

. a lebegőpontos számok kódolásához egy szabványt használunk (IEEE 754). A Unicode-szabványban a karakterek numerikus azonosítói egyediek és univerzálisak.2 ábrát). hogy konstruáljunk egy táblázatot. Az első elképzelés az.). Az egész számok kódolásához elég az alap megváltoztatása. azonban a helyzet összetettebb a karakterek esetében.Bevezetés a Python 3-ba A. Az Unicode táblázat A Python 3 -ban a karakterláncok (az str() típus) Unicode stringek. hogy a számítógép minden információt kódol. ezért ezek nyilvánvalóan nem kódolhatók egy bájton. Függelék Karakterkészlet és kódolás Láttuk. egyedül az egyes karakterekhez rendelt numerikus azonosító értékét adja meg (lásd A. amit binárisan manipulál. ISO-8852-1. 6000 nyelv létezik). bitek számára vonatkozóan.1 ábrát). 124 c Hungarian Translation Daróczy Péter . A humán nyelvek és írásbeli megjelenésük sokfélesége egy hozzájuk adaptált kódolást tesz szükségessé. Kódolás Miután összegyűjtöttük az összes szimbólumot és hozzárendeltünk egy számot. Mivel több százezer különböző karakterről van szó (kb. de számos más táblázatot is konstruáltak (EBCDIC.. A Unicode-szabvány semmilyen szabályt sem rögzít a kódolás számára fenntartott byte-ok ill. találnunk kell nekik egy bináris reprezentációt. ami a megjelenítendő szimbólumokat összeköti egy (általában egy byte-on kódolt) számmal : Szimbólum ←→ Szám A legnevezetesebb a 7 biten kódolt ASCII táblázat (128 kód) (lásd A.

ábra.1. de a Unicode milliónyi lehetőségének reprezentálására karakterenként több byte szükséges.Bevezetés a Python 3-ba A. ASCII táblázat Az ASCII számára egyetlen byte elegendő lenne. de a Unicode milliónyi lehetőségének reprezentálására karakterenként több byte szükséges. c Robert Cordeau 125 . Az ASCII számára egyetlen byte elegendő lenne.

egy diszkről. hogy meg tudjuk adni. egy monitorról . Az adatokat a tasztaturán keresztül billentyűzzük be vagy valahonnan importáljuk őket.. Szimbólum ←→ Szám ←→ Bitek Példa az "é" Unicode karakter UTF-8 kódolására : é ←→ 233 ←→ C3 A9 Gyakorlati alkalmazások A be. ezért a leggazdaságosabb kódolás az UTF-8. A még kevésbé gyakori speciális karakterekhez (2048 és 65535 közötti kódok) az UTF-8 három byte-ot használ és így tovább. legyen szó egy nyomtatóról. ami éppen az Unicode táblázat alsó részének felel meg.és kimenetek Fontos.és kimeneti karakterláncokat mindíg úgy kell tekinteni. programjaink pontosan milyen formában várják az adatokat. A 0 és 127 közé eső kódokra az UTF-8 az ASCII táblázat byte-jait használja. Speciális karakterekhez (128 és 2047 közötti kódok) az az UTF-8 két byte-ot használ. Ezeket a be. hogy konkrétan byte-sorozatokról van szó és különböző mechanizmusokat kell alkalmaznunk ezen 126 c Hungarian Translation Daróczy Péter . ábra. amiket tetszőleges perifériaeszközön keresztül exportálunk..Bevezetés a Python 3-ba A. Ugyanígy ki kell tudnunk választani az általunk exportált adatok formátumát. A Unicode táblázat kivonata Mivel a szövegek többsége csak az ASCII táblázatot használja.2.

hogy a Python korrekt módon tudja őket interpretálni. Annak érdekében.3 ábrát). "w" ) >>> o f . amit speciálisan byte-sorozatok (illetve karakterláncok) kezelésére terveztek. " rb " ) >>> o c t e t s = o f . érdemes pontosan megadni a karakterkészletet (kötelezően a script 2. a bytes típust. A karakterek természetesen byte-okban lehetnek kódolva és a byte-ok karakterekbe lehetnek dekódolva (speciálisan UTF-8 kódolással. read ( ) >>> type ( c h a i n e ) < c l a s s ’ s t r ’> >>> p r i n t ( c h a i n e ) Egy l épé s >>> l e n ( c h a i n e ) 10 >>> type ( o c t e t s ) < c l a s s ’ b y t e s ’> >>> p r i n t ( o c t e t s ) b ’ Egy l \ xc3 \ xa9p \ xc3 \ xa9s \n ’ >>> l e n ( o c t e t s ) 12   © A Python scriptek esete Mivel a Python-scriptek szövegek.    import s y s p r i n t ( s y s . sorában). t x t " . c l o s e ( ) >>> o f = open ( " t e s t . w r i t e ( c h a i n e ) 10 >>> o f . Előzőleg ismerni kell a rendszerünk által használt karakterkészletet (lásd a A.Bevezetés a Python 3-ba byte-sorozatoknak karakterlánccá alakítására illetve az ellenkező irányú átalakításra. hogy más szabvány szerint vannak kódolva. A Python mostantól fogva egy új adattípust bocsát a rendelkezésünkre. t x t " . e n c o d i n g ) # cp1252 ( Windows XP/ SciTE ) © c Robert Cordeau 127 . amit az imént láttunk):  >>> c h a i n e = " Egy l épé s \n " >>> o f = open ( " t e s t . s t d o u t . ezért fennáll a veszély. vagy 3.

ábra. A cp1252 karakterkészlet 128 c Hungarian Translation Daróczy Péter .3.Bevezetés a Python 3-ba Tehát megadjuk a scriptekben :    # −∗− c o d i n g : cp1252 −∗− © Vagy (ami a Python 3 esetében alapértelmezett):    # −∗− c o d i n g : UTF−8 −∗− © A.

e n c o d i n g=" Latin −1" ) >>> ch_lue = o f . hogy be-/kimenetek pillanatában jelezzük a kódolást. c l o s e ( ) >>> ch_lue ’ Egy l épé s \n ’ © c Robert Cordeau 129 . e n c o d i n g=" Latin −1" ) >>> o f . read ( ) >>> o f . Például :    >>> c h a i n e = " Egy l épé s \n " >>> o f = open ( " t e s t . c l o s e ( ) >>> o f = open ( " t e s t . t x t " . " r " . w r i t e ( c h a i n e ) 10 >>> o f . t x t " .Bevezetés a Python 3-ba Az Unicode-hibák elkerüléséhez Az Unicode-hibák elkerülésére szolgáló technika abból áll. "w" .

1 } definíciós halmaz. a. ¯ Az igazságtáblák Az alap boole-operátorok igazságtáblája: Unáris NOT-operátor a 0 1 NOT(a) 1 0 Bináris AND és OR-operátorok a 0 0 1 1 b 0 1 0 1 a OR b a AND b 0 0 1 0 1 0 1 1 130 c Hungarian Translation Daróczy Péter . Függelék A logikai függvények A Boole-logika A XIX. Ma a Boole-algebrának számos alkalmazása van informatikában és az elektromos áramkörök tervezésében.bésa + b jelöljük. melyen definiáljuk a NO.Bevezetés a Python 3-ba B. Az operátorokat néha rendre mint a. Legyen B = { 0. AND és OR operátorokat. században George Boole matematikus teljesen átalakította a logikát egy formális formális rendszerré. A változók értékeit néha False-sal és True-val jelöljük. Ez egy kétértékű logika.

ekvivalencia és implikáció-operátorok a 0 0 1 1 b 0 1 0 1 a XOR b 0 1 1 0 a ⇐⇒ b a =⇒ b 1 1 0 1 0 0 1 1 c Robert Cordeau 131 .Bevezetés a Python 3-ba Kizáró.

ak+1 sorrendben írjuk le. a szám számjegyeit a1 a2 a3 . A bk és b−k számok a k-adik pozícióhoz tartozó úgynevezett nagyságrendek. akkor a számot az a1 bk +a2 bk−1 +a3 bk−2 + . Egy számjegy tényleges értéke /helyiértéke/ attól függ. A használt számjegyek a természetes számok. ugyanis ekkor az alaki érték még megszorzódik az alapszám adott pozíciója szerint hatványával. hogy hogyan ábrázolható egy adott szám különböző alapszámot használó számrendszerekben. Ha b a számrendszer alapja. 132 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba C. hogy a szám melyik pozíciójában áll. + ak + 1b0 formában fejezzük ki. Függelék Aritmetikai alapok Definíció A számábrázolási rendszer vagy számrendszer meghatározza. 0 és b-1 között. . . . .

. } bináris sorozatok halmaza. aminek a bemenete különböző hosszúságú file-ok.1 ábrát) : f : { 0. 1 }∗ = { ∅. 1 }∗ → { 0. Például k = 512-vel 2512 azaz 10154 cella áll rendelkezésre. .10. 1 }k = { 0.11 } bináris szekvenciák halmaza.. 1. 1. hogy f (x) = f (y) (ugyanaz a bináris szekvencia). Ennek az alkalmazásnak lehetővé kell tenni a bemeneti file-ok azonosítását : f (x) = f (y) akkor és csak akkor. Viszont a véges k hossz miatt nem tudjuk visszaállítani a file-okat:létezik két különböző x és y (különböző file-ok) úgy. • egy megfelelő algoritmussal a kezelni kell a fennmaradó ütközéseket... Ekkor ütközésről (collision) beszélünk.. 0. . 10. értékkészlete a k db bitből álló { 0. 0. ha x = y . c Robert Cordeau 133 . 100.. Függelék A hash-függvények Működési elv A hash függvény egy f alkalmazás..Bevezetés a Python 3-ba D.. 0. 1 }k ahol f értelmezési tartománya a { 0.. 101.. 11...00. amiket tömörít és kimenetként egy rögzített hosszúságú bináris sorozatot ad ( lásd D.. Gyakorlati megvalósítás Két problémát kell megoldani : • egy elég hosszú bináris szekvencia választásával csökkenteni kell az ütközések számát.01.

1. A hashing működési elve Alkalmazás a szótárakra S memóriánk van m adat tárolására..... ahol a szögletes zárójelben szereplő információt kulcsnak hívják : S[0].Bevezetés a Python 3-ba D. S[1].. .2 ábrát): lapin renard hérisson ours 12 2 4 1 (a) Tárolás ütközés nélkül (b) Ütközés kezelése lineáris próbával D.2. ábra. c. Például karakterkulcsokkal a következő módon definiált hash-függvényt fogunk használni : f : { a.. Mindegyik adathoz asszociatív tömb segítségével tudunk hozzáférni. m − 1 }k A következő információk legyenek egy szótárban tárolva ( lásd D. 2. b. ábra. S[m − 1]. z }∗ → { 0. Egy szótár kulcsainak hash-elése 134 c Hungarian Translation Daróczy Péter .1... . ..

google.org/downloads/ www.info/ Python 3.html Eszközök : www.com/p/pythonxy/wiki/Downloads?tm=2 http://rgruet. .com/downloads/wingide-101 http://eric-ide.htm www.fr Speciális EDI-k : www.org/pypi/ http://code.org http://pypi. .free.org/SciTEDownload.python-projects.scintilla.wingware.python. www. Függelék Források E. WEB-es források Általános : .fr/pointal/python:abrege c Robert Cordeau 135 .Bevezetés a Python 3-ba E.1.gnuplot.python.limsi.eclipse.1 szintaxis összefoglalás : http://perso.org/eric-download.

Bevezetés a Python 3-ba F. Függelék Fogalmak 136 c Hungarian Translation Daróczy Péter .

2e édition.Bevezetés a Python 3-ba Irodalomjegyzék [1] Swinnen. Packt Publishing. [4] Lutz. Eyrolles. [5] Ziadé. 2e édition. O’Reilly. Mark Programming in Python 3. Yves Python précis et concis O’Reilly. [3] Martelli. 2009. Tarek Expert Python Programming. [6] Ziadé. Eyrolles. Alex Python en concentré. 2e édition. 2005. [7] Ziadé. 2010. 2009. c Robert Cordeau 137 . 2008. [8] Younker. Addison-Wesley. 2007. Tarek Programmation Python. Conception et optimisation. Mark et Bailly. Tarek Python : Petit guide à l’usage du développeur agile Dunod. [2] Summerfield. 2004. 2008. Gérard Apprendre à programmer avec Python 3. Jeff Foundations of Agile Python Development Apress.

Sign up to vote on this title
UsefulNot useful