ΠΠΎ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ°Π·Π²ΠΎΡ, ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΎ Π΅ Π·Π½Π°ΡΠ°ΡΠ½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΠΎΡ ΡΠ°Π·ΠΈΠΊ 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(Β«Both tasks have completed now.Β»)
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ @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