A Python programozási nyelv

A Python 3.0 ujdonságai

A Python 3 újdonságai

A 3-as Python az első olyan verzió, amely felhagy az előző verziókkal való kompatibilitással. Megszűntet számos olyan modult, amely az előző (2.X) verziók során elavulttá válnak, új, jobb alternatívákat vezet be az néhol ellentmondásos régi megoldások helyett, valamint az implementációban is jelentős optimalizálások figyelhetők meg.
Ez a dokumentum nem kíván teljes körű leírást adni az összes változásról és optimalizációs részletről, csupán összefoglalja a Python programozó számára a fontosabb módosításokat. A régebbi, 2.5-ös python kódunk 3.X-es verzióra való migrálása javarészt automatikusan történhet, hiszen rendelkezésünkre áll a 2to3 nevű modul, ami a legtöbb változtatást el tudja végezni a forráskódon.

A print már függvény

A print utasítást kivették a nyelvből, pontosabban lecserélték a print() beépített függvényre. A print-hez kapcsolódó szintaktikai elemeket mind átemelték a beépített függvénybe, keyword argumentumok segítségével. Néhány példa:

Old: print "The answer is", 2*2 New: print("The answer is", 2*2) Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline Old: print # Prints a newline New: print() # You must call the function! Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr) Old: print (x, y) # prints repr((x, y)) New: print((x, y)) # Not the same as print(x, y)!

A pontos szintaxis: print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout])

Listák helyett View-k és Iterátorok

Rendezési relációk (összehasonlítások)

A Python 3.0 leegyszerűsíti a rendezési relációk szabályait:

Integer-ek

Text vs. Data az Unicode vs. 8-bit helyett

Minden, ami az Unicode-dal és a bináris adattal kapcsolatos, a Pyton 3.0-ban megváltozott.

Szintaxis változások

A with utasítás

A with utasítást a try... finally... típusú finalizáló tevékenységeket végző kódok leváltására vezették be. Az alapstruktúra a következő:

with expression [as variable]: with-block
Az expression kiértékelődik, és visszatér egy olyan objektummal, ami támogatja a context manager protokollt (rendelkezik a __enter__() és __exit__() metódusokkal). Mielőtt a with-block végrehajtódna, azelőtt lefut az __enter__() metódus, majd a blokk végrehajtása után lefut az __exit__() metódus is.

A 2.6-os verziótól kezdődően számos Python objektum támogatja a context manager protokollt, például a file objektum is. Például:

with open('/etc/passwd', 'r') as f: for line in f: print line ... more processing code ...
Az utasítás végrehajtása után a fájl automatikusan be fog záródni, még akkor is, ha a for ciklus közben valamilyen kivétel lép fel.
A threading modul lock-jai és és egyéb objektumai is támogatják a protokollt:
lock = threading.Lock() with lock: # Critical section of code ...
A lock-ot megszerzi a with-blokk, mielőtt végrehajtódna a törzs, és a végrehajtás után a lockot automatikusan el is engedi.

Hogyan írjunk context manager osztályokat? A protokoll lényegében a következő:

Egy példa context managerre:

db_connection = DatabaseConnection() with db_connection as cursor: cursor.execute('insert into ...') cursor.execute('delete from ...') # ... more operations ... class DatabaseConnection: # Database interface def cursor(self): "Returns a cursor object and starts a new transaction" def commit(self): "Commits current transaction" def rollback(self): "Rolls back current transaction" def __enter__(self): # Code to start a new transaction cursor = self.cursor() return cursor def __exit__(self, type, value, tb): if tb is None: # No exception, so commit self.commit() else: # Exception occurred, so rollback. self.rollback() # return False

Library változások

Az alábbiakban felsoroljuk a legfontosabb library változásokat a 2.X verzió óta. Ez közel sem egy teljes lista, csupán egy összefoglalása annak!

String formázás

A % operátoros formázás a 3.1-ben elavulttá válik, egy későbbi verzióban pedig végleg meg fog szűnni. E helyett a 2.6-os verzióban már bevezetett format() beépített függvény, illetve a string-ek format() metódusa használható szöveg formázásra. Itt nem kívánjuk részletezni a % operátoros, illetve a format() metódus általi formázás különbségeit.

Kivétel kezelés

További mellékes változtatások