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

Kapcsolódó cikkek