Vydání programovacího jazyka Python 3.10

Po roce vývoje je představeno významné vydání programovacího jazyka Python 3.10. Nová větev bude podporována jeden a půl roku, poté pro ni budou další tři a půl roku generovány opravy k odstranění zranitelností.

Zároveň začalo alfa testování větve Pythonu 3.11 (v souladu s novým harmonogramem vývoje začínají práce na nové větvi pět měsíců před vydáním předchozí větve a do fáze alfa testování se dostanou do příštího vydání ). Větev Pythonu 3.11 bude ve verzích alfa po dobu sedmi měsíců, během kterých budou přidávány nové funkce a opraveny chyby. Poté bude probíhat beta testování po dobu tří měsíců, během kterých bude zakázáno přidávání nových funkcí a veškerá pozornost bude věnována opravám chyb. Poslední dva měsíce před vydáním bude pobočka ve fázi kandidáta na vydání, kdy bude provedena finální stabilizace.

Mezi nové přírůstky v Pythonu 3.10 patří:

  • Implementované operátory „match“ a „case“ pro párování vzorů, které zlepšují čitelnost kódu, zjednodušují párování libovolných objektů Pythonu a zvyšují spolehlivost kódu prostřednictvím pokročilé statické kontroly typu. Implementace je podobná operátoru "match" poskytovanému v Scala, Rust a F#, který porovnává výsledek zadaného výrazu se seznamem vzorů uvedených v blocích na základě operátoru "case".

    def http_error(stav): stav shody: případ 400: návrat „Špatný požadavek“ případ 401|403|404: návrat „Nepovoleno“ případ 418: návrat případ „Jsem čajník“ _: návrat „Něco jiného“

    Můžete rozbalit objekty, n-tice, seznamy a libovolné sekvence a svázat proměnné na základě existujících hodnot. Je povoleno definovat vnořené šablony, používat další podmínky „if“ v šabloně, používat masky („[x, y, *rest]“), mapování klíč/hodnota (například {„šířka pásma“: b, „latence ”: l} pro extrahování hodnot "šířky pásma" a "latence" ze slovníku, extrahování podšablon (operátor ":="), použití pojmenovaných konstant v šabloně. Ve třídách je možné přizpůsobit chování shody pomocí metody „__match__()“.

    z datových tříd importujte datovou třídu @dataclass class Bod: x: int y: int def whereis(bod): bod shody: případ Bod(0, 0): print("Origin") případ Bod(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Někde jinde") case _: print("No point") shoda bod: případ Bod(x, y) pokud x == y: tisk (f"Y=X v {x}") případ Bod(x, y): tisk(f"Ne na diagonále") ČERVENÁ, ZELENÁ, MODRÁ = 0, 1, 2 odpovídá barvě: pouzdro ČERVENÉ: potisk(“Vidím červeně!”) ZELENÉ pouzdro: potisk(„Tráva je zelená“) pouzdro MODRÉ: potisk(“Cítím modrou :(“)

  • Nyní je možné použít závorky v příkazu with k rozdělení definice kolekce kontextových manažerů na více řádků. Je také povoleno ponechat čárku za posledním kontextovým manažerem ve skupině: s ( CtxManager1() jako příklad1, CtxManager2() jako příklad2, CtxManager3() jako příklad3, ): ...
  • Vylepšené hlášení o umístění kódu chyb souvisejících s neuzavřenými složenými závorkami a uvozovkami v řetězcových literálech. Pokud například existuje neuzavřená složená závorka, namísto hlášení syntaktické chyby v následující konstrukci nyní ukazatel zvýrazní úvodní složenou závorku a indikuje, že neexistuje žádný uzavírací blok. Soubor "example.py", řádek 1 očekáván = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' nebyla nikdy uzavřena

    Přidány další specializované chybové zprávy syntaxe: chybějící symbol „:“ před blokem a ve slovnících, neoddělování n-tice závorkami, chybějící čárka v seznamech, určení bloku „zkusit“ bez „kromě“ a „konečně“, pomocí „= " místo "= =" v porovnávání, specifikující *-výrazy v f-řetězcích. Navíc zajišťuje zvýraznění celého problematického výrazu, nejen jeho začátku, a explicitnější informace o kontextu chyb spojených s nesprávným odsazením. >>> def foo(): … if lel: … x = 2 Soubor „“, řádek 3 x = 2 ^ IndentationError: očekává se odsazený blok za příkazem „if“ na řádku 2

    V případě chyb způsobených překlepy v názvech atributů a názvů proměnných ve funkci se zobrazí doporučení se správným názvem. >>> collections.namedtoplo Traceback (poslední poslední volání): Soubor "", řádek 1, v AttributeError: modul 'collections' nemá žádný atribut 'namedtoplo'. Měli jste na mysli: namedtuple?

  • Pro ladicí nástroje a profilery jsou události trasování poskytovány s přesnými čísly řádků spuštěného kódu.
  • Přidáno nastavení sys.flags.warn_default_encoding pro zobrazení varování o potenciálních chybách souvisejících s TextIOWrapper a open() zpracováním souborů kódovaných UTF-8 bez explicitního určení možnosti ‚encoding=»utf-8″‘ (ve výchozím nastavení se používá kódování ASCII). Nové vydání také poskytuje možnost zadat hodnotu 'encoding="locale"' pro nastavení kódování na základě aktuálního národního prostředí.
  • Do typovacího modulu byl přidán nový operátor, který poskytuje nástroje pro specifikaci typových anotací a umožňuje použití syntaxe „X | Y" pro výběr jednoho z typů (typ X nebo typ Y). def square(číslo: int | float) -> int | float: návratové číslo ** 2 je ekvivalentní dříve podporované konstrukci: def square(číslo: Union[int, float]) -> Union[int, float]: návratové číslo ** 2
  • Do typovacího modulu byly přidány operátor Concatenate a proměnná ParamSpec, které umožňují předávat další informace pro statickou kontrolu typu při použití Callable. Psací modul také přidává speciální hodnoty TypeGuard pro anotaci funkcí ochrany typu a TypeAlias ​​pro explicitní definování aliasu typu. StrCache: TypeAlias ​​​​= ‚Cache[str]‘ # alias typu
  • Funkce zip() implementuje volitelný příznak „strict“, který, když je zadán, kontroluje, zda jsou argumenty, které jsou iterovány, stejně dlouhé. >>> seznam(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> seznam(zip(rozsah(3), ['poplatek', 'fi', 'fo', 'fum'], strict=True)) Traceback (poslední poslední hovor ): … ValueError: argument zip() 2 je delší než argument 1
  • Nové vestavěné funkce aiter() a anext() jsou navrženy s implementací asynchronních analogů k funkcím iter() a next().
  • Práce konstruktorů str(), bytes() a bytearray() při práci s malými objekty se zrychlila o 30–40 %.
  • Snížil se počet operací importu v runpy modulu. Příkaz "python3 -m module_name" nyní běží v průměru 1.4krát rychleji kvůli redukci importovaných modulů z 69 na 51.
  • Instrukce LOAD_ATTR využívá cachovací mechanismus pro jednotlivé operační kódy, což umožnilo zrychlit práci s běžnými atributy až o 36 % a se sloty až o 44 %.
  • Při sestavování Pythonu s možností „--enable-optimizations“ je nyní povolen režim „-fno-semantic-interposition“, který umožňuje zrychlit interpret až o 30 % ve srovnání s vytvářením s „--enable-shared“. “ možnost.
  • Moduly hashlib a ssl přidaly podporu pro OpenSSL 3.0.0 a přestaly podporovat verze OpenSSL starší než 1.1.1.
  • Byl odstraněn starý analyzátor, který byl v předchozí větvi nahrazen analyzátorem PEG (Parsing Expression Grammar). Modul formátovače byl odstraněn. Parametr smyčky byl odstraněn z rozhraní API asyncio. Metody, které byly dříve zastaralé, byly odstraněny. Funkce Py_UNICODE_str*, které manipulují s řetězci Py_UNICODE*, byly odstraněny.
  • Modul distutils byl zastaralý a je naplánováno jeho odstranění v Pythonu 3.12. Místo distutils se doporučuje použít moduly setuptools, package, platform, shutil, subprocess a sysconfig. Struktura wstr v PyUnicodeObject byla zastaralá a naplánováno její odstranění.

Zdroj: opennet.ru

Přidat komentář