P. 1
python_roco_20120229

python_roco_20120229

|Views: 273|Likes:
Published by Dezső József

More info:

Published by: Dezső József on Mar 08, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/08/2012

pdf

text

original

Sections

  • 1. Bevezetés az informatikába 1
  • 1.1. A Python
  • 1.2.1. A számítógép
  • 1.2.2. Kétfajta program
  • 1.3.1. Különböző szintű programnyelvek
  • 1.3.2. A programnyelvek rövid története
  • 1.4. Programok létrehozása
  • 1.4.1. Két technika
  • 1.4.3. Programok létrehozása
  • 1.5.1. Definíciók
  • 1.5.2. Programok megjelenítése
  • 1.6. Python-implementációk
  • 2.1. Programvégrehajtási módok
  • 2.1.1. Egy Python-kód két végrehajtási módja
  • 2.2. Azonosítók és kulcsszavak
  • 2.2.1. Azonosítók
  • 2.2.2. Névadási stílusok
  • 2.2.3. A Python 3 foglalt szavai
  • 2.3. A kifejezés fogalma
  • 2.4. Egész adattípusok
  • 2.4.1. Az int típus
  • 2.4.2. A bool típus
  • 2.5. Lebegőpontos típusok
  • 2.5.1. A float típus
  • 2.5.2. A complex típus
  • 2.6. Változók és értékadás
  • 2.6.1. A változók
  • 2.6.2. Az értékadás
  • 2.6.3. Az értékadás nem összehasonlítás !
  • 2.6.4. Az értékadás változatai
  • 2.6.5. Értékadások (grafikus magyarázatok)
  • 2.7. Karakterláncok
  • 2.7.1. Karakterláncok : bemutatás
  • 2.7.2. Karakterláncok : műveletek
  • 2.7.3. Karakterláncok : függvények kontra metódusok
  • 2.7.4. Egy ch karakterlánc állapotát vizsgáló metódusok
  • 2.7.5. Új karakterláncot adó metódusok
  • 2.7.6. Karakterláncok : egyszerű indexelés
  • 2.7.7. Részkarakterláncok kivágása
  • 2.8. Bináris adatok
  • 2.9. Bemenetek, kimenetek
  • 2.9.1. Bemenetek
  • 2.9.2. Kimenetek
  • 2.9.3. Escape-szekvenciák
  • 3.1. Összetett utasítások
  • 3.2. Választás
  • 3.2.1. Választás : if - [elif] - [else]
  • 3.2.2. Egy alternatíva tömör szintaxisa
  • 3.3. Ciklusok
  • 3.3.1. Programhurok : while
  • 3.3.2. Bejárás : for
  • 3.4. Utasításszekvenciák megszakadása
  • 3.4.1. Egy ciklus megszakítása : break
  • 3.4.2. Ciklus rövidrezárása : continue
  • 3.4.3. Ciklusok teljes szintaxisa
  • 3.4.4. Kivételek (exceptions)
  • 4.1. Szekvenciák
  • 4.1.1. Mi a szekvencia ?
  • 4.2. Listák
  • 4.2.1. Definíció, szintaxis és példák
  • 4.2.2. Inicializálás és tesztek
  • 4.2.3. Metódosok
  • 4.2.4. Listarészek manipulálása
  • 4.3. Szűkített listák
  • 4.3.1. Definíció, szintaxis és példák
  • 4.4. Tuple-k
  • 4.5. Visszatérés a hivatkozásokhoz
  • 4.6. Asszociatív tömbök
  • 4.6.1. Az asszociatív tömb típus
  • 4.6.2. A szótárak (dict)
  • 4.7. Halmazok (set)
  • 4.8. Szövegfile-ok
  • 4.8.1. A file-ok : bevezetés
  • 4.8.2. A file-ok kezelése
  • 4.9. Iterrálás a konténereken
  • 4.10. Formázott kiíratás
  • Függvények és névterek
  • 5.1. Definíció és szintaxis
  • 5.2. Argumentumok átadása
  • 5.2.1. Általános mechanizmus
  • 5.2.2. Egy vagy több paraméter, visszatérési érték nincs
  • 5.2.3. Egy vagy több paraméter, visszatérési érték használata
  • 5.2.4. Függvény átadása paraméterben
  • 5.2.5. Paraméterek alapértelmezett értékkel
  • 5.2.6. Tetszőleges számú argumentum : egy tuple átadása
  • 5.2.7. Tetszőleges számú argumentum : egy szótár átadása
  • 5.3. Névterek
  • 5.3.1. Objektumok érvényeségi köre
  • 5.3.2. Nevek feloldása : az LGI szabály
  • 6.1. Modulok
  • 6.1.1. Modul importálása
  • 6.1.2. Példák
  • 6.2. Standard könyvtár
  • 6.2.1. A standard könyvtár
  • 6.3. Harmadik fél könyvtárai
  • 6.3.1. Nagy heterogenitás
  • 6.3.2. Egy példa : az unum könyvtár
  • 6.4. Csomagok
  • 7.1. A procedurális megközelítés elégtelensége
  • 7.2. Terminológia
  • 7.3. Osztályok és objektumok létrehozása
  • 7.3.1. A class utasítás
  • 7.3.2. Objektumok létrehozása és attributumai
  • 7.3.3. Visszatérés a névterekre
  • 7.4. Metódusok
  • 7.5. Speciális metódusok
  • 7.5.1. A speciális metódusok
  • 7.5.2. Az inicializátor
  • 7.5.3. Operátor újradefiniálás (Operátoroverloading)
  • 7.5.4. Példa az operátor újradefiniálásra (operátoroverload- ingra)
  • 7.6. Öröklés és polimorfizmus
  • 7.6.1. Öröklés és polimorfizmus
  • 7.6.2. Példa az öröklésre és a polimorfizmusra
  • 7.7. Visszatérés a kiindulási példára
  • 7.7.1. A circle osztály : tervezés
  • 7.7.2. A circle osztály
  • 7.8. Az objektum orientált tervezés fogalma
  • 7.8.1. Kompozíció
  • 7.8.2. Leszármaztatás
  • 8.1. Procedurális technikák
  • 8.1.1. A dokumentálás javítása
  • 8.1.2. Menük készítése szótárral
  • 8.1.3. Rekurzív függvények
  • 8.1.4. A generátorok és a generátor-kifejezések
  • 8.1.5. Egymásba ágyazott függvények (closure)
  • 8.1.6. A dekorátorok
  • 8.2. Technikai objektumok
  • 8.2.1. __slots__ és __dict__
  • 8.2.2. A functor
  • 8.2.3. Az accessor-ok
  • 8.3. Függvénytechnikák
  • 8.3.1. A lambda direktíva
  • 8.3.2. A map, filter és reduce függvények
  • 8.3.3. Parciális függvény-alkalmazások
  • Grafikus OO programozás
  • 9.1. Eseményvezérelt programok
  • 9.2. A tkinter könyvtár
  • 9.2.1. Bemutatás
  • 9.2.2. A tkinter widget-ek
  • 9.2.3. Widget-ek pozícionálása
  • 9.3. Két példa
  • 9.3.1. tkPhone, egy menü nélküli példa
  • 9.3.2. IDLE, egy példa menüvel
  • Az agile development fogalma
  • 10.1. A tesztek
  • 10.1.1. Unit tesztek és funkcionális tesztek
  • 10.1.2. A tesztvezérelt fejlesztés
  • 10.2. A dokumentálás
  • 10.2.1. A reST formátum
  • 10.2.2. A doctest modul
  • 10.2.3. A dokumentálás vezérelt fejlesztés
  • A. Függelék
  • E.1. WEB-es források

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

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

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

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

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

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

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

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

fejezet Bevezetés az informatikába Ez a fejezet bemutatja a Python főbb jellemzőit. A modulok széles választéka áll rendelkezésre.Bevezetés a Python 3-ba 1. meghatározza a szkriptírás sajátosságait. a Pythont számos egyetemen oktatják és vállalkozások alkalmazzák ... évente kollokviumokat rendeznek. elhelyezi a Pythont a programozási nyelvek történetén belül.1.. definiálja az algoritmus fogalmát és a rendelkezésre álló különböző implementációk felsorolásával zárul.7 és v3. ami azt jelenti. A Python még kereskedelmi felhaszálások esetén is szabad és ingyenes – Guido van Rossum Benevolent Dictator for Life (BDFL). ami GPL kompatibilis. 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. aki meghatározza a projekt fejlesztésének általános irányát. 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 .6 és a Python 3.0 párhuzamos megjelenése – 2011 : v2.2 • Nyílt forrású (Open Source) nyelv – Open Source CNRI licensz. hogy az open source fejlesztők közösségének olyan respektált tagja. de a copyleft korlátozás nélkül. – 2008 vége : A Python 2..

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 . 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. a függvények és a metódusok első osztályúnak nevezett objektumok. mint az összes többi objektumot (hozzárendelhetjük. 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. C-ben.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.

CD-ROM .. • A RAM 8 bites szavakba szervezett cellákból áll.2. Gyakran multitaskok.).1. • írható-olvasható memóriát (RAM). állandó memóriákat (merevlemez. 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. amiket egy forrásprogram tartalmaz. pendrive. 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. c Robert Cordeau 3 . amit úgy alakítanak át. 1. Ezeket parancsok sorozata alkotja. órát.2. 1. • Az alkalmazói programokat speciális feladatoknak szentelik.. néha többfelhasználósak. ami a program végrehajtásához szükséges utasításokat és adatokat tartalmazza.Bevezetés a Python 3-ba 1. hálózat . amik a hardwareés a software-erőforrásokat kezelik. Kétfajta program Két programtípust különböztetünk meg : • Az operációs rendszer : azoknak a programoknak az együttese. • perifériákat : be-/és kimeneteket. gyors cashmemóriát...2. hogy a számítógép végre tudja hajtani.2.

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

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.. Ez a technika nagyon rugalmas. A linkek szerkesztése az az eljárás. .. Mielőtt végrehajtatnánk ezeket a tárgykódfileokat. Semmilyen tárgykód sem generálódik. 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. Egyes modern nyelveknak (Java.Bevezetés a Python 3-ba egy tárgykódgenerálási fázis). A link lehet : .dinamikus : a tárgykódfájl linkelve van a könyvtárral.1. viszont az eredménye nagy végrehajtási sebesség. ábra. fel kell oldani ezeket a szimbólumokat és egy könyvtárhoz kell őket kapcsolni. de a generált kódok nem hatékonyak : a program minden egyes végrehajtásakor használni kell az interpretert . 1. hogy a forráskód minden egyes sora az elemzéssel egyidejűleg végrehajtható utasításra lesz lefordítva.2. . Az interpretálás (értelmezés) azt jelenti. de nem ugyanabba a végrehajtható fájlba. 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. ábra.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 kényszer.statikus : a tárgykódfájl és a könyvtár ugyanabba a végrehajtható fájlba van linkelve. 1. Az interpreter működése c Robert Cordeau 5 .

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

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

NET.Bevezetés a Python 3-ba • IronPython : Python. 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. C#-ban van írva. ahogyan akarjuk) • Pypy : európai kutatási projekt Pythonban írt Python interpreterre 8 c Hungarian Translation Daróczy Péter .

1. a Python is lehetővé teszi az adatok manipulálását a foglalt szavainak és az adattípusoknak köszönhetően. amit egy paranccsal vagy egy editor menüpontjaként hajtatunk végre. Ez a fejezet bemutatja az azonosítók képzésének szabályait. hogy azzonnal eredményt kapjunk. 2. Utoljára. = read. loop).1. ami végrehajtja a kiértékeléső ciklust (REPL. 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). print.1. fejezetben fogjuk tárgyalni) valamint a(z unicode és bináris) karakterláncokat. • vagy egy interpretert (például IDLE) használunk arra. eval. az egyszerű adattípusokat ( a konténereket a 4. Az IDLE-be egy Python-interpreter van beépítve.Bevezetés a Python 3-ba 2. c Robert Cordeau 9 . 2. fejezet A Python-számológép Mint minden nyelv. objektumhivatkozások és értékadás nem triviális fogalmaira. de nem utolsó sorban ez a fejezet kitér a változók.

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

A Python 3 foglalt szavai A Python 3. • unmodule_m modulok. amit a Python-interpreter kitud értékelni.1. metódusok és grafikus interface-ek.3.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. Végül.3. • lowercase vagy lower_case minden más azonosító esetében.2.Bevezetés a Python 3-ba • TitleCase az osztályok. Kerüljük a következőkarakterek használatát : l. hogy c Robert Cordeau 11 . nagy o és i). 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. • camelCase függvények. • UneExceptionError a kivételek. O és I(kis l. A kifejezés fogalma Definíció A kifejezés egy kódrész.

Konstansok.666666666666667 // 3 # 6 ( e g e s z o s z t a s ) 12 c Hungarian Translation Daróczy Péter © .5∗ id2   © 2.1. s q r t ( i d 2 ) else : id4 = id1 − 5. 2. A kifejezések lehetnek egyszerűek ill.4. Az int típus Az int típus méretét csak a gép memóriája korlátozza. összetettek.  Az egész konstansok alapértelmezetten decimális számok. azonosítók és operátorok kombinációjából állnak.3 i d 2 = maFonction ( i d 1 ) i f id2 > 0: i d 3 = math . 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.  Két példa egyszerű és egy példa összetett kifejezésre : id1 = 15. 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.4.

hogy : – ha az kifejezés első tagjának az értéke False. – 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. akkor a False and kifejezés2 értéke False lesz. • Összehasonlító operátorok :    2 > 8 # False 2 <= 8 < 15 # True © • Logikai operátorok (shortcut-elv) : not.4.2. 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. Az and és az or igazságtábláját megfigyelve azt vesszük észre. True. or és and.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. 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.  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 . akkor a True or kifejezés2 értéke True lesz.

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

r e a l ) # 9 .9272952180016122) p r i n t ( cmath . 0. imag ) # 5 . stb. . amit két lebegőpontos szám alkot. A complex típus • A komplex számok descartesi jelöléssel vannak felírva. A valóságban a Python nem a változó fogalmát.Bevezetés a Python 3-ba p r i n t ( math . phase (−1 + 0 j ) ) # 3.6. p o l a r ( 3 + 4 j ) ) # ( 5 . f a c t o r i a l ( 9 ) ) # 362880 p r i n t ( math . r e c t ( 1 . 2. Meg fogjuk látni„ hogy a helyzet megváltozik a módosítható objektumok esetében . c Robert Cordeau 15 . 0   © 2.707106781187 j )   © 2.2. 0 . Amíg az objektum nem módosítható (mint az egészek.5.). l o g ( 1 0 2 4 . hanem inkább az objektumhivatkozás fogalmát kínálja fel.707106781187+0.6. 0 p r i n t ((9+5 j ) . változókra van szükségünk az adatok tárolására. 0 p r i n t ( ( abs (3+4 j ) ) ) # 5 . float-ok.. 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 . p i / 4 ) ) # (0.. cmath .1.14159265359 p r i n t ( cmath . addig nincs említést érdemlő különbség. 2 ) ) # 1 0 . • 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 ) . hogy vannak adattípusaink.

2.6. p i c = b ∗∗ a © Egy változó értéke. 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. ami felhasználható egy kifejezésben.3. 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). ami szükségessé teszi a jobboldali tagnak megfelelő érték kiszámítását mielőtt azt a baloldali taghoz rendelnénk. 2. l o g ( math . 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. 1 2 ) − 2∗math . ami egy memóriacímen van.    a = 2 # a z t mondjuk : a e r t e k u l kapja 2−t b = 7 .Bevezetés a Python 3-ba Definíció A változó egy értékhez kapcsolt azonosító. Egy objektum hivatkozás. Egy értékadás során a baloldali tag megkapja a jobboldali tagot. e / 4 5 . 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. 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 . 2 ∗ math . 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

stop]]) : megvizsgálják. nagybetűkből. upper(). csak számkaraktereket vagy space-eket tartalmaznak    print ( " 3 chaises basses " . isalpha(). csak betű-. Új karakterláncot adó metódusok • lower(). 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 " . c a p i t a l i z e ( ) ) # Chaise b a s s e p r i n t ( s . start[. i s t i t l e ( ) ) # True © • isalnum(). stop]]) és endswith(suffix[. capitalize() és swapcase() : rendre egy kisbetúkből. 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 . 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 " . i s d i g i t ( ) ) # True © • startswith(prefix[. isalpha ( ) ) # False p r i n t ( " 54762 " . start[. upper ( ) ) # CHAISE BASSE p r i n t ( s .5.Bevezetés a Python 3-ba    p r i n t ( " cHAise basSe " .7. lower ( ) ) # chaise basse p r i n t ( s . 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 . egy nagybetűvel kezdődő kisbetűs. endswith ( ’ a ra ’ ) ) # F a l s e © 2. isdigit() és isspace() : értéke True ha ch csak alfanumerikus. s t a r t s w i t h ( ’ ab ’ ) ) # True p r i n t ( " abracadabra " .

de egy hibát (exception) generálnak ha nem találják a sub karakterláncot :    print ( s . ’− ’ ) ) # −−−−cHAise basSe−−−− p r i n t ( s . ’@ ’ ) ) # @@@@@@@@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 . maxsplit]) : maxsplit részre darabolja fel a karakterláncot. a karakterlánc darabolását a vége felől kezdi el. ljust(width[.    p r i n t ( s . amire a metódust alkalmazzuk : c Robert Cordeau 21 . s t r i p ( ’ c e ’ ) ) # HAise basS © • find(sub[. azaz megadja a legnagyobb indexértéket. A splitlines() a karakterláncot a sortöréseknél darabolja fel. hogy közbe iktatja azt a stringet.end] -en belül megtalálható. fillchar]) és rjust(width[. ’ basSe ’ ] © • join(seq) : úgy konkatenálja a seq konténer karakterláncait. fillchar]). 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 . z f i l l ( 2 0 ) ) # 00000000 cHAise basSe © • strip([chars]). 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. Ha nem találja a sub karakterláncot. s p l i t ( ) ) # [ ’ cHAise ’ . count]]) : a new-val helyettesíti az old count számú (alapértelmezetten összes) példányát :    p r i n t ( s . akkor az értéke -1.Bevezetés a Python 3-ba • center(width[. start[. 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. az elejéről vagy a végéről :    p r i n t ( s . fillchar]) : rendre egy középre. ’ ha ’ ) ) # c h a i s e basSe © • split(seps[. r e p l a c e ( ’HA ’ . r j u s t ( 2 0 . new[. Az rfind() ugyanezt teszi a karakterlánc végétől kezdve. index() és rindex() ugyanezt teszik. aminél a sub karakterlánc az s[start. find ( ’ se b ’ )) # 4 © • replace(old[. rsplit() ugyanezt teszi.

7. Részkarakterláncok kivágása A [ ] operátor 2 vagy 3 .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 .: karakterrel elválasztott . amiben az index egy előjeles egészszám. Karakterláncok : egyszerű indexelés Egy karakterlánc indexeléséhez a [ ] operátort használjuk. ábra. 2− t o l 2− i g )   © 22 c Hungarian Translation Daróczy Péter . 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.7. j o i n ( [ ’ cHAise ’ .7. Egy karakterlánc indexelése 2. ’ basSe ’ ] ) ) # cHAise ∗∗ basSe © 2.Bevezetés a Python 3-ba    p r i n t ( " ∗∗ " . 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 .6.3. a 4 nem) s [ − 2 : ] # ’ X ’ ( a −2 b e l e e r t e n d o .

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 .8. . Egy bináris adat (a [0 . A két típus meglehetősen hasonlít a str típusra és rendelkezik az utóbbi metódusainak többségével. b " a t " ) ) # b ’ 5 Hats 5 Hats ’ Különbséget kell tenni a kódok. Ezek a "C-szerű" adattípusok igen alkalmasak nagy mennyiségű adat tárolására. glyph-ek. upper ( ) ) # b ’ 5 HILLS 5 HILLS ’ p r i n t ( data .4. r e p l a c e ( b " i l l " .255] intervallunba eső) előjel nélküli egészekből áll.. 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.Bevezetés a Python 3-ba 2.. bWord . Ráadásul a python hatékony eszközökkel rendelkezik az ilyen típusú adatok kezeléséhez. . Részkarakterláncok előállítása 2. á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 . A módosítható bytearray típusnak a list típussal közös metódusai vannak. karakterek és byte-ok között (lásd c Robert Cordeau 23 © . 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 . 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 .  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 .

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

ami még nincs lezárva. 3. • egy utasításblokkból. fejezet Az utasításfolyam vezérlése Egy Python szkriptet felülről lefelé sorban végrehajtott utasítások sorozata alkot. Minden utasítássort egy vagy több fizikai sor képez. amit egy kettőspont zár le. 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. hogy kiválaszthassunk vagy megismételhessünk kódrészleteket. melyeket egy backslash \ vagy egy nyitó [ ( { karakterrel folytathatunk.  Példa : somme = 0 . 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 . ami a fejsorhoz képpest be van húzva.Bevezetés a Python 3-ba 3.

format(−c /b ) ) else : p r i n t ( " \ nNincs megold á s . 2 f } " . " ) else : d e l t a = b∗∗2 − 4∗ a∗ c i f delta > 0. (−b+r a c _ d e l t a ) / ( 2 ∗ a ) ) ) 28 c Hungarian Translation Daróczy Péter . 2 f } " . 2 f } \ t x2 = { : . format ((−b−r a c _ d e l t a ) / ( 2 ∗ a ) . 3.0: rac_delta = sqrt ( delta ) p r i n t ( " \nx1 = { : . ami ugyanolyan mértékban van behúzva. ábra.1.Bevezetés a Python 3-ba moyenne = somme / nb_valeurs   © Figyelem Minden utasítás. Ö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 = { : . ugyanahhoz a blokkhoz tartozik.

2.  Választás Választás : if . 2 f } " .[elif] . használhatjuk a (Cből vett) ternális operátort :   x. hogy például megtaláljuk két szám közül a kisebbiket. 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 : " .Bevezetés a Python 3-ba e l i f delta < 0.2. 3.2.2. format(−b /(2∗ a ) ) )   © 3.[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. " ) else : p r i n t ( " \nx = { : . k i s e b b ) # 3 © c Robert Cordeau 29 .1. y = 4. Egy alternatíva tömör szintaxisa  Ahhoz.0: p r i n t ( " \nA gy ök nem v a l ó s .

1. cpt = 257 . 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 . 1 4 f o r i i n range ( 5 ) : p r i n t ( i . 3. 1 4 ] : p r i n t ( x . " \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 . 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 . Ciklusok Programhurok : while Egy programrész ismétlése :    x . " ) 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 . . end=" " ) # 2 a 3 . end=" " ) # c i a o for x in [2 . 3 .2. ’a ’ .3. 1 0 ] : ’ ) ) © 3. Bejárás : for Egy iterálható objektum bejárása (minden konténer amit elemről elemre akár sorban. 0 p r i n t ( " l o g 2 ( " .Bevezetés a Python 3-ba 3. end=" " ) # 0 1 2 3 4 © 30 c Hungarian Translation Daróczy Péter . x .3. .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. 6 . 6 . 7 . 9 .Bevezetés a Python 3-ba 3. 2 . 1 1 ) : # 1 .4. 10 i f x == 5 : continue p r i n t ( x . a ciklus fejsorára :  f o r x i n range ( 1 . 4 . 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. 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 . "−r e " )   © 3. 3 . 5 . 8 . magyarul megszakítás nélkül : c Robert Cordeau 31 .else A while és a for ciklusnak lehet egy else része. 2 . 9 . x .4. 10 i f x == 5 : break p r i n t ( x . 7 .4.4.2.3. 3. 8 . 4 . ami csak akkor hajtódik végre. Ciklusok teljes szintaxisa while .1. 1 1 ) : # 1 . 3 . 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 =" . 5 . ha a ciklus szabályszerűen fejeződik be.

amit akkor kell végrehajtani. Amikor egy hiba lép fel.4. x ) ) break # i t t van a megszak í t á s ! x −= 1 else : p r i n t ( y . " pr í mszám" ) for .4. amikor minden rendben megy.hiba esetén végrehajtandó . to_save )   © 3. másrészt egy vagy több .utasítássorozatot. hogy felkészítsük az alkalmazásokat szokatlan körülmények között történő működésre. " n i n c s benne " .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 {} " . Kivételek (exceptions) Annak érdekében. 7 . 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. 9 . sequence . akkor egy exception objektum halad át a kivétel 32 c Hungarian Translation Daróczy Péter . 5 . "−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 =" .else ©  Egy példa lista bejárásával : sequence = [ 2 . format ( y . 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 .

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

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 . 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 . 1]− ben " ) © Megjegyzés Egy except blokkban az érték nélküli raise lehetővé teszi. . hogy ne blokkoljuk a kivételt. Kontextuskezelő : Ez a szintaxis azzal egyszerűsíti a kódot. a kivétel továbbterjedését. 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 . hogy bizonyos műveletek végre lesznek hajtva az adott utasításblokk előtt és után. hogy biztosítja.

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

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

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

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

78 . • Hasznosak konstansok definiálásakor. 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 . 0 ] ]   © 4. 2 . " 78 " . 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 . Figyelem Mint a karakterláncok. [0 . 3 ] ) © • A tuple-ket ugyanúgy használjuk mint a listákat. 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. [0 .4. 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 .    mon_tuple = ( ’ a ’ . 0] . 0] . a tuple-k sem módosíthatók ! c Robert Cordeau 39 . [ 1 .Bevezetés a Python 3-ba A Pythonra nagyon jellemző felhasználás :  v a l e u r s _ s = [ " 12 " .

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

ábra. 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. 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. 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.

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

6)} p r i n t ( d3 ) # { 2 : 4 . 1 7 6 ) ] ) p r i n t ( d5 ) # { ’ name ’ : 3 . ’ i r v ’ : 4 1 2 7 . ’ s i z e ’ : 176} # kiterjesztett defin í ci ó d2 = { " name " : 3 . keys ( ) ) ) # [ ’ guido ’ . 4127] p r i n t ( ’ guido ’ i n t e l . 4 : 1 6 . 3 ) . ’ 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) p r i n t ( d4 ) # { ’ s i z e ’ : 1 7 6 . ’ i r v ’ . ’ 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 . ’ j a c k ’ : 4 0 9 8 .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 . 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. ’ j a c k ’ not i n t e l ) # True F a l s e © c Robert Cordeau 43 . values ( ) ) ) # [4098 . ( " s i z e " . ’ 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 . ’ guido ’ ] p r i n t ( s o r t e d ( t e l . 4127 . ’ j a c k ’ ] p r i n t ( sorted ( t e l . keys ( ) ) ) # [ ’ j a c k ’ . 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 ’ : 4127} p r i n t ( l i s t ( t e l . ’ i r v ’ . " s i z e " : 176} p r i n t ( d2 ) # { ’ name ’ : 3 . ’ 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 " .

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

"w" ) s = ’ t o t o \n ’ f . Az opcionális encoding biztosítja a byte és str típusok közötti átalakítást.Bevezetés a Python 3-ba 4.. 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 . t x t " . close () © c Robert Cordeau 45 . f i l e =f 2 ) f2 .8. 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 ’ . ’b ’ . "w" .. ’ascii’ . ’ c ’ ] f . "w" ) p r i n t ( " abcd " . 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 " . e n c o d i n g= ’ u t f −8 ’ ) # í r á s f 3 = open ( " monFichier_3 " .    A lezárásra egyetlen metódus van: © f1 . ’latin1’. e n c o d i n g= ’ u t f −8 ’ ) # o l v a s á s f 2 = open ( " monFichier_2 " . 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).2. " a " . t x t " . " r " . addig a tartalma nincs kimentve a diszkre. 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 . close ()  Soros kiírás Metódusok :   f = open ( " t r u c . 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.

" . 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 ead ( 3 ) # l e g f e l j e b b n byte−o t −−> s t r i n g s = f . v in knights . " 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 . # What i s your q u e s t ? I t i s t h e Holy G r a i l . " t o e " ] ) : p r i n t ( i . v .Bevezetés a Python 3-ba Soros olvasás Metódusok :    f = open ( " t r u c . 46 c Hungarian Translation Daróczy Péter © . v i n enumerate ( [ " t i c " . format ( 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 . " th e Holy G r a i l " . t x t " . close () © 4. 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 . end=" " .9. a i n z i p ( q u e s t i o n . " b l u e " ] f o r q . " q u e s t " . 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 " .  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 " . Iterrálás a konténereken A következő technikák klaszikusak és igen hasznosak. items ( ) : print (k . # 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 . answers ) : p r i n t ( " What i s your {}? I t i s { } . " f a v o r i t e c o l o r " ] answers = [ " L a n c e l o t " . 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 . " r " ) s = f . " t a c " . 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 .

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 . " un " . d=a−b ) ) # The s t o r y o f 8 and 2 © c Robert Cordeau 47 . 3 p r i n t ( " The s t o r y o f { c } and {d} " . format ( " z é r o " .10. " 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 ( " {} " . " a p p l e " . 1 0 . Formázott kiíratás A format() metódussal mindenféle kiíratás vezérelhető. " orange " . b = 5.  Egyszerű helyettesítések :    p r i n t ( " {} {} {} " . " deux " ) ) # deux z é r o un p r i n t ( " Je m’ a p p e l l e {} " . 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 " . format ( " z é r o " . format ( "−" ∗ 1 0 ) ) # −−−−−−−−−− Helyettesítések nevesített mezőkkel : ©   a. " banana " . 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 ( c=a+b . " deux " ) ) # z é r o un deux p r i n t ( " {2} {0} {1} " . end=" " ) # 9 7 5 3 1 ©  Egy olyan szekvencia bejárása. 2 ) ) : p r i n t ( i . " orange " . end=" " ) # a p p l e banana orange pear   © 4. " un " .

p i } . 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 " . 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} " . 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 . format ( n . format ( 1 7 9 ) ) # 179 10110011 263 b3 n = 100 pi = 3. 1 4 1 5 9 2 6 5 3 5 9 p r i n t ( " {0} .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 n v e l o p p e ’ . e p s i l o n } " . format ( n . f l o a t _ i n f o . 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 ] } " . e t {} " . ’ buvard ’ ] p r i n t ( " Nous avons de l ’ { 0 [ 3 ] } e t du { 0 [ 0 ] } en s t o c k \n " . ’ chemise ’ . e t 3 .1415926535897931 p r i n t ( " {} . ’ e n c r e ’ . p i ) ) # 1 0 0 . format ( math . e p s i l o n = { . 1 4 1 5 9 2 6 5 3 5 9 p r i n t ( " {} . 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} " . e t {} " . p i = { . 1 4 1 5 9 2 6 5 3 5 9 . format ( n . 3 . s y s ) ) # math . e t 3 . str() és repr() : ©    >>> p r i n t ( " { 0 ! s } { 0 ! r } " . p i = 3 . e p s i l o n = 2 . p i ) ) # 1 0 0 . p i ) ) # 1 0 0 . format ( d i c t ( name= ’ Fred ’ ) ) ) # My name i s Fred d = d i c t ( animal = ’ é l é phant ’ . 2 2 0 4 4 6 0 4 9 2 5 e −16 Szövegkonverziók.

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 ) ) p r i n t ( " [ { : − ^ 2 5 } ] " . 4 e } " . format (m) ) p r i n t ( " {:#=12} " . . 1 4 1 6 e+00 p r i n t ( " { : g} " . format ( p i ) ) # 3 . . format ( s ) ) p r i n t ( " [ { : ^ 2 5 } ] " . . 2 f } " . 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 : { : . format ( n . format ( s [ : l o n g ] ) ) m = 123456789 p r i n t ( " {:0=12} " . format ( s ) ) l o n g = 12 p r i n t ( " [ { } ] " . format ( p i ) ) # 3 . 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 (m) ) # [ The sword o f ] # 000123456789 # ###123456789 © c Robert Cordeau 49 . .Bevezetés a Python 3-ba p r i n t ( " { : . . format ( s ) ) p r i n t ( " [ { : . ]    ©   s = " The sword o f t r u t h " p r i n t ( " [ { } ] " . format ( s ) ) p r i n t ( " [ { : 2 5 } ] " . < 2 5 } ] " . . format ( s ) ) p r i n t ( " [ { : > 2 5 } ] " .

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

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

• Kiemelik az adatokat és az eredményeket : a függvény bemenetei és kimenetei. Argumentumátadás hozzárendeléssel 52 c Hungarian Translation Daróczy Péter .2.2.2.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. • Lehetővé teszik a kód ismételt felhasználását : az importmechanizmus. 5.1. 5. ábra. 5. ami a script végrehajtása során ismétlődik. • Egy összetett feladatot egyszerűbb feladatokra bontják : az alkalmazás tervezése. A megfeleltetés hozzárendeléssel történik. 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.

begin . Ebben az esetben a függvény visszatérési értéke impliciten None : d e f t a b l e ( base .2.3.Bevezetés a Python 3-ba 5. ’= ’ .2. amit gyakran eljárásnak (procedure) nevezünk.  Egy vagy több paraméter.2. 0 ∗ p i ∗ cube ( r ) / 3 . visszatérési érték nincs  return utasítás nélküli példa. 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 ∗ math . 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 . " " " n = begin w h i l e n <= end : p r i n t ( n . 2 . 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 =" . p i ∗ r ∗∗2 v o l = s u r f ∗ r /3 return surf . 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 . ’ x ’ . end=" " ) n += 1   # Pé l d a a f üggv é nyh í vá s r a : t a b l e ( 7 . end ) : " " " Ki í r j a a <base> s z o r z ó t á b l á t <begin> −t ö l <end> −i g . base . Egy vagy több paraméter. vol c Robert Cordeau 53 . n ∗ base .

00) = −260. data =8. 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   © 5. " . 10 ) # f ( −5. Szü ks é g van egy ( lowerBound < upperBound ) é s ( s t e p s > 0) é r t é kre " " " h . 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 . a t é r f o g a t a { : g} " . 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} . # f (5. 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 .00 # . p a r i t y ) p r i n t ( data . speed .00 # f ( −4.. 5 . p a r i t y=" p a i r e " . " 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 . s t o p s =1): p r i n t ( " I n i . " a d a t b i t " . v ) ) © 5.00) = 250. " b i t s / s −r e " . x = ( upperBound − lowerBound ) / f l o a t ( s t e p s ) .Bevezetés a Python 3-ba   # Fö program radius = f l o a t ( input ( ’ radius : ’ )) s . format ( s . lowerBound w h i l e x <= upperBound : y = function (x) p r i n t ( " f ( { : . Paraméterek alapértelmezett értékkel  Az alapértelmezetten nem-módosítható értékeket előszeretettel használják. 2 f } " .5. " p a r i t á s : " .. upperBound . s t o p s . lowerBound .4.00) = −137.2. 2 f }) = { : .  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 .2. −5. format ( x .

c ) : r e t u r n a+b+c # Pé l d a f üggv é nyh í vá s r a : elements = (2 . 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 . " p a i r e " .2. 2400 b i t s / s −r e p a r i t á s : p a i r e # 7 adatbit 2 stopbit   © 5. 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 . A függvényhíváskor egy tuple-t is átadhatunk paraméterként (valójában egy szekvenciát). a tuple az utolsó pozícióban van. b .Bevezetés a Python 3-ba initPort () # I n i . 7 . 4 . 6) p r i n t ( somme(∗ e l e m e n t s ) ) # 12   ©    © c Robert Cordeau 55 . " " " 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) # I n i . ami egy "klasszikus" függvény paraméterlistává alakul át : d e f somme ( a .6. 4 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 . 1 3 ) ) # 78 Megjegyzés : Ha a függvénynek több argumentuma van.

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

Bevezetés a Python 3-ba 5. ábra. 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 .3.

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 . x . 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 .

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

1. cube ( 9 ) ) # cube de 9 : 729 A modul használata.1. " " " 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 : " . parancs csak a modul obj1.2.py egy modul... obj2. 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. 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 . Figyeljük meg az "autot-test" használatát.py file-ban lévő függvényt : © 60 c Hungarian Translation Daróczy Péter .. s i n ..Bevezetés a Python 3-ba 6. • saját modulok. Importáljuk a cube_m.1. l o g © A modulok importálása a következő sorrendben tanácsolt : • a standard könyvtár moduljai. objektumait importálja :    from math import pi . obj2. 6. • harmadik fél könyvtári moduljai . Példák  Az "autot-test" fogalma A cube_m.

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

Bevezetés a Python 3-ba 6.2. Standard "diff" vagy HTML a kimenetük.1. 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 . hogy a Pythont "elemekkel együt" (batteries included) adják. A difflib modul segítségével hasonlíthatunk össze szekvenciákat. A textwrap modult szövegformázásra használják : minden egyes sor hosszát. a behúzást szabályozza. digits. mint az ascii_lowercase. amik választ adnak a legváltozatosabb aktuális problémákra. olyan kiterjedt a standard könyvtára : több mint 200 csomagból és modulból áll. Néhány hasznos funkció felületes bemutatása : Karakterláncok kezelése A string modul olyan konstansokat ad meg. 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 . Példa : az io. s p l i t ( ) [ 0 ] ) f a j l = open ( " data . dat " ) scanner ( f a j l .. amivel a reguláris kifejezéseket lehet kezelni. 6.2. Standard könyvtár A standard könyvtár Azt szokták mondani. és a Formatter osztály. amiből karakterláncok formázására specializált alosztályokat lehet leszármaztatni. Végül nem feledkezhetünk meg a re modulról. A struct modul segítségével számokat. elsoSzo ) 62 c Hungarian Translation Daróczy Péter  . 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.StringIO Ez a modul a fileobjektumok interface-ével kompatibilis objektumokat szolgáltat..

e l s o S z o ) © A parancssor kezelése Két modullal lehetséges a parancssort kezelni : a getopt. py −h © illetve python 6_025 . 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 . parse_args ( ) A parancssorok : © python 6_025 . py [ o p t i o n s ] Options : −h . "−−q u i e t " . −− f i l e =FILE w r i t e r e p o r t t o FILE −q . C-ből örökölt régebbi modullal és az újabb. add_option ( "−f " . args ) = parser . metavar=" FILE " ) p a r s e r . d e f a u l t=True . 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 . 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 . "−− f i l e " . py −−h e l p ©    ugyanazt a dokumentációt állítják elő :   Usage : 6\_025 . add_option ( "−q " . d e s t=" v e r b o s e " . d e s t=" f i l e n a m e " .Bevezetés a Python 3-ba   import i o c h a i n e = i o . 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 " . −−h e l p show t h i s h e l p message and e x i t −f FILE .

g e t c o n t e x t ( ) .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 . prec = 6 p r i n t ( d . 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 .és dátumkezelő függvényeket : import c a l e n d a r . −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 ( ’ −. time és datetime modulok tartalmazzák az aktuális idő. datetime . Az idő és a dátumok kezelése A calendar. s t r f t i m e ( "%A. Decimal ( 1 ) / d . de annál gyorsabb . d a t e t i m e ( 1 9 6 9 . date . 2 0 .mivel a tartalma homogén típust kínál a felhasználónak. 64 c Hungarian Translation Daróczy Péter    © .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 . time moon_apollo11 = d a t e t i m e . 7 . Decimal ( 1 ) / d . 4 0) p r i n t ( moon_apollo11 ) p r i n t ( time . getcontext ( ) . 1 4 2 8 5 7 d . 09−Oct −2009 Algoritmusok és a collection adattípusok A bisect modul rendezett szekvenciák keresőfüggvényeit tartalmazza. 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 . p r e c = 18 p r i n t ( d . Decimal ( 7 ) ) # 0 . %d−%b−% ) ) Y" # Friday . weekday ( ) != c a l e n d a r . 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.125 ’ ) ) # −1/8 p r i n t ( F r a c t i o n ( ’ 7e−6 ’ ) ) # 7/1000000 d . today ( ) egy_nap = d a t e t i m e . a s c t i m e ( time . 2 0 . Az array modul egy a listára hasonlító. 1 7 . Decimal ( 7 ) ) # 0 .

append ( v ) print (d . { } ] " . z ) ) # point : [ 1 . 3) . ( ’b ’ . 2 . p o i n t . y . format ( p o i n t . {} . r a n d i n t ( 2 . 3 . 1) . v in s : d [ k ] . ami prioritási sor algoritmusként is ismert. 5 . [ 1 ] ) . 1)] d = defaultdict ( l i s t ) for k . namedtuple ( " Point " . 9 ) )    p r i n t ( heap ) # [ 2 . 2) . 4) . [ 2 . melyek mindegyik szülő csomópontja kisebb értékű mint bármelyik gyermekcsomópontjuké. random .3 . items ( ) ) # dict_items ( [ ( ’ y ’ . 4 . A 0 index mindíg a legkisebb index : import heapq import random heap = [ ] f o r i i n range ( 1 0 ) : heapq . 4 ) # ki í ratjuk : p r i n t ( " p o i n t : [ { } . ( ’b ’ . 2 . 3 . ( ’ r ’ . A heap-ek bináris fák. 2 . 2. ( ’ b ’ . " 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 . 3 ] ) . 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 . 7 . 3 . 4 ] ©  Természetesen lehetőség van egymásba ágyazott nevesített tuple-ekre. 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 ’ . 8 . 6 . 3 . 4 ] ) ] ) s = ’ mississippi ’ d = defaultdict ( int ) c Robert Cordeau 65 . p o i n t . implementációját tartalmazza. 6 . 7 . x .Bevezetés a Python 3-ba A heapq modul a heap queue algoritmus. heappush ( heap . [ 1 . ( ’ r ’ . ( ’y ’ .

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

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

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

p r i n t ( b . Visszatérés a névterekre Pontosan úgy.3. 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.1. 7. egy a t t r i b u t u m á t ( f i g y e l e m . x ) # 2 3 . 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 . mint a függvényeknek.Bevezetés a Python 3-ba 7. 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 . ) p r i n t (C. x ) # 2 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. b i s m e r i c l a s s a t t r i b u t u m á t . ami ami a C-re lokális. . y = 44 # ú j objektumattributum b = C( ) # b a C c l a s s egy ú j objektuma p r i n t ( b .3. x = 12 # mó dos í t j a az o b j . . az osztályoknak is saját névterük van : c Robert Cordeau 71 .2. " " " 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. Objektumok létrehozása és attributumai • A class-ok objektumgyárak : mielőtt objektumokat gyártunk. 7.3. x a c l a s s egy a t t r i b u t u m a a . de . . x ) # k i í r 23− a t . .

’ __setattr__ ’ . A moduloknak. Azokat a változókat. ’__doc__ ’ : None} a = C( ) print ( dir (a )) # [ ’ __class__ ’ . • Minden objektumpéldánynak (amit egy osztályból hoztak létre) saját névtere van. # ’ __getattribute__ ’ . ’ __str__ ’ . ’ __delattr__ ’ . majd egy C objektumhoz kapcsolódó attributumok listáját : c l a s s C: x = 20 p r i n t (C. ’ __dict__ ’ . • Minősített nevek : (példa : dimension. ’ __init__ ’ . ’__hash__ ’ . ’ x ’ ]    © 72 c Hungarian Translation Daróczy Péter . • 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. A következő példa kiíratja a C osztályhoz kapcsolódó szótárat. Azokat a változókat. ’ __weakref__ ’ . az osztályoknak és az objektumoknak a névtereket szótárakkal implementálták. # ’ __repr__ ’ .height a hozzárendelés az attributumot az objektum névterében hozza létre vagy módosítja. # ’__module__ ’ . melyektől az objektum függ (de nem keresi a modulokban). ’__doc__ ’ . • Az objektumpéldányok használhatják (de nem módosíthatják) az osztály. ’__new__ ’ . ’__module__ ’ : ’__main__ ’ . Az LGI szabálynak megfelelően keresi a Python őket. __dict__ ) # { ’ __dict__ ’ : <a t t r i b u t e ’ __dict__ ’ o f ’C ’ o b j e c t s >. Egy attributumot a Python az objektumban keres. ’ __reduce_ex__ ’ . # ’ __weakref__ ’ : <a t t r i b u t e ’ # __weakref__ ’ o f ’C ’ o b j e c t s >. • Az osztályok használhatják (de nem módosíthatják) a főszinten definiált változókat.és a főszinten definiált változókat. ’ __reduce__ ’ .Bevezetés a Python 3-ba • Minden osztálynak saját névtere van. osztályattributumoknak nevezzük. amik részei az osztály névterének. majd mindazokban az osztályokban. # ’ x ’ : 2 0 . amik részei ennek a névtérnek példányattributumnak nevezzü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 . amire a metódus alkalmazva lesz. • operátoroverloadingra. Más szóval : a self az ojektumpéldány hivatkozása.5. 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 . print ( s e l f . Metódusok Szintaxis Egy metódust úgy írunk meg. mint az osztály testének egy függvényét. valók. Ezek a metódusok : • a létrehozott objektumpéldányok inicializálására.1. ami elõtt és után két aláhúzáskarakter áll. c Robert Cordeau 73 .Bevezetés a Python 3-ba 7. 7. • a kiíratás módosítására.4. Speciális metódusok A speciális metódusok Ezeknek a metódusoknak elõredefiniált nevük van.. A self azt az objektumot reprezentálja.  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 . z = 42 # objektump é l d ány a t t r i b u t u m p r i n t (C.. 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. • . Az elsõ paraméter kötelezõen a self.5.

.).).. . n ) : s e l f .3.).   © Legyen obj1 és obj2 két objektum. Í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 .. • szekvenciák esetében (__len__.2.5. 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 . n −hez r e n d e l v e p r i n t ( egy_peldany . 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__. hogy egy operátornak az operandusaitól függõen más legyen az értelmezése. __str__. Az inicializátor  Egy objektom inicializálásakor az __init__ metódust automatikusan hívja a Python. ..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 . x ) # 42   © Ez az inicializálás alatt automatikusan hívott eljárás : soha sem tartalmaz return utasítást. • számok esetében (__add__. __iter__.. . __div__. Operátor újradefiniálás (Operátoroverloading)  Az operátoroverloading lehetõvé teszi. 7. 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 .5..Bevezetés a Python 3-ba 7.

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

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

d i s t a n c e _ o r i g i n e ) # ( 3 . y == o t h e r . y d e f __str__ ( s e l f ) : r e t u r n " ( { 0 . o t h e r ) : r e t u r n s e l f . y =0): c Robert Cordeau 77 . amit így egyszerű attributumnak tekint a Python (mivel nincs zárójel) :    i f __name__ == "__main__" : p1 . 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 == o t h e r . x=0. x ! s } . p2 = Point ( ) . 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. format ( s e l f )   © 7.Bevezetés a Python 3-ba @property def distance_origine ( s e l f ) : r e t u r n math . y ) d e f __eq__( s e l f . { 0 . x and s e l f .1. hypot ( s e l f . 4 ) 5 . ábra. r a d i u s . 4 ) p r i n t ( p1 == p2 ) # F a l s e p r i n t ( p2 . p2 . y ! s }) " . s e l f . x . Point ( 3 .

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

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

l . extrem = Point ( x2 . 2 ) . s e l f . 3 . 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 } . A Python implementáció általában a szülőosztály konstruktorát hívája a leszármaztatott osztály konstruktorában. 2 . extrem .8. l e n g t h =30 . akár a super utasítással. " " " d e f __init__ ( s e l f . Ebben az esetben az öröklési mechanizmust alkalmazzuk. o r i g . { : g } ) ] " . 0 ) p r i n t ( s ) # Segment : [ ( 1 . ( 3 . 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 . akár névszerint. s i d e ) s e l f . s e l f . L . px . ( { : g } . Példa  c l a s s Rectangle : d e f __init__ ( s e l f . __init__ ( s i d e . 0 . name = l e n g t h . extrem . s e l f . py . format ( s e l f . py ) ) s = Segment ( 1 . { : g } ) . 4 . s e l f . px . o r i g . width .2. s e l f . 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 ( ) . 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. 0 .Bevezetés a Python 3-ba # a s z a k a s z n a k " van egy " kezd ö pontja . 0 . width =15): s e l f . 4 ) ]   © 7. " 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 .

az objektum és a funkcionális programozásból. meth ) . __doc__) i f __name__ == "__main__" : printApi ( [ ] ) """ L . i n d e x ( value . [ 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 . 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. [ s t a r t . amit a Python támogat : a procedurális.1. 8. 8. append ( o b j e c t ) −− append o b j e c t t o end L .1. fejezet Haladó technikák Ez a fejezet bemutat néhány haladó programozási technikát abból a három paradigmából.1. 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 .Bevezetés a Python 3-ba 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 .

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 ’ . . 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 .a kulcs legyen a menü egy elemének a neve.  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 . cmp( x . elem t ö r ö l v e van " % queue . L . queue )   © 82 c Hungarian Translation Daróczy Péter . s o r t (cmp=None . 1 """   © 8.Bevezetés a Python 3-ba return f i r s t index of value . r e v e r s e=F a l s e ) −− s t a b l e s o r t ∗IN PLACE∗ . y ) −> −1. A példa egy FIFO programozását mutatja be. 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 : . 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 . 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. pop ( 0 ) ) d e f writeQueue ( ) : p r i n t ( " \ nqueue : " . 0 .1. L .a megfelelő érték egy hivatkozás : egy argumentum nélküli eljárás hívása. i n s e r t ( index . 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 .2. 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 . r e v e r s e ( ) −− r e v e r s e ∗IN PLACE∗ L . key=None . 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 . 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 ) . 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 . 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 . s t r i p ( ) [ 0 ] . ’ 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 ) .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 . ’ v ’ : writeQueue . fromQueue . writeQueue # main program −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− writeQueue ( ) CMDs = { ’ a ’ : intoQueue .

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

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

r e s u l t ) # Eredmé n y l i s t a : [ 0 . 5 ) < s y s . 8. r e s u l 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 . 2 . 1 .5. send ( 1 . f l o a t _ i n f o . 2 5 . 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 . 5 . 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 . 2 5 . e p s i l o n : x = g e n e r a t o r . 0 ]   © A generátorkifejezések Szintaxis Egy generátorkifejezésnek majdnem azonos a szintaxisa a szűkített listák szintaxisával. 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. 5 . 1 . 0 . a különbség az. 7 5 .Bevezetés a Python 3-ba p r i n t ( " Eredmé n y l i s t a : " . 0 . hogy egy generátorkifejezés zárójelbe van zárva. 7 5 . append ( x ) p r i n t ( " Eredmé n y l i s t a : " . 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 . 0 . Két alkalmazást különböztetünk meg : 86 c Hungarian Translation Daróczy Péter . 1 . 0 .

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 ( ) # normal other_instance = caseIsSuitableFor ( False ) o t h e r _ i n s t a n 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 . p ( 1 0 0 ) ) p r i n t ( " q ( 1 0 0 ) =" . " " " 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 ) =" . aMethod ( ) # s p e c i a l 87   © c Robert Cordeau . aminek v i s s z a t é r é s i é r t é ke egy o s z t á l y . " " " 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 .

) : 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 . . b ) : return a + b 88 c Hungarian Translation Daróczy Péter . . arg2 . . metódus vagy osztály hívásakor lehetővé teszik előzetes műveletek végrehajtását.Bevezetés a Python 3-ba 8. . b ) : return a + b def autreFonction (a . ) : 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 .1.  Szintaxis Legyen deco() egy dekorátor. . 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 . ∗∗ kwargs ) : p r i n t ( " Dekor á l t f üggv é ny ! " ) r e t u r n f (∗ a rg s . ∗∗ kwargs ) return _interne @unDecorateur d e f uneFonction ( a . .6. amik egy függvény. arg2 . A dekorátorok A Python dekorátorok olyan függvények.

8.x = x self . akkor létrehozhatunk privát c Robert Cordeau 89 . x=0. a Python teljesen objektum orientált nyelv. y =0): self . Ha viszont megelégedünk olyan objektumokkal.2. Ez a magyarázat arra. " ’ y " ’ ) d e f __init__ ( s e l f . 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.Bevezetés a Python 3-ba   # Fö program =============================================== # dekor á t o r haszn á l a t a # p r i n t ( uneFonction ( 1 .  __slots__ és __dict__ Vizsgáljuk meg a következő kódot : c l a s s Point : __slot__ = ( " ’ x " ’ . Ezen osztályok mindegyike egyetlen szülőosztályból származik. melyek attributumaihoz se hozzátenni.2.1. 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 . az object osztályból. sem pedig belőlük elvenni nem akarunk. 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.y = y   © Amikor egy osztályt a __slot__ utasítás alkalmazása nélkül hozunk létre. Technikai objektumok Amint azt az előző fejezetben láttuk. Minden alap.illetve leszármaztatott típus osztályként implementált absztrakt adattípus. ahogyan azt idáig tettük.

Hagyományosan a következő láthatóságokat különböztetjük meg : 90 c Hungarian Translation Daróczy Péter .Bevezetés a Python 3-ba szótár nélküli osztályokat. 6 ) 7   © 8. sem módosítani. ami minden egyes objektumgeneráláskor memóriát fog megtakarítani. deux ) : r e t u r n un + deux >>> a = A( ) >>> c a l l a b l e ( a ) True >>> a ( 1 .2. Az accessor-ok Az egységbezárás problémája Az objektum orientált paradigmában egy objektum állapota privát. Ezt valósítja meg az alábbi példa egy __slot__ osztályattributum definiálásával. amit az attributumok nevéből áll. aminek az értéke egy tuple.3. 8.2. metódusra. A functor  A Pythonban egy függvényobjektum vagy functor egy hivatkozás minden hívható objektumra : függvényre. 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 . 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á. lambda-függvényre.2. más objektumoknak nincs joguk azt sem megnézni. osztályra. un .

""" r e t u r n s e l f . 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. aminek speciális funkciói vannak. Például : _attrib. value ) : """ setter . A Pythonban minden attributum (adatok. A Python semmire sem kötelez. """ s e l f . _x def setx ( s e l f . A property megoldás Az egységbezárás elvét a tulajdonság fogalmával dolgozták ki. Ez a védelem deklaratív marad és nem nyújt abszolút védelmet. metódusok) public ! Mostantól finomíthatunk ezen a tényen. • protected. _x = v a l u e c Robert Cordeau 91 . _ma_propriete = None def getx ( s e l f ) : """ getter . Definíció Egy tulajdonság property egy példány-attributum. Például : __ident. • private.Bevezetés a Python 3-ba • public. 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 . 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. Ezt a megoldást két szintaxis implementálja.

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

x = 10 # s e t t e r print ( test . x . aminek a visszatérési értéke egy kifejezésre van korlátozva. 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 d e l s e l f .3. __doc__) # documentation """ 10 En vagyok az ’ x ’ t u l a j d o n s ág . a lambda direktíva lehetővé teszi egy anonim függvény definiálását. ha az argumentuma nem 1.1. x) # getter p r i n t (C. 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 . Függvénytechnikák A lambda direktíva Funkcionális nyelvek (mint amilyen a Lisp) konstrukciója. """   © 8. _x # auto−t e s t =============================== i f __name__ == ’__main__ ’ : t e s t = C( ) t e s t . 8.3.

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

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

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 . bg= ’ re d ’ .Bevezetés a Python 3-ba 8. pack ( ) MonBouton ( t e x t=" Bouton 2 " ) . pack ( f i l l =tk . r o o t . f g= ’ b l a c k ’ . pack ( ) MonBouton ( t e x t="QUITTER" . 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 . f g= ’ p u r p l e ’ . X.a maradék n-1 paramétert használó . t i t l e ( "PFA ! " ) r o o t . command=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 . Button .függvényobjektumot (vagy példányt) ad. base =2) >>> baseTwo ( ’ 10010 ’ ) 18 A PFA-k nagyon hasznosak parciális widget-modellek előállításánál.3. Parciális függvény-alkalmazások A funkcionális programozás konstrukciója. mainloop ( ) ©    © 96 c Hungarian Translation Daróczy Péter . amiknek gyakran számos paraméterük van. expand=True ) r o o t . q u i t ) .  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 .3.

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

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

Bevezetés a Python 3-ba 9.2.2.1. Widget-ek pozícionálása A tkinter-nek három pozíciókezelője van : c Robert Cordeau 99 . A tkinter widget-ek Definíció A widget szó. ami a window és a gadget szavak összevonásával keletkezett. táblázat: A tkinter főbb widget-jei 9.3.egymást kizáró .á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 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 .2. egy könyvtár grafikus alapelemeit jelöli.

A 100 c Hungarian Translation Daróczy Péter . 2. 9. Ezen zónák mindegyikét egy-egy Frame() objektummal kódoltuk.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. 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.3. az alsó zónát a fölötte lévő listát kezelő gombok képezik.3 ábra mutatja. Ez a metódus követi a grafikus tervezést és feltölti a frame-ek mindegyikét. létrehozza a root alapablakot és hívja a makeWidgets() metódust. 9.1. amit a w igényel. a kiíratásra szánt felső zónát. amit az adatokat tároló file adataival feltölt (ha a file nem létezik. Grafikus tervezés A grafikus tervezés segíteni fog a jó widgetek kiválasztásánál. 3. egy listát. Az alkalmazás megjelenését a 9. egy menü nélküli példa Egy telefonkönyvet kezelő scriptet fogunk írni. Első lépésként következzen a grafikus interface kódja.3. akkor létrehozza azt). Két példa tkPhone. Először is természetes dolog három zónát megkülönböztetni : 1. Az inicializátor létrehoz egy phoneList attributumot. a középső zóna egy névsor szerint rendezett lista.

3. Mint minden jó modul esetében. tkPhone callback-ek üresek (a minimális pass utasítást tartalmazzák). append ( l i n e [ : −1]. 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 ’ .Bevezetés a Python 3-ba (a) A grafikus interface (b) A grafikus terv 9. " " " d e f __init__ ( s e l f . ábra. p h o n e L i s t . fic = fic # f = open ( f i c ) try : f = open ( f i c ) for l i n e in f : s e l f . phoneList = [ ] self . 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 . 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 .

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

r o o t . pack ( s i d e=tk . supprimer ) b3 = tk . command= s e l f . i n s e r t ( tk . pady=2) b3 . Frame ( s e l f . bind ( "<Double−Button−1>" . pack ( pady=3) b1 = tk . phoneList : s e l f . pack ( s i d e=tk . t e x t=" A j o u t e r " .END. pack ( s i d e=tk . LEFT. s e l e c t . 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 .Bevezetés a Python 3-ba s e l f . 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 . a f f i c h e r ) b1 . t e x t=" Supprimer " . pack ( s i d e=tk . LEFT. command= s e l f . pady=2) b2 . f i l l =tk .BOTH. r e l i e f =tk . i [ 0 ] ) s e l f . LEFT. Button ( frameB . s e l e c t . lambda e v e n t : s e l f . LEFT. a f f i c h e r ( e v e n t ) ) # frame " boutons " ( en bas ) frameB = tk . t x t ’ ) # i n s t a n c i e l ’IHM   © c Robert Cordeau 103 . t e x t=" A f f i c h e r " .GROOVE. Button ( frameB . bd=3) frameB . 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 . Button ( frameB . expand =1. a j o u t e r ) b2 = tk . s e l e c t . command= s e l f .

hogy az előbbi örökölje az utóbbi minden jellemzőjét. g e t ( ) a j o u t [ 1 ] = s e l f . f o c u s ( ) 104 c Hungarian Translation Daróczy Péter . f i c = ’ phones . nameEnt . # −∗− 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 . clear () s e l f . phoneList : s e l f .  Végül a script létrehoz egy alkalmazásobjektumot. __init__ ( s e l f . • újra kell definiálni a callback-eket. p h o n e L i s t .END) f o r i in s e l f . f i c ) def ajouter ( s e l f ) : # maj de l a l i s t e ajout = [ " " . phoneList . g e t ( ) i f ( a j o u t [ 0 ] == " " ) o r ( a j o u t [ 1 ] == " " ) : return s e l f . • létrehozzunk egy leszármaztatott Allo osztályt. " " " d e f __init__ ( s e l f . • ennek az inicializátora azért hívja a szülőosztály inicializátorát. i [ 0 ] ) s e l f .END. d e l e t e ( 0 . s o r t () # maj de l a l i s t e b o x s e l f . tk . nameEnt . s e l e c t . " " ] a j o u t [ 0 ] = s e l f . " Allo_IHM . s e l e c t . t x t ’ ) : " C o n s t r u c t e u r de l ’IHM .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. i n s e r t ( tk . phoneEnt . append ( a j o u t ) 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 . w r i t e ( "%s∗%s \n " % ( a j o u t [ 0 ] . " " ] r e t r a i t [ 0 ] . phoneList : s e l f . i n s e r t ( 0 . w r i t e ( "%s∗%s \n " % ( i [ 0 ] .END. 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 . i [ 0 ] ) # maj du f i c h i e r f = open ( s e l f . phone = s e l f . d e l e t e ( 0 . i n s e r t ( tk . r e t r a i t [ 1 ] = s e l f . close () d e f a f f i c h e r ( s e l f . s e l e c t . tk .Bevezetés a Python 3-ba # maj du f i c h i e r f = open ( s e l f . s e l e c t . name ) s e l f . nameEnt . phoneList : f . e v e n t=None ) : s e l f . curselection ( ) [ 0 ] ) ] s e l f . i n s e r t ( 0 . f i c . i [ 1 ] ) ) f . f i c . d e l e t e ( 0 . p h o n e L i s t . clear () name . s e l e c t . d e l e t e ( 0 . p h o n e L i s t [ i n t ( s e l f .END) s e l f . "w" ) f o r i in s e l f . nameEnt . tk . close () d e f supprimer ( s e l f ) : s e l f . " a " ) f . phoneEnt . tk . s e l e c t .END) f o r i in s e l f . curselection ( ) [ 0 ] ) ] s e l f . phoneList [ i n t ( s e l f . phoneEnt . a j o u t [ 1 ] ) ) f . clear () # maj de l a l i s t e retrait = [ " " .

2.3.4 ábrát).Bevezetés a Python 3-ba 9. 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. 106 c Hungarian Translation Daróczy Péter .egy Pythonban írt interpreter/editor 1 .. hogy ebben a jegyzetben tárgyaljuk . ábra. IDLE 1 2 Egyes linuxdisztribúciókban az IDLE egy különálló csomag. A forráskódja hozzáférhető és és önmagában egy komplett tkinter tanfolyamot képez 2 ..4. IDLE. De túlságosan terjedelmes ahhoz. (a) Az IDLE interpreter (b) Az IDLE editor 9.

A legnépszerűbb "Agile Development" módszerek közé tartozik az Extreme Programming (XP).valamennyien iterrarívak és inkrementálisak . hogy képessé tegyék az embereket az együttműködésre és a gyors és hatékony döntéshozatalra.Bevezetés a Python 3-ba 10.a folyamatos visszacsatolás. azonban vannak közös jellemzőik : . Nagyon rövid iterrációkkal építkeznek. . Scrum.. stb. Bár az említett módszerek egyediek a speciális probléma megközelítésük tekintetében. fejezet Az agile development fogalma Az "Agile Development" gyűjtőfogalom. ami fokozatos finomítást tesz lehetővé Mindannyian folyamatos tervezést. integrációt és a folyamatos projektilletve a szoftverfejlesztés egyéb formáit alkalmazzák. 2001-ben 17 neves szoftver fejlesztő alapította meg az "Agile Allience"-t és fogalmazta meg a "Manifesto for Agile Software Development"-et. Mindannyian arra koncentrálnak. egyszerre csak egy-két funkciót implementálnak. 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 . Az iterrációs ciklus végén egy működőképes programverzió a kimenet. Crystal. ami számos iterrarív és inkrementális szoftverfejlesztési stílust takar.. tesztelést.

108 c Hungarian Translation Daróczy Péter . most viszont csak a dokumentálás és a tesztek problémájára fogunk szorítkozni. 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. aktív teamektől származnak a legjobb megoldások (szerkezetekre. 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ő.Bevezetés a Python 3-ba • Motivált szakembereket gyűjts a projekt köré. követelményekre.

hogy ez a jellemző úgy viselkedik-e ahogyan azt terveztük. A tesztesetek egymástól függetlenek. a teszteket a programozók írják. ahogyan a végfelhasználó tenné. Például : egy calculus. hogy egy program túljut a kisméretű script stádiumon.1. ami a csomag egy tests folderében van. Definíció Egy teszt abból áll. • guitest : GTK alkalmazásokat tesztel. Tesztvezérelt fejlesztésről (TDD = Test Driven Developpement) beszélünk. objektum orientált nyelv esetén egy metódus). ezért ezek a programre nézve specifikusak és nehezebb őket kidolgozni. elkerülhetetlenül megjelenik a hibák és a tesztek problémája. 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.Bevezetés a Python 3-ba 10.1. hogy a dokumentációban megadott jellemzőt egy ’use case’nek megfelelő forgatókönyv szerint hívunk és megvizsgáljuk.py nevű tesztmodulja. mint amiket a felhasználók használnak.py nevű modulnak lesz egy tests/test_calculus. Ezeknek a teszteknek ugyanazokon az interface-eken keresztül kell történni. A tesztek Attól kezdve. 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. Funkcionális tesztek : a teljes alkalmazást egy "fekete doboznak" veszik és úgy manipulálják. Megállapodás szerint minden modul kapcsolatban van a unit test modulok egyikével. 10.1. 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. • FunkLoad : egy benchmark és riportkészítő rendszer c Robert Cordeau 109 .

Bevezetés a Python 3-ba 10. 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 . a TestCase-ből leszármaztatott osztályban implementált és test_ prefix-szel ellátott metódust unittesztnek tekint. python .py néven elmentve. Minden. ’ ’ ’ 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 .az SUnit-ból erednek.2. 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 . b . TestCase ) : ’ ’ ’ Main c l a s s f o r add t e s t i n g . JSUnit (Javascript). d e f tearDown ( s e l f ) : 1 A példa forrása : http://www.thelinuxdaily. Ezek mind egy eredetileg a SmallTalk nyelv számára kifejlesztett tool-ból . 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 . a konzolról python unittest. A tesztvezérelt fejlesztés Az unittest modul szolgáltatja a PyUnit tool-t. Egy egyszerű példa.py -ként hajtathatjuk végre. 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 . A PyUnit a TestCase alaposztályt kínálja fel a felhasználónak.com/2011/11/getting-started-with-python-unit-testing-pyunit/  110 c Hungarian Translation Daróczy Péter .Net). For more i n f o r m a t i o n and documentation .1. o rg / l i b r a r y / u n i t t e s t . 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 . NUnit (. amit más nyelvekben is megtalálhatunk : JUnit (Java).

a s s e r t E q u a l ( add ( −12 . 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 .23) . 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 .23) . 2 3 ) . a s s e r t E q u a l ( add ( 1 . 11 ) i f __name__==’__main__ ’ : u n i t t e s t . a s s e r t E q u a l ( add ( 1 1 . 1 7 ) . 2 2 ) . t h i s t e s t w i l l be s k i p p e d . 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 . # @unittest . 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 . 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 . 3 4) s e l f . 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 3 . # In t h i s ca s e . 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 .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 . a s s e r t E q u a l ( add ( −12 . skip ( " demonstrating skipping " ) # Skip t h i s t e s t ( Python >= 2 . #@ u n i t t e s t . a s s e r t E q u a l ( add ( 1 0 .

path . path . ’ dirName = os . r e a l p a t h ( dirName ) upDir = os . d i v i s i o n . 2) s e l f . path . a s s e r t R a i s e s ( ZeroDivisionError . b ) : " " " Kisz á molja a há nyadost . a s s e r t E q u a l s ( average (1 . 2 . 4) def test_division ( s e l f ) : s e l f . path : s y s . path . 0) def test_suite ( ) : t e s t s = [ u n i t t e s t . 10 . TestCase ) : def test_average ( s e l f ) : s e l f . 4 . s p l i t ( dirName ) [ 0 ] i f upDir not i n s y s .Bevezetés a Python 3-ba " " " Kisz á molja az á t l a g o t . 2) s e l f . 6) . 3) . 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 . append ( upDir ) from c a l c u l s import average . makeSuite ( C a l c u l T e s t ) ] 112 c Hungarian Translation Daróczy Péter    © . ass ertEquals ( d i v i s i o n (10 . dirname ( __file__ ) i f dirName == ’ ’ : dirName = ’ . a s s e r t E q u a l s ( average (2 . 5) . " " " 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 . " " " 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 .

mint a kódot : egy egyszerű szövegszerkesztővel olvashatóknak és szerkeszthetőknek kell lenniük. c Robert Cordeau 113 .2. 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. ami : • megkeres minden tesztmodult: ezeknek a neve test_ prefix-szel kezdődik és egy test nevű folderben vannak. • létrehozza a tesztek sorozatainak sorozatát és elindítja a tesztsorozatot. 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).   © 10. • a felhasználói kézikönyveket és más magas szintű dokumentumokat (downstream documentation). • a kódhoz kapcsolódó technikai (mainstream documentation).Bevezetés a Python 3-ba return unittest . main ( ) Egy tesztsorozat végrehajtásához egy olyan scriptet kell írni. TestSuite ( t e s t s ) i f __name__ == ’__main__ ’ : u n i t t e s t . • a test_suite globális függvény suite visszatérési értékét begyűjti. Lehetővé teszi a szöveg kombinálását a tesztekkel. • a doctests : kompatibilis a reST formátummal. A mainstream dokumentumok a kód ritmusában fejlődnek és ezért úgy kell őket kezelni.

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

| shamr | image : : shamr ..... png   © Az rst2html utility erre a file-ra alkalmazva ugyanezt a file-t állítja elő .. | h e l e n | image : : h e l e n . ... −−−−−−−−−−−−−−− 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 | ======= ======= ======= .. | e l y s T | image : : e l y s T . C e c i e s t une sous−sous−s e c t i o n .. png . . png ... c Robert Cordeau 115 .... . . 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 .. 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 ∗..Bevezetés a Python 3-ba Sous−sous−s e c t i o n .html kiterjesztéssel. .

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

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

Test p a s s e d . ’ eu ’ ) ) def _test ( ) : import d o c t e s t d o c t e s t . somme 2 t e s t s in 2 items .py " " " Module d ’ e s s a i de d o c t e s t . ’ rRr ’ ) p r i n t ( t e x t e . 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 . " >>> 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 . r e p l a c e ( ’ e ’ . . 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 . . Les ’ r ’ s o n t T r i p l é s .    © Második példa : doctest2. i l s eun baveunt . .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__ . """ t e x t e = t e x t e . . testmod ( v e r b o s e=True ) 118 c Hungarian Translation Daróczy Péter . i l s en bavent . " " " # 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 ( ’ r ’ .

_ t e s t 1 items passed a l l t e s t s : 2 t e s t s i n __main__ . . . 2 p a s s e d and 0 f a i l e d .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 . i l s en bavent . ok 2 i t e m s had no t e s t s : __main__ __main__ . . i l s eun baveunt . a c c e n t E t r a n g e 2 t e s t s in 3 items . © c Robert Cordeau 119 . Test p a s s 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 .

For example . 24 . E l s e r e t u r n a l o n g . 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 ... 6 . r e t u r n an i n t . \ 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 . 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. 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 ) : . 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 ) : . 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 ) : . 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 . 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 .Bevezetés a Python 3-ba Harmadik példa : example. 2 .. an e x a c t i n t e g e r >= 0 .py  """ This i s th e " example " module . >>> 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 .... 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 . The example module s u p p l i e s one f u n c t i o n .

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 . 2 . 1 . 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 . 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 . 24 . 6 .

_ 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__ .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 ) : ..2... V al ueErro r : n must be e x a c t i n t e g e r ok Trying : factorial (30. 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ő. V al ueErro r : n must be >= 0 ok Trying : factorial (30.. OK   © 10.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 ) : .. 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__ .3. 7 p a s s e d and 0 f a i l e d . A dokumentálás vezérelt fejlesztés Amint az látható.. f a c t o r i a l 7 t e s t s in 3 items . nem látjuk a kódot ! A megoldás ennek a dokumentációnak az áthelyezése : a doctest. 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 ) : .testfile() 122 c Hungarian Translation Daróczy Péter .

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. Egyrészt függvénybe (illetve metódusba) integrált tesztjeink vannak. más részt ugyanaz a file naprakész dokumentációt szolgáltat. Ami többlet. így két legyet ütünk egy csapásra. c Robert Cordeau 123 .

A Unicode-szabvány semmilyen szabályt sem rögzít a kódolás számára fenntartott byte-ok ill. 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é. Az első elképzelés az. Kódolás Miután összegyűjtöttük az összes szimbólumot és hozzárendeltünk egy számot. ISO-8852-1.. bitek számára vonatkozóan. de számos más táblázatot is konstruáltak (EBCDIC.Bevezetés a Python 3-ba A. A Unicode-szabványban a karakterek numerikus azonosítói egyediek és univerzálisak. hogy a számítógép minden információt kódol. hogy konstruáljunk egy táblázatot. ezért ezek nyilvánvalóan nem kódolhatók egy bájton. amit binárisan manipulál. Az Unicode táblázat A Python 3 -ban a karakterláncok (az str() típus) Unicode stringek. Mivel több százezer különböző karakterről van szó (kb. Függelék Karakterkészlet és kódolás Láttuk. Az egész számok kódolásához elég az alap megváltoztatása. 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. azonban a helyzet összetettebb a karakterek esetében.1 ábrát). 6000 nyelv létezik).). 124 c Hungarian Translation Daróczy Péter .. egyedül az egyes karakterekhez rendelt numerikus azonosító értékét adja meg (lásd A. a lebegőpontos számok kódolásához egy szabványt használunk (IEEE 754).2 ábrát).

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

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

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

A cp1252 karakterkészlet 128 c Hungarian Translation Daróczy Péter .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.3. ábra.

c l o s e ( ) >>> ch_lue ’ Egy l épé s \n ’ © c Robert Cordeau 129 . Például :    >>> c h a i n e = " Egy l épé s \n " >>> o f = open ( " t e s t . e n c o d i n g=" Latin −1" ) >>> o f . hogy be-/kimenetek pillanatában jelezzük a kódolást. t x t " . w r i t e ( c h a i n e ) 10 >>> o f . c l o s e ( ) >>> o f = open ( " t e s t . t x t " . e n c o d i n g=" Latin −1" ) >>> ch_lue = o f .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" . " r " . read ( ) >>> o f .

Legyen B = { 0. Ez egy kétértékű logika. a. A változók értékeit néha False-sal és True-val jelöljük. AND és OR operátorokat. 1 } definíciós halmaz. Függelék A logikai függvények A Boole-logika A XIX. ¯ 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 . melyen definiáljuk a NO. században George Boole matematikus teljesen átalakította a logikát egy formális formális rendszerré. Ma a Boole-algebrának számos alkalmazása van informatikában és az elektromos áramkörök tervezésében.Bevezetés a Python 3-ba B. Az operátorokat néha rendre mint a.bésa + b jelöljük.

Bevezetés a Python 3-ba Kizáró. 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 .

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

. 1 }k ahol f értelmezési tartománya a { 0. Ennek az alkalmazásnak lehetővé kell tenni a bemeneti file-ok azonosítását : f (x) = f (y) akkor és csak akkor.01. 1 }∗ → { 0. 1.1 ábrát) : f : { 0. aminek a bemenete különböző hosszúságú file-ok. . Például k = 512-vel 2512 azaz 10154 cella áll rendelkezésre. 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. } bináris sorozatok halmaza. 1 }∗ = { ∅. amiket tömörít és kimenetként egy rögzített hosszúságú bináris sorozatot ad ( lásd D.. 101. 0.. c Robert Cordeau 133 . 0. Ekkor ütközésről (collision) beszélünk....Bevezetés a Python 3-ba D... ha x = y . 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.. . 11. Függelék A hash-függvények Működési elv A hash függvény egy f alkalmazás... 1 }k = { 0. • egy megfelelő algoritmussal a kezelni kell a fennmaradó ütközéseket. hogy f (x) = f (y) (ugyanaz a bináris szekvencia)..10..11 } bináris szekvenciák halmaza. 10. 100. 0. értékkészlete a k db bitből álló { 0. 1.00.

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

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

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

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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->