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

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

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

ืชื•ืกืคื•ืช ื—ื“ืฉื•ืช ืœืคื™ื™ืชื•ืŸ 3.10 ื›ื•ืœืœื•ืช:

  • ื”ื˜ืžื™ืข ืื•ืคืจื˜ื•ืจื™ื ืฉืœ "ื”ืชืืžื”" ื•"ืžืงืจื”" ืœื”ืชืืžืช ืชื‘ื ื™ื•ืช, ื”ืžืฉืคืจื™ื ืืช ืงืจื™ืืช ื”ืงื•ื“, ืžืคืฉื˜ื™ื ืืช ื”ื”ืชืืžื” ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ Python ืฉืจื™ืจื•ืชื™ื™ื ื•ืžื’ื“ื™ืœื™ื ืืช ืืžื™ื ื•ืช ื”ืงื•ื“ ื‘ืืžืฆืขื•ืช ื‘ื“ื™ืงืช ืกื•ื’ ืกื˜ื˜ื™ ืžืชืงื“ื. ื”ื™ื™ืฉื•ื ื“ื•ืžื” ืžืื•ื“ ืœืื•ืคืจื˜ื•ืจ "ื”ืชืืžื”" ื”ืžืกื•ืคืง ื‘-Scala, Rust ื•-F#, ืืฉืจ ืžืฉื•ื•ื” ืืช ื”ืชื•ืฆืื” ืฉืœ ื‘ื™ื˜ื•ื™ ืฉืฆื•ื™ืŸ ืขื ืจืฉื™ืžื” ืฉืœ ืชื‘ื ื™ื•ืช ื”ืจืฉื•ืžื•ืช ื‘ื‘ืœื•ืงื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ื”ืื•ืคืจื˜ื•ืจ "case".

    def http_error(status): ืกื˜ื˜ื•ืก ื”ืชืืžื”: ืžืงืจื” 400: ื”ื—ื–ืจืช ืžืงืจื” "Bad request" case 401|403|404: ื”ื—ื–ืจื” "Not allowed" ืžืงืจื” 418: ื”ื—ื–ืจื” "I'm a teapot" case _: return "Something else"

    ืืคืฉืจ ืœืคืจืง ืื•ื‘ื™ื™ืงื˜ื™ื, ื˜ื•ืคืœื™ื, ืจืฉื™ืžื•ืช ื•ืจืฆืคื™ื ืฉืจื™ืจื•ืชื™ื™ื ื›ื“ื™ ืœืื’ื“ ืžืฉืชื ื™ื ืขืœ ืกืžืš ืขืจื›ื™ื ืงื™ื™ืžื™ื. ืžื•ืชืจ ืœื”ื’ื“ื™ืจ ืชื‘ื ื™ื•ืช ืžืงื•ื ื ื•ืช, ืœื”ืฉืชืžืฉ ื‘ืชื ืื™ "ืื" ื ื•ืกืคื™ื ื‘ืชื‘ื ื™ืช, ืœื”ืฉืชืžืฉ ื‘ืžืกื›ื•ืช ("[x, y, *rest]"), ืžื™ืคื•ื™ ืžืคืชื—/ืขืจืš (ืœื“ื•ื’ืžื”, {"ืจื•ื—ื‘ ืคืก": b, "ืฉื”ื™ื™ื” โ€: l} ื›ื“ื™ ืœื—ืœืฅ ืขืจื›ื™ "ืจื•ื—ื‘ ืคืก" ื•-"ื”ืฉื”ื™ื”" ืžืžื™ืœื•ืŸ), ืœื—ืœืฅ ืชื‘ื ื™ื•ืช ืžืฉื ื” (":=" ืื•ืคืจื˜ื•ืจ), ื”ืฉืชืžืฉ ื‘ืงื‘ื•ืขื™ื ื‘ืขืœื™ ืฉื ื‘ืชื‘ื ื™ืช. ื‘ืžื—ืœืงื•ืช, ื ื™ืชืŸ ืœื”ืชืื™ื ืื™ืฉื™ืช ืืช ื”ืชื ื”ื’ื•ืช ื”ื”ืชืืžื” ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช "__match__()".

    ืž-dataclasses ื™ื™ื‘ื•ื โ€‹โ€‹dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("ืžืงื•ื ืื—ืจ") case _: print("ืœื ื ืงื•ื“ื”") ื”ืชืืžื” point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x,y): print(f"ืœื ื‘ืืœื›ืกื•ืŸ") ืื“ื•ื, ื™ืจื•ืง, BLUE = 0, 1, 2 ื”ืชืืžืช ืฆื‘ืข: case RED: print(โ€œืื ื™ ืจื•ืื” ืื“ื•ื!โ€) case GREEN: print(โ€œGrass is greenโ€) case BLUE: print(โ€œI'm feeling the blues :(โ€œ)

  • ื›ืขืช ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืกื•ื’ืจื™ื™ื ื‘ืžืฉืคื˜ with ื›ื“ื™ ืœืคืฆืœ ืืช ื”ื”ื’ื“ืจื” ืฉืœ ืื•ืกืฃ ืฉืœ ืžื ื”ืœื™ ื”ืงืฉืจ ืขืœ ืคื ื™ ืžืกืคืจ ืงื•ื•ื™ื. ืžื•ืชืจ ื’ื ืœื”ืฉืื™ืจ ืคืกื™ืง ืื—ืจื™ ืžื ื”ืœ ื”ื”ืงืฉืจ ื”ืกื•ืคื™ ื‘ืงื‘ื•ืฆื”: ืขื ( CtxManager1() ื›ื“ื•ื’ืžื”1, CtxManager2() ื›ื“ื•ื’ืžื”2, CtxManager3() ื›ื“ื•ื’ืžื”3, ): ...
  • ื“ื™ื•ื•ื— ืžืฉื•ืคืจ ืฉืœ ืžื™ืงื•ื ื”ืงื•ื“ ืฉืœ ืฉื’ื™ืื•ืช ื”ืงืฉื•ืจื•ืช ืœืกื•ื’ืจื™ื ืœื ืกื’ื•ืจื™ื ื•ืžืจื›ืื•ืช ื‘ืžื™ืœื•ืœื™ ืžื—ืจื•ื–ืช. ืœื“ื•ื’ืžื”, ื›ืืฉืจ ื™ืฉ ืกื“ ืกื’ื•ืจ ืœื ืกื’ื•ืจ, ื‘ืžืงื•ื ืœื“ื•ื•ื— ืขืœ ืฉื’ื™ืืช ืชื—ื‘ื™ืจ ื‘ืžื‘ื ื” ื”ื‘ื, ื”ืžืฆื‘ื™ืข ื›ืขืช ืžื“ื’ื™ืฉ ืืช ื”ืกื•ื’ืจ ื”ืคื•ืชื— ื•ืžืฆื™ื™ืŸ ืฉืื™ืŸ ื‘ืœื•ืง ืกื’ื™ืจื”. ืงื•ื‘ืฅ "example.py", ืฉื•ืจื” 1 ืฆืคื•ื™ = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ืžืขื•ืœื ืœื ื”ื™ื” ืกื’ื•ืจ

    ื ื•ืกืคื• ืขื•ื“ ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ืžื™ื•ื—ื“ื•ืช ื‘ืชื—ื‘ื™ืจ: ื—ืกืจ ืกืžืœ ":" ืœืคื ื™ ื‘ืœื•ืง ื•ื‘ืžื™ืœื•ื ื™ื, ืื™ ื”ืคืจื“ืช ื˜ื•ืคืœื” ืขื ืกื•ื’ืจื™ื™ื, ื—ืกืจ ืคืกื™ืง ื‘ืจืฉื™ืžื•ืช, ืฆื™ื•ืŸ ื‘ืœื•ืง "ื ืกื”" ืœืœื "ืœืžืขื˜" ื•"ืกื•ืฃ ืกื•ืฃ", ื‘ืืžืฆืขื•ืช "= " ื‘ืžืงื•ื "= =" ื‘ื”ืฉื•ื•ืื•ืช, ืฆื™ื•ืŸ *-ื‘ื™ื˜ื•ื™ื™ื ื‘-f-strings. ื‘ื ื•ืกืฃ, ื”ื•ื ืžื‘ื˜ื™ื— ืฉื›ืœ ื”ื‘ื™ื˜ื•ื™ ื”ื‘ืขื™ื™ืชื™ ื™ื•ื“ื’ืฉ, ืœื ืจืง ื”ื”ืชื—ืœื”, ื•ืžื™ื“ืข ืžืคื•ืจืฉ ื™ื•ืชืจ ืขืœ ื”ื”ืงืฉืจ ืฉืœ ืฉื’ื™ืื•ืช ื”ืงืฉื•ืจื•ืช ื‘ื”ื–ื—ื” ืฉื’ื•ื™ื”. >>> def foo(): ... if lel: ... x = 2 ืงื•ื‘ืฅ " ", ืฉื•ืจื” 3 x = 2 ^ IndentationError: ืฆืคื™ ืœื—ืกื•ื ืžื•ื–ื— ืื—ืจื™ ื”ืฆื”ืจืช 'if' ื‘ืฉื•ืจื” 2

    ื‘ืฉื’ื™ืื•ืช ืฉื ื’ืจืžื• ืžืฉื’ื™ืื•ืช ื”ืงืœื“ื” ื‘ืฉืžื•ืช ืฉืœ ืชื›ื•ื ื•ืช ื•ืฉืžื•ืช ืžืฉืชื ื™ื ื‘ืคื•ื ืงืฆื™ื”, ืžืชืงื‘ืœืช ื”ืžืœืฆื” ืขื ื”ืฉื ื”ื ื›ื•ืŸ. >>>collections.namedtoplo ืขืงื‘ื•ืช (ื”ืฉื™ื—ื” ื”ืื—ืจื•ื ื” ื”ืื—ืจื•ื ื”): ืงื•ื‘ืฅ ยซ ", ืฉื•ืจื” 1, ื‘ AttributeError: ืœืžื•ื“ื•ืœ 'ืื•ืกืคื™ื' ืื™ืŸ ืชื›ื•ื ื” 'namedtoplo'. ื”ืื ื”ืชื›ื•ื•ื ืช ืœ: namedtuple?

  • ืขื‘ื•ืจ ื›ืœื™ื ืœืื™ืชื•ืจ ื‘ืื’ื™ื ื•ืคืจื•ืคื™ืœื™ื, ืื™ืจื•ืขื™ ืžืขืงื‘ ืžืกื•ืคืงื™ื ืขื ืžืกืคืจื™ ื”ืฉื•ืจื•ืช ื”ืžื“ื•ื™ืงื™ื ืฉืœ ื”ืงื•ื“ ื”ืžื‘ื•ืฆืข.
  • ื”ื•ืกืคื” ืืช ื”ื”ื’ื“ืจื” sys.flags.warn_default_encoding ื›ื“ื™ ืœื”ืฆื™ื’ ืื–ื”ืจื” ืœื’ื‘ื™ ืฉื’ื™ืื•ืช ืืคืฉืจื™ื•ืช ื”ืงืฉื•ืจื•ืช ืœ-TextIOWrapper ื•-open() ื‘ืขื™ื‘ื•ื“ ืงื‘ืฆื™ื ืžืงื•ื“ื“ื™ื ื‘-UTF-8 ืžื‘ืœื™ ืœืฆื™ื™ืŸ ื‘ืžืคื•ืจืฉ ืืช ื”ืืคืฉืจื•ืช 'encoding=ยปutf-8โ€ณ' (ืงื™ื“ื•ื“ ASCII ืžืฉืžืฉ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ) . ื”ืžื”ื“ื•ืจื” ื”ื—ื“ืฉื” ืžืกืคืงืช ื’ื ืืช ื”ื™ื›ื•ืœืช ืœืฆื™ื™ืŸ ืขืจืš 'encoding="locale"' ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืงื™ื“ื•ื“ ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžืงื•ื ื”ื ื•ื›ื—ื™.
  • ืœืžื•ื“ื•ืœ ื”ื”ืงืœื“ื” ื ื•ืกืฃ ืื•ืคืจื˜ื•ืจ ื—ื“ืฉ, ื”ืžืกืคืง ื›ืœื™ื ืœืฆื™ื•ืŸ ื”ืขืจื•ืช ืกื•ื’, ื”ืžืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ืชื—ื‘ื™ืจ "X | Y" ื›ื“ื™ ืœื‘ื—ื•ืจ ืื—ื“ ืžื”ืกื•ื’ื™ื (ืกื•ื’ X ืื• ืกื•ื’ Y). def square(ืžืกืคืจ: int | float) -> int | float: ืžืกืคืจ ื”ื—ื–ืจื” ** 2 ืฉื•ื•ื” ืขืจืš ืœืžื‘ื ื” ืฉื ืชืžืš ื‘ืขื‘ืจ: def square(ืžืกืคืจ: Union[int, float]) -> Union[int, float]: ืžืกืคืจ ื”ื—ื–ืจื” ** 2
  • ืื•ืคืจื˜ื•ืจ Concatenate ื•ื”ืžืฉืชื ื” ParamSpec ื ื•ืกืคื• ืœืžื•ื“ื•ืœ ื”ื”ืงืœื“ื”, ื”ืžืืคืฉืจื™ื ืœื”ืขื‘ื™ืจ ืžื™ื“ืข ื ื•ืกืฃ ืœื‘ื“ื™ืงืช ืกื•ื’ ืกื˜ื˜ื™ ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-Callable. ืžื•ื“ื•ืœ ื”ื”ืงืœื“ื” ืžื•ืกื™ืฃ ื’ื ืขืจื›ื™ื ืžื™ื•ื—ื“ื™ื TypeGuard ืœื”ื•ืกืคืช ื”ืขืจื•ืช ืœืคื•ื ืงืฆื™ื•ืช ื”ื’ื ืช ืกื•ื’ ื•-TypeAlias โ€‹โ€‹ืœื”ื’ื“ืจื” ืžืคื•ืจืฉืช ืฉืœ ื›ื™ื ื•ื™ ืกื•ื’. StrCache: TypeAlias โ€‹โ€‹โ€‹โ€‹= 'Cache[str]' # ื›ื™ื ื•ื™ ืžืกื•ื’
  • ื”ืคื•ื ืงืฆื™ื” zip() ืžื™ื™ืฉืžืช ื“ื’ืœ "strict" ืื•ืคืฆื™ื•ื ืœื™, ืืฉืจ, ื›ืืฉืจ ืฆื•ื™ืŸ, ื‘ื•ื“ืง ืื ื”ืืจื’ื•ืžื ื˜ื™ื ื”ืžื•ืขื‘ืจื™ื ื”ื ื‘ืื•ืชื• ืื•ืจืš. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (ื”ืฉื™ื—ื” ื”ืื—ืจื•ื ื” ื”ืื—ืจื•ื ื” ): โ€ฆ ValueError: zip() ืืจื’ื•ืžื ื˜ 2 ืืจื•ืš ืžืืจื’ื•ืžื ื˜ 1
  • ืคื•ื ืงืฆื™ื•ืช ืžื•ื‘ื ื•ืช ื—ื“ืฉื•ืช aiter() ื•-anext() ืžื•ืฆืขื•ืช ืขื ื™ื™ืฉื•ื ืื ืœื•ื’ื™ื ืืกื™ื ื›ืจื•ื ื™ื™ื ืœืคื•ื ืงืฆื™ื•ืช iter() ื•-next().
  • ื”ืขื‘ื•ื“ื” ืฉืœ ื”ื‘ื ืื™ื str(), bytes() ื•- bytearray() ื‘ืขืช ืขื‘ื•ื“ื” ืขื ืื•ื‘ื™ื™ืงื˜ื™ื ืงื˜ื ื™ื ื”ื•ืืฆื” ื‘-30-40%.
  • ื”ืคื—ื™ืช ืืช ืžืกืคืจ ืคืขื•ืœื•ืช ื”ื™ื™ื‘ื•ื โ€‹โ€‹ื‘ืžื•ื“ื•ืœ runpy. ื”ืคืงื•ื“ื” "python3 -m module_name" ืคื•ืขืœืช ื›ืขืช ื‘ืžืžื•ืฆืข ืคื™ 1.4 ืžื”ืจ ื™ื•ืชืจ ืขืงื‘ ื”ืคื—ืชืช ื”ืžื•ื“ื•ืœื™ื ื”ืžื™ื•ื‘ืื™ื ืž-69 ืœ-51.
  • ื”ื•ืจืืช LOAD_ATTR ืžืฉืชืžืฉืช ื‘ืžื ื’ื ื•ืŸ ืžื˜ืžื•ืŸ ืขื‘ื•ืจ ืงื•ื“ื™ื ื‘ื•ื“ื“ื™ื, ืžื” ืฉืื™ืคืฉืจ ืœื”ืื™ืฅ ืืช ื”ืขื‘ื•ื“ื” ืขื ืชื›ื•ื ื•ืช ืจื’ื™ืœื•ืช ื‘ืขื“ 36%, ื•ืขื ื—ืจื™ืฆื™ื ื‘ืขื“ 44%.
  • ื‘ืขืช ื‘ื ื™ื™ืช Python ืขื ืืคืฉืจื•ืช "--enable-optimizations", ืžืฆื‘ "-fno-semantic-interposition" ืžื•ืคืขืœ ื›ืขืช, ื”ืžืืคืฉืจ ืœื”ืื™ืฅ ืืช ื”ืžืชื•ืจื’ืžืŸ ืขื“ 30% ื‘ื”ืฉื•ื•ืื” ืœื‘ื ื™ื™ื” ืขื "--enable-shared " ืืคืฉืจื•ืช.
  • ืžื•ื“ื•ืœื™ ื”-hashlib ื•-ssl ื”ื•ืกื™ืคื• ืชืžื™ื›ื” ื‘-OpenSSL 3.0.0 ื•ื”ืคืกื™ืงื• ืœืชืžื•ืš ื‘ื’ืจืกืื•ืช OpenSSL ื™ืฉื ื•ืช ืž-1.1.1.
  • ื”ืžื ืชื— ื”ื™ืฉืŸ ื”ื•ืกืจ, ืืฉืจ ื”ื•ื—ืœืฃ ื‘ืขื ืฃ ื”ืงื•ื“ื ืขืœ ื™ื“ื™ ืžื ืชื— PEG (Parsing Expression Grammar). ืžื•ื“ื•ืœ ื”ืคื•ืจืžื˜ ื”ื•ืกืจ. ืคืจืžื˜ืจ ื”ืœื•ืœืื” ื”ื•ืกืจ ืžื”ืžืžืฉืง API ืฉืœ asyncio. ืฉื™ื˜ื•ืช ืฉื”ื•ืฆืื• ืžืฉื™ืžื•ืฉ ื‘ืขื‘ืจ ื”ื•ืกืจื•. ื”ืคื•ื ืงืฆื™ื•ืช Py_UNICODE_str* ื”ืžื˜ืคืœื•ืช ื‘ืžื—ืจื•ื–ื•ืช Py_UNICODE* ื”ื•ืกืจื•.
  • ืžื•ื“ื•ืœ distutils ื”ื•ืฆื ืžืฉื™ืžื•ืฉ ื•ื”ื•ื ืžืชื•ื›ื ืŸ ืœื”ืกืจื” ื‘- Python 3.12. ื‘ืžืงื•ื distutils, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื”ื”ืชืงื ื”, ื”ืืจื™ื–ื”, ื”ืคืœื˜ืคื•ืจืžื”, ื”-shutil, subprocess ื•-sysconfig. ืžื‘ื ื” wstr ื‘- PyUnicodeObject ื”ื•ืฆื ืžืฉื™ืžื•ืฉ ื•ืชื•ื–ืžืŸ ืœื”ืกืจื”.

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

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