Най-добрите нови функции и корекции в Python 3.11

Превод на статията https://www.infoworld.com/article/3660550/the-best-new-features-and-fixes-in-python-311.html

За още детайли разгледайте статиите:

Вече можете да изпробвате по-бърз интерпретатор, по-разбираеми грешки, по-мощни подсказки за типове и множество други ускорявания и настройки.

Езикът за програмиране Python пуска нови версии всяка година, като бета версията е заключена за функции през първата половина на годината и окончателната версия към края на годината.

Python 3.11 току-що беше пуснат и разработчиците се насърчават да изпробват тази най-нова версия върху непроизводствен код, както за да проверят дали работи с вашите програми, така и за да получат представа дали вашият код ще се възползва от подобренията в производителността.

Ето обобщение на най-значимите нови функции в Python 3.11 и какво означават те за разработчиците на Python.

Подобрения на скоростта

Много индивидуални подобрения на производителността се появиха в Python 3.11, но най-голямото допълнение е специализираният адаптивен интерпретатор . Тъй като типът на обекта се променя рядко, интерпретаторът сега се опитва да анализира изпълнявания код и да замени общите байт кодове със специфични за типа. Например, двоичните операции (събиране, изваждане и т.н.) могат да бъдат заменени със специализирани версии за цели числа, числа с плаваща заглавие и низове.

Извикванията на функция на Python също изискват по-малко разходи в Python 3.11. Стековите рамки за извиквания на функции сега използват по-малко памет и са по-ефективно проектирани. Също така, въпреки че рекурсивните извиквания не са оптимизирани за опашка (което вероятно не е възможно в Python, така или иначе), те са по-ефективни, отколкото в предишните версии. Самият интерпретатор на Python също стартира по-бързо и основните модули, необходими за времето за изпълнение на Python, се съхраняват и зареждат по-ефективно.

Според официалния пакет за сравнение на Python, Python 3.11 работи около 1,25 пъти по-бързо от Python 3.10. Имайте предвид, че това ускоряване е обща мярка. Някои неща работят много по-бързо, но много други работят малко по-бързо или почти същото. Все пак най-добрата част от тези подобрения е, че идват безплатно. Не е необходимо да правите промени в кода на програмите на Python, за да се възползвате от ускоряванията на Python 3.11.

Подобрена информация за грешки

Друга непосредствено полезна функция в Python 3.11 са по-подробните съобщения за грешка. Python 3.10 вече имаше по-добро отчитане на грешки , благодарение на новия анализатор, използван в интерпретатора. Сега Python 3.11 разширява това, като предоставя подробна обратна връзка за това коя конкретна част от даден израз е причинила грешка.

Помислете за следния код, който извежда грешка:

x = [ 1 , 2 , 3 ] 
z = x [ 1 ][ 0 ] 

В Python 3.10 ще получим следното съобщение за грешка, което не е много полезно:

  File "C:\Python311\code.py", line 2, in <module>
    z = x[1][0]
TypeError: 'int' object is not subscriptable

Вместо да ни остави да се чудим кое int не може да се скриптира, проследяването на грешката в Python 3.11 сочи към точната част от реда, който генерира грешката:

  File "C:\Python311\code.py", line 2, in <module>
    z = x[1][0]
        ~~~~^^^
TypeError: 'int' object is not subscriptable

Сега няма неяснота къде е проблемът.

Подобрения по изключенията

Изключенията, механизмът за обработка на грешки на Python, получиха много нови функции в Python 3.11:

Подобрения при писане

Функциите за подсказване на типа на Python правят по-големите кодови бази по-лесни за управление и анализ и се увеличават значително с всяка ревизия след Python 3.5. Python 3.11 носи няколко нови добавки за подсказване на типа.

Типът Self

Методи на клас, които връщаха обекта self с return self преди изискваха тъпи и подробни анотации, за да бъдат полезни. typing.Self ви позволява да анотирате върнатата стойност на метод на клас просто като Self. Получавате полезни и предвидими резултати от вашите инструменти за анализ за такива методи.

Произволен тип низов литерал

Преди анотациите на типа нямаха начин да покажат, че дадена променлива трябва да бъде низов литерал – тоест низ, дефиниран в изходния код. Новата анотация typing.LiteralString коригира това. Използвайки новата анотация, линтърите могат да тестват дали дадена променлива е или низ, дефиниран в началния код, или нов низ, съставен само от низове , дефинирани от източника.

Атомарно групиране и ускорявания за регулярен израз

В модула на Python re за работа с регулярни изрази липсват няколко функции, открити в други реализации на регулярни изрази. Едното е атомарно групиране , широко поддържано на други езици. Python 3.11 вече поддържа този модел, използвайки общия синтаксис за атомарни групировки (като пример,  (?>...)).

Механизмът re за съвпадение на шаблони на модула също е пренаписан донякъде и работи с около 10% по-бързо.

Други допълнения, поправки и промени на Python 3.11

Много повече по-малки подобрения също се приземиха в Python 3.11:

  • Обектите на Python изискват по-малко памет, тъй като техните пространства от имена сега се създават лениво и техните речници за пространство от имена вече споделят ключове, когато е възможно.
  • Речниците, в които всички ключове са Unicode, вече не трябва да съхраняват хешове, като по този начин намаляват размера на речника и позволяват по-голяма ефективност на кеша.
  • Средата за изпълнение CPython, референтният интерпретатор за Python, вече има експериментална поддръжка за компилиране в WebAssembly . Това може да подпомогне бъдещото развитие на проекти като PyScript , които позволяват на компилирано от Wasm време за изпълнение на Python да работи в браузъра.

Leave a comment