Itt vagy: Kezdőlap ‣ Ugorj fejest a Python 3-ba ‣
❝ Isn’t this where we came in? ❞
– Pink Floyd, The Wall
Már Python programozó vagy? Elolvastad az eredeti Dive Into Python könyvet? Papíron is megvan? (Ha igen, köszönöm!) Készen állsz fejest ugrani a Python 3-ba? … Ha igen, olvass tovább. (Ha ezek egyike sem igaz, akkor inkább kezdd az elején.)
A Python 3 tartalmaz egy 2to3
parancsfájlt. Tanuld meg. Szeresd. Használd. A kód Python 3-ba
konvertálása a 2to3
használatával fejezet a 2to3
eszközzel automatikusan javítható dolgok referenciája. Mivel ezek zöme szintaxisváltozás, jó kiindulópont a Python 3 szintaxisváltozásainak megismeréséhez. (A print
mostantól függvény, az `x`
nem működik stb.)
Az Esettanulmány: a chardet
Python 3-a portolása dokumentálja a (végül sikeres) erőfeszítéseimet egy nem triviális programkönyvtár Python 2-ről Python 3-ra portolására. Talán segít, talán nem. A tanulási görbe viszonylag meredek, mivel nagyjából meg kell értened a programkönyvtár működését, így megértheted, hogy miért romlott el, és hogyan javítottam ki. A hibák jó részét a karakterláncok okozzák. Ha már itt tartunk…
Karakterláncok. Jaj. Hol kezdjem? A Python 2-ben voltak „karakterláncok” és „Unicode karakterláncok”. A Python 3-ban „bájtok” és „karakterláncok” vannak. Ez minden, mostantól minden karakterlánc Unicode karakterlánc, és ha egy kupac bájttal akarsz dolgozni, akkor használd az új bájt
típust. A Python 3 soha nem fog implicit módon konvertálni a karakterláncok és bájtok között, így ha nem vagy biztos benne, hogy adott pillanatban épp melyiket kezeled, akkor a kód majdnem biztosan hibásan fog működni. További részletekért olvasd el a Karakterláncok fejezetet.
A bájtok vs. karakterláncok probléma a könyvben újra és újra előkerül.
kódolás
paramétert igényel. Egyes szövegfájlmetódusok a karaktereket számolják, míg más metódusok a bájtokat. Ha a kódod feltételezi, hogy egy karakter == egy bájt, akkor az nem fog működni a több bájtos karakterekkel.
httplib2
modul fejléceket és adatokat fog letölteni HTTP protokollon. A
HTTP fejlécek karakterláncokként kerülnek visszaadásra, de a HTTP törzs bájtokként.
pickle
modul Python 3-ban miért definiál a Python 2-vel visszafelé inkompatibilis új adatformátumot (tipp: a bájtok és karakterláncok miatt.) A Python 3 ezen kívül támogatja az
objektumok szerializálását JSON-ból és -ba, amely nem is rendelkezik bájt
típussal. Megmutatom, hogy ez hogyan kerülhető meg.
chardet
Python 3-ra portolása fejezet egy hatalmas, bájtokat és karakterláncokat tartalmazó kavarodás.
Még ha nem is érdekel a Unicode (majd fog), akkor is olvasd el a karakterláncok formázása Python 3-ban részt, ami teljesen eltér a Python 2-től.
Az iterátorok mindenütt előfordulnak a Python 3-ban, és sokkal jobban értem azokat, mint öt éve, amikor a „Dive Into Python” című könyvet írtam. Neked is meg kell értened ezeket, mert rengeteg függvény, amely a Python 2-ben listákat adott vissza, Python 3-ban iterátorokat fog visszaadni. Az Iterátorok fejezet második felét és a Speciális iterátorok fejezet második felét mindenképp olvasd el, ez a minimum.
Közkívánatra készítettem egy függeléket a Speciális metódusnevekről, amely nagyjából olyan, mint a Python dokumentáció „Data Model” (adatmodell) fejezete, csak kicsit több szarkazmussal.
Amikor a „Dive Into Python” című könyvet írtam, az összes elérhető XML függvénytár bűn rossz volt. Ezután Fredrik Lundh megírta az ElementTree-t, ami egyáltalán nem rossz. A Python istenek bölcsen beépítették az ElementTree-t a szabványos függvénytárba, és most az új XML fejezetem alapját képezi. Az XML-feldolgozás régi módszerei továbbra is elérhetők, de kerüld őket, mert rosszak!
A Python – nem a nyelv, hanem a közösség – újdonsága az olyan kódtárolók megjelenése, mint a The Python Package Index (PyPI). A Python olyan segédprogramokat tartalmaz, amelyekkel a kódod szabványos formátumokba csomagolhatod, és ezeket a csomagokat a PyPI közvetítésével terjesztheted. A részletekért olvasd el a Python függvénytárak csomagolása fejezetet.
© 2001–11 Mark Pilgrim