ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช Python 3.11

ืœืื—ืจ ืฉื ื” ืฉืœ ืคื™ืชื•ื—, ืคื•ืจืกื ื”ืžื”ื“ื•ืจื” ื”ืžืฉืžืขื•ืชื™ืช ืฉืœ ืฉืคืช ื”ืชื›ื ื•ืช Python 3.11. ื”ืกื ื™ืฃ ื”ื—ื“ืฉ ื™ื™ืชืžืš ืœืžืฉืš ืฉื ื” ื•ื—ืฆื™, ื•ืœืื—ืจ ืžื›ืŸ ื‘ืžืฉืš ืฉืœื•ืฉ ืฉื ื™ื ื•ื—ืฆื™ ื ื•ืกืคื•ืช ื™ื•ืคืงื• ืœื• ืชื™ืงื•ื ื™ื ืœื‘ื™ื˜ื•ืœ ื ืงื•ื“ื•ืช ืชื•ืจืคื”.

ื‘ืžืงื‘ื™ืœ, ื”ื—ืœื• ื‘ื“ื™ืงื•ืช ืืœืคื ืฉืœ ืกื ื™ืฃ Python 3.12 (ื‘ื”ืชืื ืœืœื•ื— ื”ื–ืžื ื™ื ืฉืœ ื”ืคื™ืชื•ื— ื”ื—ื“ืฉ, ื”ืขื‘ื•ื“ื” ืขืœ ืกื ื™ืฃ ื—ื“ืฉ ืžืชื—ื™ืœื” ื—ืžื™ืฉื” ื—ื•ื“ืฉื™ื ืœืคื ื™ ื™ืฆื™ืืช ื”ืกื ื™ืฃ ื”ืงื•ื“ื ื•ืžื’ื™ืขื” ืœืฉืœื‘ ื‘ื“ื™ืงื•ืช ืืœืคื ืขื“ ื”ืฉื—ืจื•ืจ ื”ื‘ื. ). ื”ืกื ื™ืฃ ืฉืœ Python 3.12 ื™ื”ื™ื” ื‘ืžื”ื“ื•ืจืช ืืœืคื ืœืžืฉืš ืฉื‘ืขื” ื—ื•ื“ืฉื™ื, ื‘ืžื”ืœื›ื ื™ืชื•ื•ืกืคื• ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื•ื™ืชื•ืงื ื• ื‘ืื’ื™ื. ืœืื—ืจ ืžื›ืŸ, ื™ื™ื‘ื—ื ื• ื’ืจืกืื•ืช ื‘ื˜ื ืœืžืฉืš ืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื, ื‘ืžื”ืœื›ื ืชื™ืืกืจ ื”ื•ืกืคืช ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื ื•ื›ืœ ืชืฉื•ืžืช ื”ืœื‘ ืชื•ืงื“ืฉ ืœืชื™ืงื•ืŸ ื‘ืื’ื™ื. ื‘ื—ื•ื“ืฉื™ื™ื ื”ืื—ืจื•ื ื™ื ืœืคื ื™ ื”ืฉื—ืจื•ืจ, ื”ืกื ื™ืฃ ื™ื”ื™ื” ื‘ืฉืœื‘ ืžื•ืขืžื“ ืœืฉื—ืจื•ืจ, ื‘ื• ื™ื‘ื•ืฆืข ื™ื™ืฆื•ื‘ ืกื•ืคื™.

ืชื•ืกืคื•ืช ื—ื“ืฉื•ืช ืœืคื™ื™ืชื•ืŸ 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%.

    ืžื ื’ื ื•ืŸ ื”-bytecode caching ืขื•ืฆื‘ ืžื—ื“ืฉ, ืžื” ืฉื”ืคื—ื™ืช ืืช ื–ืžืŸ ื”ื”ืคืขืœื” ืฉืœ ื”ืžืชื•ืจื’ืžืŸ ื‘-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 ื›ื“ื™ ืœื”ื•ืกื™ืฃ ื”ืขืจื•ืช ืœืฉื™ื˜ื•ืช ื”ืžื—ื–ื™ืจื•ืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื” ืฉืœื• ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื™ื•ืชืจ ืžืืฉืจ ืฉื™ืžื•ืฉ ื‘-TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • ื ื•ืกืฃ ืกื•ื’ LiteralString ืžื™ื•ื—ื“ ืฉื™ื›ื•ืœ ืœื›ืœื•ืœ ืจืง ืœื™ื˜ืจืœื™ ืžื—ืจื•ื–ืช ื”ืชื•ืืžื™ื ืœืกื•ื’ LiteralString (ื›ืœื•ืžืจ ืžื—ืจื•ื–ื•ืช ื—ืฉื•ืคื•ืช ื•-LiteralString, ืืš ืœื ืžื—ืจื•ื–ื•ืช ืฉืจื™ืจื•ืชื™ื•ืช ืื• ืžืฉื•ืœื‘ื•ืช). ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืกื•ื’ LiteralString ื›ื“ื™ ืœื”ื’ื‘ื™ืœ ืืช ื”ืขื‘ืจืช ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื—ืจื•ื–ืช ืœืคื•ื ืงืฆื™ื•ืช, ื”ื—ืœืคื” ืฉืจื™ืจื•ืชื™ืช ืฉืœ ื—ืœืงื™ ืžื—ืจื•ื–ื•ืช ืฉื‘ื”ืŸ ื™ื›ื•ืœ ืœื”ื•ื‘ื™ืœ ืœืคื’ื™ืขื•ื™ื•ืช, ืœืžืฉืœ, ื‘ืขืช ื™ืฆื™ืจืช ืžื—ืจื•ื–ื•ืช ืขื‘ื•ืจ ืฉืื™ืœืชื•ืช SQL ืื• ืคืงื•ื“ื•ืช ืžืขื˜ืคืช. 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) # Error 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" } # ืื™ืฉื•ืจ (ืฉื“ื” ื”ืฉื ื” ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™) m3: ืกืจื˜ = {"ืฉื ื”": 2022} # ืฉื’ื™ืื”, ืฉื“ื” ื”ื›ื•ืชืจืช ื”ื ื“ืจืฉ ืœื ืžื•ืœื)
  • ืžื—ืœืงืช ื”-TaskGroup ื ื•ืกืคื” ืœืžื•ื“ื•ืœ asyncio ืขื ื”ื˜ืžืขืช ืžื ื”ืœ ื”ืงืฉืจ ืืกื™ื ื›ืจื•ื ื™ ืฉืžื—ื›ื” ืœื”ืฉืœืžืช ืงื‘ื•ืฆืช ืžืฉื™ืžื•ืช. ื”ื•ืกืคืช ืžืฉื™ืžื•ืช ืœืงื‘ื•ืฆื” ืžืชื‘ืฆืขืช ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช 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 decorator ืขื‘ื•ืจ ืžื—ืœืงื•ืช, ืฉื™ื˜ื•ืช ื•ืคื•ื ืงืฆื™ื•ืช, ื›ืืฉืจ ืฆื•ื™ืŸ, ืžืขืจื›ืช ื‘ื“ื™ืงืช ื”ืกื•ื’ ื”ืกื˜ื˜ื™ืช ืžืชื™ื™ื—ืกืช ืœืื•ื‘ื™ื™ืงื˜ ื›ืื™ืœื• ื”ื™ื ืžืฉืชืžืฉืช ื‘[email protected] decorator. ื‘ื“ื•ื’ืžื” ืœืžื˜ื”, ื”ืžื—ืœืงื” CustomerModel, ื‘ืขืช ื‘ื“ื™ืงืช ืกื•ื’ื™ื, ืชืขื•ื‘ื“ ื‘ื“ื•ืžื” ืœืžื—ืœืงื” ืขื ื”ื“ืงื•ืจื˜ื•ืจ @dataclasses.dataclass, ื›ืœื•ืžืจ. ื›ื‘ืขืœืช ืฉื™ื˜ื” __init__ ืฉืžืงื‘ืœืช ืžืฉืชื ื™ ืžื–ื”ื” ื•ืฉื. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: 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 ื”ื•ืฆืื• ืžืฉื™ืžื•ืฉ ื•ื™ื•ืกืจื• ื‘ืคื™ื™ืชื•ืŸ ืฉื—ืจื•ืจ 3.13. ื”ื•ืกืจื• ืคื•ื ืงืฆื™ื•ืช PyUnicode_Encode*.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”