Π‘Π»Π΅Π΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ Π½ΠΎΠ² ΡΠ΅Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Python 3.11. ΠΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π° Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π·Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π·Π° ΠΎΡΠ΅ ΡΡΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°.
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π°ΠΏΠΎΡΠ½Π° Π°Π»ΡΠ°-ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Python 3.12 (Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π½ΠΎΠ²ΠΈΡ Π³ΡΠ°ΡΠΈΠΊ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π·Π°ΠΏΠΎΡΠ²Π° ΠΏΠ΅Ρ ΠΌΠ΅ΡΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΈΡ ΡΠ΅Π»ΠΈΠ· Π΄ΠΎΡΡΠΈΠ³Π° Π΅ΡΠ°ΠΏ Π½Π° Π°Π»ΡΠ°-ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅). ΠΠ΅ΡΡΠΈΡΡΠ° Python 3.12 ΡΠ΅ Π±ΡΠ΄Π΅ Π² Π΅ΡΠ°ΠΏ Π½Π° Π°Π»ΡΠ°-ΠΈΠ·Π΄Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π΄Π΅ΠΌ ΠΌΠ΅ΡΠ΅ΡΠ°, ΠΏΡΠ΅Π· ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π½ΠΎΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΅ ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΈ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ ΡΠ΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΠΈ, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΎ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½ΠΎ Π²ΡΡΡ Ρ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ, Π²Π΅ΡΡΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π² Π΅ΡΠ°ΠΏ Π½Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡΡΠ²Π°Π½Π΅ Π·Π° ΡΠ΅Π»ΠΈΠ·, Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
Π‘ΡΠ΅Π΄ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΡΠ° Π² Python 3.11 ΡΠ°:
- ΠΠ·Π²ΡΡΡΠ΅Π½Π° Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ ΠΈ inline-ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° Π±ΡΡΠ·ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (x+x, x*x, x-x, 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(). Π’ΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π½Π° ΡΠ΅ΡΠ½ΠΈΡΠΈ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ. Traceback (most recent call last): File Β«calculation.pyΒ», line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π³ΡΡΠΏΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Ρ Π½ΠΈΡ ΡΡΠ²ΠΌΠ΅ΡΡΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΡΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ExceptionGroup ΠΈ BaseExceptionGroup, Π° Π·Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡ Π³ΡΡΠΏΠ°ΡΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΈΠ·ΡΠ°Π·Π° Β«except*Β».
- Π ΠΊΠ»Π°ΡΠ° BaseException Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ add_note(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ° ΠΊΡΠΌ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠΈΠΏ Self, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ΅ΠΊΡΡΠΈΡ Π·Π°ΡΠ²ΠΎΡΠ΅Π½ ΠΊΠ»Π°Ρ. Self ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΡΡΠ°Ρ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΡΠ²ΠΎΡ ΠΊΠ»Π°Ρ, ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
- ΠΠΎΠ±Π°Π²Π΅Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠΈΠΏ LiteralString, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ Ρ ΡΠΈΠΏΠ° LiteralString (Ρ.Π΅. ΡΠΈΡΡΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ Ρ ΡΠΈΠΏΠ° LiteralString, Π½ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈ Π½Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ Ρ ΡΠΈΠΏΠ° str). Π’ΠΈΠΏΡΡ LiteralString ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π°ΡΠ° ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΡΠ°ΡΡΠΈ ΠΎΡ Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ Π² ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π·Π° SQL Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ shell ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. def run_query(sql: LiteralString) -> β¦ β¦ def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(Β«SELECT * FROM studentsΒ») # ok run_query(literal_string) # ok run_query(Β«SELECT * FROM Β» + literal_string) # ok run_query(arbitrary_string) # ΠΡΠ΅ΡΠΊΠ° run_query( # ΠΡΠ΅ΡΠΊΠ° fΒ»SELECT * FROM students WHERE name = {arbitrary_string}Β» )
- ΠΠΎΠ±Π°Π²Π΅Π½ ΡΠΈΠΏ TypeVarTuple, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ TypeVar, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π΅ Π΅Π΄ΠΈΠ½ ΡΠΈΠΏ, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±ΡΠΎΠΉ ΡΠΈΠΏΠΎΠ²Π΅.
- Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠΎΠ΄ΡΠ» tomllib Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΏΠ°ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° TOML.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΠ½ΠΈΡΠΈ (TypedDict) Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈ Required ΠΈ NotRequired Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΠΈ Π½Π΅Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±ΡΠ²Π΅Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° ΡΠ° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ Π·Π° ΠΏΠΎΠΏΡΠ»Π²Π°Π½Π΅, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ total Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {Β«titleΒ»: Β«Black PantherΒ», Β«yearΒ»: 2018} # OK m2: Movie = {Β«titleΒ»: Β«Star WarsΒ»} # OK (ΠΏΠΎΠ»Π΅ΡΠΎ year Π΅ Π½Π΅Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ) m3: Movie = {Β«yearΒ»: 2022} # ΠΡΠ΅ΡΠΊΠ°, Π½Π΅ Π΅ ΠΏΠΎΠΏΡΠ»Π½Π΅Π½ΠΎ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΏΠΎΠ»Π΅ title)
- Π ΠΌΠΎΠ΄ΡΠ»Π° asyncio Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΊΠ»Π°Ρ TaskGroup Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ, ΡΠ°ΠΊΠ°Ρ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΡΠΏΠ° Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈ Π² Π³ΡΡΠΏΠ°ΡΠ° ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(β¦)) task2 = tg.create_task(another_coro(β¦)) print(Β«Π Π΄Π²Π΅ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅Π³Π° ΡΠ° Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ.Β»)
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ Π·Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ @dataclass_transform, ΠΏΡΠΈ ΡΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠ±Π΅ΠΊΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° @dataclasses.dataclass. Π ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΡ CustomerModel ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ ΠΊΠ»Π°Ρ Ρ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° @dataclasses.dataclass, Ρ.Π΅. ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄ __init__, Π΄ΠΎΠΏΡΡΠΊΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ id ΠΈ name. @dataclass_transform() class ModelBase: β¦ class CustomerModel(ModelBase): id: int name: str
- Π ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠ°Π·ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠΎΠΌΠ°ΡΠ½Π° Π³ΡΡΠΏΠ° ((?>β¦)) ΠΈ ΡΠ΅Π²Π½ΠΈΠ²ΠΈ (possessive) ΠΊΠ²Π°Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ (*+, ++, ?+, {m,n}+).
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΡΠ° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Β«-PΒ» ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° PYTHONSAFEPATH Π·Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΎΠΏΠ°ΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΠΏΡΡΠΈΡΠ° ΠΊΡΠΌ sys.path.
- Π‘ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° py.exe Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Windows, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Β«-V:<company>/{tag}Β» Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Β«-<major>.<minor>Β».
- ΠΠ½ΠΎΠ³ΠΎ ΠΎΡ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΠ΅ Π² C API ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈ Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΈ inline-ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΠ±ΡΠ²Π΅Π½ΠΈ ΡΠ° Π·Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΈ Π² Π²Π΅ΡΡΠΈΡ Python 3.13 ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ΠΈ sunau. ΠΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΈ ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ PyUnicode_Encode*.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
