Превод на статията https://www.infoworld.com/article/3660550/the-best-new-features-and-fixes-in-python-311.html
За още детайли разгледайте статиите:
- https://docs.python.org/3.11/whatsnew/3.11.html
- https://www.datacamp.com/blog/whats-new-in-python-311-and-should-you-even-bother-with-it
Вече можете да изпробвате по-бърз интерпретатор, по-разбираеми грешки, по-мощни подсказки за типове и множество други ускорявания и настройки.
Езикът за програмиране 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:
- Множество изключения могат да бъдат предизвикани и обработени наведнъж с новия
except*синтаксис и новияExceptionGroupтип изключение. Това позволява елегантно справяне с проблеми, при които множество грешки могат да бъдат повдигнати заедно, като например при работа с асинхронни или едновременни методи или при работа с множество грешки при повторен опит за операция. - Изключения с „нулева цена“ : Изключенията вече не отнемат ресурс в програма, освен ако не са действително повдигнати. Това означава, че пътят по подразбиране за
try/exceptблок е по-бърз и използва по-малко памет. - Времето, необходимо за улавяне на изключение, е намалено с около 10% .
- Изключенията могат да бъдат обогатени с контекстуални бележки , отделно от текста на самото изключение.
Подобрения при писане
Функциите за подсказване на типа на 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 да работи в браузъра.
