Python (programozási nyelv)
![]() |
Ez a szócikk szaklektorálásra, tartalmi javításokra szorul. A felmerült kifogásokat a szócikk vitalapja részletezi. Ha nincs indoklás a vitalapon, bátran távolítsd el a sablont! |
Python | |
![]() |
|
|
|
Paradigma | többelvű |
Jellemző kiterjesztés | .py, .pyw, .pyc, .pyo, .pyd |
Megjelent | 1991. február 20. |
Tervező | Guido van Rossum |
Fejlesztő |
|
Utolsó kiadás | |
Típusosság | erős, dinamikus |
Fordítóprogram | CPython, Jython, IronPython, PyPy |
Megvalósítások | CPython, IronPython, Jython, Python for S60, PyPy |
Hatással volt rá | ABC, C, Haskell, Icon, Lisp, Modula-3, Perl, Smalltalk, Tcl |
Befolyásolt nyelvek | Ruby, Boo |
Operációs rendszer | platformfüggetlen |
Licenc | Python Software Foundation Licenc |
Weboldal |
A Python egy általános célú, nagyon magas szintű programozási nyelv[3], melyet Guido van Rossum holland programozó kezdett el fejleszteni 1989 végén, majd hozott nyilvánosságra 1991-ben.[4] A nyelv tervezési filozófiája az olvashatóságot és a programozói munka megkönnyítését helyezi előtérbe a futási sebességgel szemben.[5][6]
A Python többek között a funkcionális, az objektumorientált, az imperatív és a procedurális programozási paradigmákat támogatja. Dinamikus típusokat és automatikus memóriakezelést használ, ilyen szempontból hasonlít a Scheme, Perl és Ruby nyelvekhez, emellett szigorú típusrendszerrel rendelkezik.
A Python úgynevezett interpreteres nyelv, ami azt jelenti, hogy nincs különválasztva a forrás- és tárgykód, a megírt program máris futtatható, ha rendelkezünk a Python értelmezővel. A Python értelmezőt számos géptípusra és operációs rendszerre elkészítették, továbbá számtalan kiegészítő könyvtár készült hozzá, így rendkívül széles körben használhatóvá vált.
Tartalomjegyzék
Története[szerkesztés]
A Python alapötlete az 1980-as évek végén született meg.[7] A fejlesztést 1989 decemberében kezdte el Guido van Rossum a CWI-n.[8] A CWI (Centrum Wiskunde & Informatica, magyarul Matematikai és Informatikai Központ) egy kutatóintézet Amszterdamban. A nyelv a nevét a Monty Python csoportról kapta.[9] 1991 februárjában jelent meg az első nyilvános változat (0.9.0 verzió néven) az alt.sources hírcsoportban.[10] 1994-ben jött létre a comp.lang.python hírcsoport, ami egy jelentős mérföldkő volt a nyelv fejlődésében.[7] Szintén 1994-ben látott napvilágot az 1.0 verzió, amit az ezredfordulón, 2000 októberében követett a Python 2.0, majd pedig 2008-ban a Python 3.0.[11]
Egyszerű adattípusok[szerkesztés]
A Python különbséget tesz a mutálható és a mutálhatatlan típusok között. Ezek a fogalmak első közelítésben a megváltoztathatóságra utalnak, ám a pontos különbség ennél finomabb.[12][13]
A Python 3 beépített típusai | ||
---|---|---|
típus | leírás | példa |
str
|
Unicode string |
'Wikipédia'
"Wikipédia"
"""Több
soros
string"""
|
bytearray
|
Bájtok (mutálható) sorozata. |
bytearray(b'Some ASCII')
bytearray(b"ASCII karakterek")
bytearray([119, 105, 107, 105])
|
bytes
|
Bájtok (mutálhatatlan) sorozata. |
b'ASCII karakterek'
b"ASCII karakterek"
bytes([119, 105, 107, 105])
|
list
|
List típus, ami eltérő típusokat is tartalmazhat, azaz nem tipizált lista. |
[4.0, 'string', True]
|
tuple
|
Rendezett n-es. |
(4.0, 'string', True)
|
set
frozenset
|
Rendezetlen halmaz adattípusok. Duplikátumokat nem tartalmazhatnak. Nem tipizáltak, azaz eltérő típusú elemeket is tartalmazhatnak, ha azok hasíthatóak. |
{4.0, 'string', True}
frozenset([4.0, 'string', True])
|
dict
|
Hasítótábla, más néven szótár vagy asszociatív tömb adattípus. Kulcs-érték párokat tartalmazhat. A kulcsoknak hasíthatónak kell lenniük. |
{'key1': 1.0, 3: False}
|
int
|
Tetszőleges méretű egész szám adattípus. |
42
|
float
|
Lebegőpontos szám, melynek pontossága az implementáló rendszertől függ. |
3.1415927
|
complex
|
komplex szám adattípus valós és képzetes résszel. |
3+2.7j
|
bool
|
Kétértékű logikai adattípus. |
True
False
|
Kivételkezelés[szerkesztés]
A kivételkezelés a try
kulcsszóval történik. Például így:
try:
f()
except (NameError,TypeError):
print('Az f függvény végrehajtása során NameError vagy TypeError lépett fel.')
except:
print('Nem várt kivétel lépett fel.')
else:
print('Semmilyen kivétel nem lépett fel.')
finally:
print('Ez a mondat mindenképp kiíródik.')
Ha olyan kivétel lép fel a try
blokkban, ami valamely except
ágban szerepel, akkor a vezérlés az illető except
ágnak adódik át. Egy except
ág több kivételtípust is kezelhet, az egyes kivételtípusokat vesszővel elválasztva lehet megadni.
Az except
ág lefutása után a try
blokk utáni részen folytatódik a program. Ha nem lép fel semmilyen kivétel, akkor a vezérlés az else
ágra kerül a lefutás után, ha az létezik. Mindig csak egy except
ág fut le. Ha az utolsó except ág nem ad meg kivételtípust, akkor az kezeli az összes olyan kivételt, amit a megelőző ágak nem kezeltek. Végül szerepelhet egy opcionális finally
blokk, ami mindenképpen lefut.
Ha nincs megfelelő except
ág, akkor továbbadódik a kivétel a tartalmazó blokknak. Az except
ágakban fellépő kivételek szintén a tartalmazó blokknak adódnak át. Ha egyáltalán nincs try
blokk, például egy függvényben, akkor minden kivétel a tartalmazó blokknak adódik át.
def hibas_fuggveny():
x=1/0
try:
hibas_fuggveny()
except ZeroDivisionError as ex:
print('Nullával osztás.', ex)
A nyelv tartalmaz beépített kivételeket, de a lehetőség van saját kivételeket definiálására is. A kivételek paraméterezhetőek, típusuktól függően más és más paraméterük lehet. Kivétel kiváltására a raise
kulcsszó alkalmazható:
raise NameError('Hello')
Osztályok, öröklődés[szerkesztés]
A Python osztálymechanizmusának tervezésénél a szempont az volt, hogy minimális szintaktikai és szemantikai újdonságokat vezessenek be. C++ és a Modula-3 osztálymechanizmusának a keveréke. Többszörös öröklődésre is lehetőséget ad, a származtatott osztály átdefiniálhatja az ősosztálya(inak) metódusait, egy metódus hívhatja az ősosztály metódusát ugyanazon a néven. Az objektumok tartalmazhatnak privát adatokat. Különbségek a C++-hoz képest, hogy az osztály- és objektumváltozók publikusak (kivéve a dupla aláhúzással kezdődőeket), és minden tagfüggvény virtuális.
A Python a szokásos értelemben nem használ konstruktor és destruktor függvényeket, de a nem kötelezően definiálandó, speciális "__init__" és "__del__" tagfüggvényeket a rendszer az objektumpéldány létrehozásakor, illetve az objektum explicit törlésekor ("del" utasítás) vagy amikor a "szemétgyűjtő" felszabadítja a tárhelyet, automatikusan meghívja. Az "__init__"-et nagyon gyakran használják az tagváltozók kezdeti értékadására:
class MyObject:
def __init__(self,name):
self.name = name
myobj = MyObject("Ez a nevem")
print(myobj.name) # Kiírja, hogy "Ez a nevem"
Az osztályok maguk is objektumok – valójában a Pythonban minden adattípus objektum. A 2.2-es verziótól kezdve a beépített típusokat is bővítheti a felhasználó. Minden operátor felüldefiniálható speciális nevű tagfüggvényekben. (Például a "+" a "__add__", "__radd__", "__ladd__" segítségével, a "*" a "__mul__", "__rmul__", "__lmul__" segítségével stb.)
Ugyanarra az objektumra több néven is lehet hivatkozni, objektumok esetében értékadás alapértelmezés szerint referenciát (hivatkozást) jelent, nem új objektumpéldány létrehozását.
Osztálydefiníció:
class ClassName:
statement-1
...
statement-N
#Például:
class MyClass:
"Egy egyszerű példa osztály"
i = 42
def f(x):
return 'hello world!'
Az osztálynak mielőtt hatása lenne, a vezérlésnek rá kell futnia az osztálydefinícióra, így akár egy if-ágban is lehet osztálydefiníció. Az osztály-objektum az osztálydefiníció végén automatikusan létrejön. Példányosítani úgy tudunk, mintha egy paraméter nélküli függvényt hívnánk meg ( x = MyClass() ). Az adat attribútumok, mint lokális változók, nem előre definiálandók: első használatukkor jönnek létre. Példa:
x = MyClass
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print(x.counter)
del x.counter
Ez a kis példa 16-ot ír ki (nem a legegyszerűbb módon), és semmilyen nyoma nem marad az osztályban, hisz a del utasítással töröltük. Metódus attribútum:
- x.f helyes hivatkozás, hisz MyClass.f egy függvény
- x.i helytelen, hiszen MyClass.i nem függvény
x.f nem ugyanaz, mint MyClass.f! x.f egy metódus objektum, nem függvényobjektum. x.f() – ki fogja írni: hello world. Ugyanis az objektum, mint első argumentum átadódik a függvénynek, azaz x.f() ekvivalens MyClass.f(x) -szel.
További megjegyzések:
- az adat attribútumok felülírják az ugyanolyan nevű metódus attribútumot! Ezért célszerű valamilyen névkonvencióval kizárni az ilyen lehetőséget.
- nincs lehetőség az adatelrejtésre – az adat attribútumokat éppúgy elérik a metódusok, mint az objektum kliensei.
- az előbbi megjegyzés lehetővé teszi, hogy kliensek elrontsák az invariánst, ha meglévő adat attribútumot írnak. Ezt kerülni kell, mivel a nyelv nem nyújt rá lehetőséget.
- ha létezik egy __init__() metódusa az osztálynak, akkor példányosításkor az objektum létrehozása után meghívódik, átadva a példányosításkor esetleg megadott paramétereket:
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0,-4.5)
#(többszörös) öröklődés
class DerivedClassName([modulename.]Base1[,[[modulename.]Base2,…])
Ha egy hivatkozást nem talál az aktuális osztályban, akkor Base1-ben keresi,ha Base1-ben sincs, akkor Base1 őseiben. Ezután ha még mindig nem találta, akkor Base2-ben kezdi el keresni, és így tovább. Rekord vagy struct-szerű objektumok létrehozása:
class Dolgozo:
pass # ez egy üres osztálydefiníció
John = Dolgozo()
John.nev = 'John Cosinus'
John.osztaly = 'Matematikai reszleg'
John.fizetes = 42000
A kivételek lehetnek osztályok és nem csak string objektumok. Forma: raise instance vagy raise Class, instance. Egy except klóz kompatibilis a kivétellel, ha ugyanabban az osztályban vannak vagy a kivétel egy ősosztályban van. Példa:
class B:
pass
class C(B):
pass
class D(C):
pass
for c in [B,C,D]:
try:
raise c()
except D:
print("D")
except C:
print("C")
except B:
print("B")
Az eredmény B,C,D ebben a sorrendben. Ha azonban az except ágakat fordítva írtuk volna, akkor az eredmény B,B,B lett volna, mert a legelső illeszkedő except-ág aktivizálódik.
Szabványos könyvtárak[szerkesztés]
A Pythonnak igen kiterjedt és széles körű standard könyvtára van, amit még kiegészítenek az egyéb (mások által megírt) publikus modulok. A standard könyvtár adattípusokat (például számokat és listákat) tartalmaz, amelyeket egyébként a nyelv magjának tekintenek. Tartalmaz még beépített függvényeket és kivételeket, melyeket használni lehet import nélkül, viszont a legnagyobb rész természetesen modulokban van. A modulok egy részét C-ben írták meg, és beépítették az interpreterbe, másokat Python forráskódban kell importálni.
Ismertebb Pythonra épülő alkalmazások[szerkesztés]

- a Zope alkalmazáskiszolgáló
- ill. a Zope-ra épülő Plone tartalomkezelő-rendszer (CMS)
- Mailman levelezési listakezelő
- Trac projekt-kezelő rendszer
- a kéretlen reklámleveleket kiszűrő SpamBayes
- az egyik leghíresebb fájlcserélő szoftver, a BitTorrent eredeti implementációja
- A Blender 3D modellező-animációs program, ami ezért GE-ként is működik, Pythonból scriptelhető
Jegyzetek[szerkesztés]
- ↑ https://www.python.org/downloads/release/python-2714/
- ↑ https://docs.python.org/3.7/whatsnew/3.7.html
- ↑ General Python FAQ. python.org. Python Software Foundation. (Hozzáférés: 2009. június 27.)
- ↑ General Python FAQ. Python Programming Language – Official Website. Python Software Foundation. (Hozzáférés: 2010. március 16.)
- ↑ What is Python Good For?. General Python FAQ. Python Software Foundation. (Hozzáférés: 2008. szeptember 5.)
- ↑ What is Python? Executive Summary. Python documentation. Python Software Foundation. (Hozzáférés: 2007. március 21.)
- ^ a b The Making of Python. Artima Developer. (Hozzáférés: 2007. március 22.)
- ↑ A Brief Timeline of Python. Guido van Rossum. (Hozzáférés: 2009. január 20.)
- ↑ http://docs.python.org/2/faq/general.html#why-is-it-called-python
- ↑ HISTORY. Python source distribution. Python Foundation. (Hozzáférés: 2007. március 21.)
- ↑ http://www.python.org/download/releases
- ↑ Python Documentation - 3. Data Types. (Hozzáférés: 2013. október 7.)
- ↑ Immutable vs mutable types - Python. (Hozzáférés: 2013. október 7.)
További információk[szerkesztés]
- Hivatalos weboldal
- Magyar Python honlap
- Magyar nyelvű könyvek
- Gérard Swinnen : Tanuljunk meg programozni Python nyelven
- Raphael Marvie : Bevezetés a Pythonba példákkal
- Python 2.4 Quick Reference
- A hivatalos oktató (tutorial) magyarul a Python 3.x verzióihoz és a (2.x) verzióihoz (ez utóbbi nem frissült jó ideje)
- Egy jó bevezetés a Python programozási nyelvbe
- Guido van Rossum FSF díjat kap
- Regular Expression HOWTO A Python reguláris kifejezéskezeléséről angolul
- Dive into Python, angol, Python oktató programozóknak sok hasznos példával
- Python.lap.hu - linkgyűjtemény
- Informatikai érettségi feladatok megoldásai Python 3-mal
- A Sulipython megoldásai az érettségi feladatokra