Újdonságok a python 3, 3, python 3 kezdőknek és bábuknak
Alapinformációk
Új szintaktikai jellemzők:
- Új kifejezés termelés a generátor megvalósításához.
- Az u "unicode" szintaxis újra megengedett a str. Típusú objektumok számára.
Új beépített modulok:
Új beépített fejlesztések:
- A kivételek I / O hierarchiáját átdolgozták
- Újraíró Import Import gép
- Kompaktabb unicode karakterláncok
- Kompaktabb szótárak
- Alapértelmezés szerint engedélyezve van a hashösszeg randomizálása
PEP 405: A virtuális környezet
A virtuális környezetek segítségével különálló Python-eszközöket hozhat létre az egész rendszerre kiterjedő alapvető beállítások megosztásával a karbantartás megkönnyítése érdekében. Virtuális környezetek saját készlet speciális csomagokat (azaz helyileg telepített könyvtárak), és adott esetben elválasztjuk a rendszer-szintű csomagokat.
Ez a PEP hozzáadja a venv modult a program eléréséhez, és a pyvenv parancsfájlt a parancssor és az adminisztráció eléréséhez. A Python interpreter megérti a pvenv.cfg fájlt, amelynek létezését a virtuális környezet könyvtárfája jelzi.
PEP 420: Csomag nevei
Beépített támogatás olyan csomagok számára, amelyek nem igényelnek __init__.py fájlokat
PEP 393: rugalmas sorok megtekintése
Sorok módosítva, hogy támogatja a többszörös belső reprezentációk, attól függően, hogy a karakter a legmagasabb sorrendi Unicode (1, 2, vagy 4 byte). Ez lehetővé teszi, hogy a legtöbb esetben hatékonyan képviseljük a karakterláncokat, de teljes hozzáférést biztosítunk az UCS-4-hez minden rendszeren. A meglévő API-val való kompatibilitás érdekében párhuzamosan, idővel több nézet is létezhet, ez a kompatibilitás meg kell szüntetni.
Az API C oldalán a PEP 393 teljesen visszafele kompatibilis. Az API-nak legalább öt évig rendelkezésre kell állnia. Az alkalmazások az API nem lesz teljes mértékben kihasználja a memóriát, vagy - ami még rosszabb - jönne egy kicsit több memóriát Python, akkor lehet, hogy fenntartsák két változatban minden egyes sor (a megszűnő formátum és az új tárolási hatékonyság).
alkalmassága
A PEP 393 által végrehajtott módosítások:
- A Python mindig támogatja a teljes Unicode kódkészletet, beleértve a nem BMP karaktereket is (pl. U + 0000-tól U + 10FFFF-ig). A különbség a keskeny és a széles szál között már nem létezik, és a Python most úgy viselkedik, mint egy nagy összeszerelés, még a Windows alatt is.
- Egy keskeny verzió halála mellett a szűk verzióra jellemző problémák is megoldottak, például:
- len () most mindig 1 értéket ad a nem BMP karakterekhez, tehát len ('\ U0010FFFF') == 1;
- a helyettesítő párok nem rekombinálódnak string karakterekké, így '\ uDBFF \ uDFFF'! = '\ U0010FFFF';
- a nem BMP karakterek indexe vagy szeletje adja vissza a várható értéket, így a '\ U0010FFFF' [0] most '\ U0010FFFF' értékre tér vissza. nem '\ uDBFF';
- A standard könyvtár minden más funkciója helyesen kezeli a nem BMP kódokat.
- A sys.maxunicode érték mostantól mindig 1114111 (0x10FFFF hexadecimális). A PyUnicode_GetMax () továbbra is visszaadja a 0xFFFF vagy a 0x10FFFF kompatibilitást, és nem használható az új Unicode API-val.
- ./ configure --with-wide-unicode zászló eltávolítva.
Teljesítmény és erőforrás-felhasználás
A Unicode karakterláncok tárolása most a kódszöveg maximális kódjától függ:
- Az ASCII és a Latin1 karakterlánc (U + 0000-U +00 FF) 1 bájtot használ;
- BMP karakterláncok (U + 0000-U + FFFF) 2 bájtot használnak;
- A nem BMP karakterláncok (U + 10000-U + 10 FFFF) 4 bájtot használnak.
Az eredmény az, hogy a legtöbb alkalmazás, memóriahasználat kell jelentősen csökken - különösen összehasonlítva a korábbi Unicode, mivel sok esetben, a vonal lesz tiszta ASCII, akár nemzetközi kontextusban (mert sok sort adatok tárolására nem emberi nyelv, mint például a XML töredékek, HTTP fejlécek, JSON kódolt adatok stb.). Reméljük, hogy ugyanezen okokból javítani fogja a processzor gyorsítótárának hatékonyságát a nem triviális alkalmazások számára. Python 3.3 memória 2-3-szor kisebb, mint a Python 3.2, és egy kicsit kisebb, mint a Python 2.7, Django a tesztet.
PEP 3151: Az operációs rendszer és az IO kivétel hierarchiájának újrahasznosítása
A kivétel hierarchiája egyszerűbb és részletesebb.
Nem kell aggódnia a megfelelő kivétel típus kiválasztása között OSError, IOError, EnvironmentError, WindowsError, mmap.error, socket.error vagy select.error között. A kivételek mindegyike jelenleg csak egy: OSError. Az egyéb nevek aliasként vannak tárolva a kompatibilitás biztosítása érdekében.
Ezenkívül könnyebb megfogni egy bizonyos hibaállapotot. Az ERRNO-modul egy adott konstans ERRNO attribútumának ellenőrzése helyett az OSError adott alosztályát kezelheti. Rendelkezésre álló alosztályok:
- BlockingIOError
- ChildProcessError
- ConnectionError
- FileExistsError
- FileNotFoundError
- InterruptedError
- IsADirectoryError
- NotADirectoryError
- PermissionError
- ProcessLookupError
- TimeoutError
És a ConnectionError rendelkezik alosztályokkal:
- BrokenPipeError
- ConnectionAbortedError
- ConnectionRefusedError
- ConnectionResetError
Például a Python 3.2-re írt következő kód:
Most az ERRNO importálása nélkül írható, és a kivétel tulajdonságainak manuális ellenőrzése nélkül:
PEP 380: A generátorok delegációjának szintaxisa
A PEP 380 növeli a hozamot. Ez lehetővé teszi, hogy a generátor átruházza műveleteinek egy részét egy másik generátorra. Ez lehetővé teszi egy olyan kóddarabot, amely "hozamot" tartalmaz, és amelyet egy másik generátorba helyeznek. Ezenkívül a subgenerátor értékét visszaadta, és az érték a generátor átruházására rendelkezésre áll.
Bár elsősorban egy subgenerátor átruházására való felhasználásra szánták, a hozam valójában lehetővé teszi az önkényes subiteratorok átruházását.
Egyszerű iterátorok esetén a kitermelés egyszerűen rövidített forma az iterábilis elemhez: hozamelem
Azonban, a szokásos huroktól eltérően, a hozam lehetővé teszi a végső érték külsõ generátorhoz való visszaküldését:
A változás alapelve, hogy lehetővé tegye a generátor több al-generátorra való felosztását olyan egyszerűen, amennyit egy nagy funkció több alfunkcióra bontható.
PEP 409: A kizárási kontextus visszaszorítása
A PEP 409 egy új szintaxist vezet be, amely lehetővé teszi a kivétel kontextus letiltását. Ezzel tiszta hibaüzenetet kaphat az alkalmazásokban, és kiválaszthatja a különböző típusú kivételeket:
A "Nincs" kifejezések nélkül a rendszer egy általános kivételt fog kiemelni:
Az eredeti kivétel azonban továbbra is elérhető, a hibakeresés egyszerűsítése érdekében:
Teljes nevek osztályokhoz és funkciókhoz
Jellemzői és céljai egy osztály python 3.3 van egy új attribútum __qualname__ (jelentése „út” a felső szintű modul). Globális funkciókhoz és osztályokhoz ez ugyanaz, mint a __name__. Más funkciók és osztályok esetében jobb tájékoztatást nyújt arról, hogy hol vannak valójában meghatározva, és hogyan érhetők el a globális tartományból.
Példa (nem kötött) módszerrel:
Példa a beágyazott osztályokra:
Példa egy beágyazott függvényre:
Ezen objektumok sztring ábrázolása is módosul, hogy több információt jelenítsen meg:
PEP 412: Key-Sharing szótárak
A Python 3.3-as szótárai képesek arra, hogy megoszthassák a memóriában tárolt memória egy részét, amely a kulcsokat és a hashajtókat tárolja, ami javítja a legtöbb nem beépített típus teljesítményét.