ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Python 3.11

Π‘Π»Π΅Π΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Python 3.11 бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ. Новият ΠΊΠ»ΠΎΠ½ Ρ‰Π΅ бъдС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π° ΠΎΡ‰Π΅ Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Ρ‰Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π·Π° отстраняванС Π½Π° уязвимоститС.

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π°ΠΏΠΎΡ‡Π½Π° Π°Π»Ρ„Π° тСстванС Π½Π° ΠΊΠ»ΠΎΠ½Π° Π½Π° Python 3.12 (Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с новия Π³Ρ€Π°Ρ„ΠΈΠΊ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ Π½ΠΎΠ² ΠΊΠ»ΠΎΠ½ Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΏΠ΅Ρ‚ мСсСца ΠΏΡ€Π΅Π΄ΠΈ пусканСто Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ ΠΊΠ»ΠΎΠ½ ΠΈ достига Π΅Ρ‚Π°ΠΏΠ° Π½Π° Π°Π»Ρ„Π° тСстванС Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° слСдващото ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ). ΠšΠ»ΠΎΠ½ΡŠΡ‚ Π½Π° Python 3.12 Ρ‰Π΅ бъдС Π² Π°Π»Ρ„Π° вСрсия Π·Π° сСдСм мСсСца, ΠΏΡ€Π΅Π· ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π±Π΅Ρ‚Π° вСрсиитС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ тСствани Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚Ρ€ΠΈ мСсСца, ΠΏΡ€Π΅Π· ΠΊΠΎΠΈΡ‚ΠΎ добавянСто Π½Π° Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‰Π΅ бъдС Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΎ ΠΈ цялото Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‰Π΅ бъдС ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ΠΎ Π½Π° отстраняванСто Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡ‚Π΅ Π΄Π²Π° мСсСца ΠΏΡ€Π΅Π΄ΠΈ освобоТдаванСто ΠΊΠ»ΠΎΠ½ΡŠΡ‚ Ρ‰Π΅ бъдС Π½Π° Π΅Ρ‚Π°ΠΏ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π° освобоТдаванС, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½Π° стабилизация.

НовитС допълнСния към Python 3.11 Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚:

  • Π‘Π΅ΡˆΠ΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° производитСлността. Новият ΠΊΠ»ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ускорСниСто ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎΡ‚ΠΎ внСдряванС Π½Π° извиквания Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΡŠΡ€Π·ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° стандартни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠ·Π³ΠΎΡ‚Π²Π΅Π½ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Cinder ΠΈ HotPy. Π’ зависимост ΠΎΡ‚ Π²ΠΈΠ΄Π° Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌΠ° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° скоростта Π½Π° изпълнСниС Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ‚ 10-60%. Π‘Ρ€Π΅Π΄Π½ΠΎ производитСлността Π½Π° тСстовия ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π° pyperformance сС Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π° с 25%.

    ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π΅ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° с 10-15%. ΠžΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ с ΠΊΠΎΠ΄ ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²Π΅Ρ‡Π΅ са статично Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° Π΄Π΅ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΎΡ‚ кСша, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с ΠΊΠΎΠ΄ Π·Π° поставянС Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚.

  • ΠŸΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° слСди Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π² диагностични ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π²Π΅Ρ‡Π΅ Π΅ възмоТно Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ информация Π·Π° ΠΈΠ·Ρ€Π°Π·Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΠ» Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° (ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° само линията бСшС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π°, Π±Π΅Π· подробности коя част ΠΎΡ‚ линията Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΠ»Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°). Π Π°Π·ΡˆΠΈΡ€Π΅Π½Π°Ρ‚Π° информация Π·Π° прослСдяванС ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Ρ‡Ρ€Π΅Π· API ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π·Π° ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈ инструкции Π·Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ към ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° позиция Π² изходния ΠΊΠΎΠ΄, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ codeobject.co_positions() ΠΈΠ»ΠΈ C API функцията PyCode_Addr2Location(). ΠŸΡ€ΠΎΠΌΡΠ½Π°Ρ‚Π° ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно отстраняванСто Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ с Π²Π»ΠΎΠΆΠ΅Π½ΠΈ Ρ€Π΅Ρ‡Π½ΠΈΠΊΠΎΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, мноТСство извиквания Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ слоТни Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ. ΠŸΡ€ΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ (послСдно послСдно ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅): Π€Π°ΠΉΠ» "calculation.py", Ρ€Π΅Π΄ 54, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡƒΠ»Π°
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π³Ρ€ΡƒΠΏΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° няколко Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ навСднъТ. Π—Π° Π΄Π° сС Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚ мноТСство ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π΄Π° сС ΡΡŠΠ±Π΅Ρ€Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ, бяха ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π½ΠΎΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ExceptionGroup ΠΈ BaseExceptionGroup ΠΈ ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ β€žexcept*β€œ бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ add_note() Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ към класа BaseException, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΡ€ΠΈΠΊΠ°Ρ‡ΠΈΡ‚Π΅ тСкстова Π±Π΅Π»Π΅ΠΆΠΊΠ° към ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавяйки контСкстуална информация, която Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ спСциалСн Ρ‚ΠΈΠΏ Self Π·Π° прСдставянС Π½Π° тСкущия частСн клас. Self ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½ΠΎΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ СкзСмпляр ΠΎΡ‚ нСговия клас ΠΏΠΎ ΠΏΠΎ-прост Π½Π°Ρ‡ΠΈΠ½ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° TypeVar. клас MyLock: def __enter__(self) -> Self: self.lock() return self
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ спСциалСн Ρ‚ΠΈΠΏ LiteralString, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° само Π½ΠΈΠ·ΠΎΠ²ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с Ρ‚ΠΈΠΏΠ° LiteralString (Ρ‚.Π΅. Π³ΠΎΠ»ΠΈ ΠΈ LiteralString Π½ΠΈΠ·ΠΎΠ²Π΅, Π½ΠΎ Π½Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ str Π½ΠΈΠ·ΠΎΠ²Π΅). Π’ΠΈΠΏΡŠΡ‚ LiteralString ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π½ΠΈΠ· към Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎΡ‚ΠΎ замСстванС Π½Π° части ΠΎΡ‚ Π½ΠΈΠ·ΠΎΠ²Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ уязвимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π·Π° SQL заявки ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Няма: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Π“Ρ€Π΅ΡˆΠΊΠ° run_query( # Error f"SELECT * FROM students WHERE name = {arbitrary_string}" )
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ TypeVarTuple, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠΈ, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ TypeVar, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚ Π½Π΅ Π΅Π΄ΠΈΠ½ Ρ‚ΠΈΠΏ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±Ρ€ΠΎΠΉ Ρ‚ΠΈΠΏΠΎΠ²Π΅.
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΌΠΎΠ΄ΡƒΠ»Π° tomllib с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° парсванС Π½Π° TOML Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ въвСдСни Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ (TypedDict) с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Required ΠΈ NotRequired, Π·Π° Π΄Π° сС опрСдСлят Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈ Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ всички Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° са Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ, Π°ΠΊΠΎ общият ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ) m3: Π€ΠΈΠ»ΠΌ = {β€œΠ³ΠΎΠ΄ΠΈΠ½Π°β€: 2022} # Π“Ρ€Π΅ΡˆΠΊΠ°, Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π΅ Π΅ попълнСно)
  • ΠšΠ»Π°ΡΡŠΡ‚ TaskGroup Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ към ΠΌΠΎΠ΄ΡƒΠ»Π° asyncio с внСдряванСто Π½Π° асинхронСн контСкстСн ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‡Π°ΠΊΠ° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ° ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ. ДобавянСто Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ към Π³Ρ€ΡƒΠΏΠ° става Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° create_task(). async def main(): async с asyncio.TaskGroup() ΠΊΠ°Ρ‚ΠΎ tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("И Π΄Π²Π΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Π΅Ρ‡Π΅ са изпълнСни .")
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π½Π° @dataclass_transform Π·Π° класовС, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ посочСно, систСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° статичСн Ρ‚ΠΈΠΏ Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, сякаш ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π½Π° @dataclass.dataclass. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΠΊΠ»Π°ΡΡŠΡ‚ CustomerModel, ΠΊΠΎΠ³Π°Ρ‚ΠΎ провСрява Ρ‚ΠΈΠΏΠΎΠ²Π΅, Ρ‰Π΅ бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° клас с Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @dataclasses.dataclass, Ρ‚.Π΅. ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‰ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ id ΠΈ name. @dataclass_transform() клас ModelBase: ... клас CustomerModel(ModelBase): id: int ΠΈΠΌΠ΅: str
  • Π’ рСгулярнитС ΠΈΠ·Ρ€Π°Π·ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°Ρ‚ΠΎΠΌΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ ((?>...)) ΠΈ ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Ρ‚Π΅Π»Π½ΠΈ ΠΊΠ²Π°Π½Ρ‚ΠΎΡ€ΠΈ (*+, ++, ?+, {m,n}+).
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ опция Π·Π° командния Ρ€Π΅Π΄ "-P" ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата PYTHONSAFEPATH Π·Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ опасни Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ ΠΏΡŠΡ‚ΠΈΡ‰Π° към sys.path.
  • ΠŸΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° py.exe Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Windows Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°, добавяйки ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° синтаксиса β€ž-V:β€œ. / " Π² допълнСниС към "- . "
  • Много макроси Π² C API сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π² Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ ΠΈΠ»ΠΈ статични Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ΠΈ sunau са ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ Π² Python 3.13 ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PyUnicode_Encode*.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€