1**************************** 2 What's New In Python 3.10 3**************************** 4 5:Editor: Pablo Galindo Salgado 6 7.. Rules for maintenance: 8 9 * Anyone can add text to this document. Do not spend very much time 10 on the wording of your changes, because your text will probably 11 get rewritten to some degree. 12 13 * The maintainer will go through Misc/NEWS periodically and add 14 changes; it's therefore more important to add your changes to 15 Misc/NEWS than to this file. 16 17 * This is not a complete list of every single change; completeness 18 is the purpose of Misc/NEWS. Some changes I consider too small 19 or esoteric to include. If such a change is added to the text, 20 I'll just remove it. (This is another reason you shouldn't spend 21 too much time on writing your addition.) 22 23 * If you want to draw your new text to the attention of the 24 maintainer, add 'XXX' to the beginning of the paragraph or 25 section. 26 27 * It's OK to just add a fragmentary note about a change. For 28 example: "XXX Describe the transmogrify() function added to the 29 socket module." The maintainer will research the change and 30 write the necessary text. 31 32 * You can comment out your additions if you like, but it's not 33 necessary (especially when a final release is some months away). 34 35 * Credit the author of a patch or bugfix. Just the name is 36 sufficient; the e-mail address isn't necessary. 37 38 * It's helpful to add the bug/patch number as a comment: 39 40 XXX Describe the transmogrify() function added to the socket 41 module. 42 (Contributed by P.Y. Developer in :issue:`12345`.) 43 44 This saves the maintainer the effort of going through the git log 45 when researching a change. 46 47This article explains the new features in Python 3.10, compared to 3.9. 48Python 3.10 was released on October 4, 2021. 49For full details, see the :ref:`changelog <changelog>`. 50 51Summary -- Release highlights 52============================= 53 54.. This section singles out the most important changes in Python 3.10. 55 Brevity is key. 56 57 58.. PEP-sized items next. 59 60New syntax features: 61 62* :pep:`634`, Structural Pattern Matching: Specification 63* :pep:`635`, Structural Pattern Matching: Motivation and Rationale 64* :pep:`636`, Structural Pattern Matching: Tutorial 65* :issue:`12782`, Parenthesized context managers are now officially allowed. 66 67New features in the standard library: 68 69* :pep:`618`, Add Optional Length-Checking To zip. 70 71Interpreter improvements: 72 73* :pep:`626`, Precise line numbers for debugging and other tools. 74 75New typing features: 76 77* :pep:`604`, Allow writing union types as X | Y 78* :pep:`612`, Parameter Specification Variables 79* :pep:`613`, Explicit Type Aliases 80* :pep:`647`, User-Defined Type Guards 81 82Important deprecations, removals or restrictions: 83 84* :pep:`644`, Require OpenSSL 1.1.1 or newer 85* :pep:`632`, Deprecate distutils module. 86* :pep:`623`, Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. 87* :pep:`624`, Remove Py_UNICODE encoder APIs 88* :pep:`597`, Add optional EncodingWarning 89 90 91New Features 92============ 93 94.. _whatsnew310-pep563: 95 96Parenthesized context managers 97------------------------------ 98 99Using enclosing parentheses for continuation across multiple lines 100in context managers is now supported. This allows formatting a long 101collection of context managers in multiple lines in a similar way 102as it was previously possible with import statements. For instance, 103all these examples are now valid: 104 105.. code-block:: python 106 107 with (CtxManager() as example): 108 ... 109 110 with ( 111 CtxManager1(), 112 CtxManager2() 113 ): 114 ... 115 116 with (CtxManager1() as example, 117 CtxManager2()): 118 ... 119 120 with (CtxManager1(), 121 CtxManager2() as example): 122 ... 123 124 with ( 125 CtxManager1() as example1, 126 CtxManager2() as example2 127 ): 128 ... 129 130it is also possible to use a trailing comma at the end of the 131enclosed group: 132 133.. code-block:: python 134 135 with ( 136 CtxManager1() as example1, 137 CtxManager2() as example2, 138 CtxManager3() as example3, 139 ): 140 ... 141 142This new syntax uses the non LL(1) capacities of the new parser. 143Check :pep:`617` for more details. 144 145(Contributed by Guido van Rossum, Pablo Galindo and Lysandros Nikolaou 146in :issue:`12782` and :issue:`40334`.) 147 148 149Better error messages 150--------------------- 151 152SyntaxErrors 153~~~~~~~~~~~~ 154 155When parsing code that contains unclosed parentheses or brackets the interpreter 156now includes the location of the unclosed bracket of parentheses instead of displaying 157*SyntaxError: unexpected EOF while parsing* or pointing to some incorrect location. 158For instance, consider the following code (notice the unclosed '{'): 159 160.. code-block:: python 161 162 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 163 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, 164 some_other_code = foo() 165 166Previous versions of the interpreter reported confusing places as the location of 167the syntax error: 168 169.. code-block:: python 170 171 File "example.py", line 3 172 some_other_code = foo() 173 ^ 174 SyntaxError: invalid syntax 175 176but in Python 3.10 a more informative error is emitted: 177 178.. code-block:: python 179 180 File "example.py", line 1 181 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 182 ^ 183 SyntaxError: '{' was never closed 184 185 186In a similar way, errors involving unclosed string literals (single and triple 187quoted) now point to the start of the string instead of reporting EOF/EOL. 188 189These improvements are inspired by previous work in the PyPy interpreter. 190 191(Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in 192:issue:`40176`.) 193 194:exc:`SyntaxError` exceptions raised by the interpreter will now highlight the 195full error range of the expression that constitutes the syntax error itself, 196instead of just where the problem is detected. In this way, instead of displaying 197(before Python 3.10): 198 199.. code-block:: python 200 201 >>> foo(x, z for z in range(10), t, w) 202 File "<stdin>", line 1 203 foo(x, z for z in range(10), t, w) 204 ^ 205 SyntaxError: Generator expression must be parenthesized 206 207now Python 3.10 will display the exception as: 208 209.. code-block:: python 210 211 >>> foo(x, z for z in range(10), t, w) 212 File "<stdin>", line 1 213 foo(x, z for z in range(10), t, w) 214 ^^^^^^^^^^^^^^^^^^^^ 215 SyntaxError: Generator expression must be parenthesized 216 217This improvement was contributed by Pablo Galindo in :issue:`43914`. 218 219A considerable amount of new specialized messages for :exc:`SyntaxError` exceptions 220have been incorporated. Some of the most notable ones are as follows: 221 222* Missing ``:`` before blocks: 223 224 .. code-block:: python 225 226 >>> if rocket.position > event_horizon 227 File "<stdin>", line 1 228 if rocket.position > event_horizon 229 ^ 230 SyntaxError: expected ':' 231 232 (Contributed by Pablo Galindo in :issue:`42997`.) 233 234* Unparenthesised tuples in comprehensions targets: 235 236 .. code-block:: python 237 238 >>> {x,y for x,y in zip('abcd', '1234')} 239 File "<stdin>", line 1 240 {x,y for x,y in zip('abcd', '1234')} 241 ^ 242 SyntaxError: did you forget parentheses around the comprehension target? 243 244 (Contributed by Pablo Galindo in :issue:`43017`.) 245 246* Missing commas in collection literals and between expressions: 247 248 .. code-block:: python 249 250 >>> items = { 251 ... x: 1, 252 ... y: 2 253 ... z: 3, 254 File "<stdin>", line 3 255 y: 2 256 ^ 257 SyntaxError: invalid syntax. Perhaps you forgot a comma? 258 259 (Contributed by Pablo Galindo in :issue:`43822`.) 260 261* Multiple Exception types without parentheses: 262 263 .. code-block:: python 264 265 >>> try: 266 ... build_dyson_sphere() 267 ... except NotEnoughScienceError, NotEnoughResourcesError: 268 File "<stdin>", line 3 269 except NotEnoughScienceError, NotEnoughResourcesError: 270 ^ 271 SyntaxError: multiple exception types must be parenthesized 272 273 (Contributed by Pablo Galindo in :issue:`43149`.) 274 275* Missing ``:`` and values in dictionary literals: 276 277 .. code-block:: python 278 279 >>> values = { 280 ... x: 1, 281 ... y: 2, 282 ... z: 283 ... } 284 File "<stdin>", line 4 285 z: 286 ^ 287 SyntaxError: expression expected after dictionary key and ':' 288 289 >>> values = {x:1, y:2, z w:3} 290 File "<stdin>", line 1 291 values = {x:1, y:2, z w:3} 292 ^ 293 SyntaxError: ':' expected after dictionary key 294 295 (Contributed by Pablo Galindo in :issue:`43823`.) 296 297* ``try`` blocks without ``except`` or ``finally`` blocks: 298 299 .. code-block:: python 300 301 >>> try: 302 ... x = 2 303 ... something = 3 304 File "<stdin>", line 3 305 something = 3 306 ^^^^^^^^^ 307 SyntaxError: expected 'except' or 'finally' block 308 309 (Contributed by Pablo Galindo in :issue:`44305`.) 310 311* Usage of ``=`` instead of ``==`` in comparisons: 312 313 .. code-block:: python 314 315 >>> if rocket.position = event_horizon: 316 File "<stdin>", line 1 317 if rocket.position = event_horizon: 318 ^ 319 SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? 320 321 (Contributed by Pablo Galindo in :issue:`43797`.) 322 323* Usage of ``*`` in f-strings: 324 325 .. code-block:: python 326 327 >>> f"Black holes {*all_black_holes} and revelations" 328 File "<stdin>", line 1 329 (*all_black_holes) 330 ^ 331 SyntaxError: f-string: cannot use starred expression here 332 333 (Contributed by Pablo Galindo in :issue:`41064`.) 334 335IndentationErrors 336~~~~~~~~~~~~~~~~~ 337 338Many :exc:`IndentationError` exceptions now have more context regarding what kind of block 339was expecting an indentation, including the location of the statement: 340 341.. code-block:: python 342 343 >>> def foo(): 344 ... if lel: 345 ... x = 2 346 File "<stdin>", line 3 347 x = 2 348 ^ 349 IndentationError: expected an indented block after 'if' statement in line 2 350 351 352AttributeErrors 353~~~~~~~~~~~~~~~ 354 355When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer 356suggestions of similar attribute names in the object that the exception was 357raised from: 358 359.. code-block:: python 360 361 >>> collections.namedtoplo 362 Traceback (most recent call last): 363 File "<stdin>", line 1, in <module> 364 AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? 365 366(Contributed by Pablo Galindo in :issue:`38530`.) 367 368 .. warning:: 369 Notice this won't work if :c:func:`PyErr_Display` is not called to display the error 370 which can happen if some other custom error display function is used. This is a common 371 scenario in some REPLs like IPython. 372 373NameErrors 374~~~~~~~~~~ 375 376When printing :exc:`NameError` raised by the interpreter, :c:func:`PyErr_Display` 377will offer suggestions of similar variable names in the function that the exception 378was raised from: 379 380.. code-block:: python 381 382 >>> schwarzschild_black_hole = None 383 >>> schwarschild_black_hole 384 Traceback (most recent call last): 385 File "<stdin>", line 1, in <module> 386 NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole? 387 388(Contributed by Pablo Galindo in :issue:`38530`.) 389 390 .. warning:: 391 Notice this won't work if :c:func:`PyErr_Display` is not called to display the error, 392 which can happen if some other custom error display function is used. This is a common 393 scenario in some REPLs like IPython. 394 395 396PEP 626: Precise line numbers for debugging and other tools 397----------------------------------------------------------- 398 399PEP 626 brings more precise and reliable line numbers for debugging, profiling and coverage tools. 400Tracing events, with the correct line number, are generated for all lines of code executed and only for lines of code that are executed. 401 402The ``f_lineno`` attribute of frame objects will always contain the expected line number. 403 404The ``co_lnotab`` attribute of code objects is deprecated and will be removed in 3.12. 405Code that needs to convert from offset to line number should use the new ``co_lines()`` method instead. 406 407PEP 634: Structural Pattern Matching 408------------------------------------ 409 410Structural pattern matching has been added in the form of a *match statement* 411and *case statements* of patterns with associated actions. Patterns 412consist of sequences, mappings, primitive data types as well as class instances. 413Pattern matching enables programs to extract information from complex data types, 414branch on the structure of data, and apply specific actions based on different 415forms of data. 416 417Syntax and operations 418~~~~~~~~~~~~~~~~~~~~~ 419 420The generic syntax of pattern matching is:: 421 422 match subject: 423 case <pattern_1>: 424 <action_1> 425 case <pattern_2>: 426 <action_2> 427 case <pattern_3>: 428 <action_3> 429 case _: 430 <action_wildcard> 431 432A match statement takes an expression and compares its value to successive 433patterns given as one or more case blocks. Specifically, pattern matching 434operates by: 435 436 1. using data with type and shape (the ``subject``) 437 2. evaluating the ``subject`` in the ``match`` statement 438 3. comparing the subject with each pattern in a ``case`` statement 439 from top to bottom until a match is confirmed. 440 4. executing the action associated with the pattern of the confirmed 441 match 442 5. If an exact match is not confirmed, the last case, a wildcard ``_``, 443 if provided, will be used as the matching case. If an exact match is 444 not confirmed and a wildcard case does not exist, the entire match 445 block is a no-op. 446 447Declarative approach 448~~~~~~~~~~~~~~~~~~~~ 449 450Readers may be aware of pattern matching through the simple example of matching 451a subject (data object) to a literal (pattern) with the switch statement found 452in C, Java or JavaScript (and many other languages). Often the switch statement 453is used for comparison of an object/expression with case statements containing 454literals. 455 456More powerful examples of pattern matching can be found in languages such as 457Scala and Elixir. With structural pattern matching, the approach is "declarative" and 458explicitly states the conditions (the patterns) for data to match. 459 460While an "imperative" series of instructions using nested "if" statements 461could be used to accomplish something similar to structural pattern matching, 462it is less clear than the "declarative" approach. Instead the "declarative" 463approach states the conditions to meet for a match and is more readable through 464its explicit patterns. While structural pattern matching can be used in its 465simplest form comparing a variable to a literal in a case statement, its 466true value for Python lies in its handling of the subject's type and shape. 467 468Simple pattern: match to a literal 469~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 470 471Let's look at this example as pattern matching in its simplest form: a value, 472the subject, being matched to several literals, the patterns. In the example 473below, ``status`` is the subject of the match statement. The patterns are 474each of the case statements, where literals represent request status codes. 475The associated action to the case is executed after a match:: 476 477 def http_error(status): 478 match status: 479 case 400: 480 return "Bad request" 481 case 404: 482 return "Not found" 483 case 418: 484 return "I'm a teapot" 485 case _: 486 return "Something's wrong with the internet" 487 488If the above function is passed a ``status`` of 418, "I'm a teapot" is returned. 489If the above function is passed a ``status`` of 500, the case statement with 490``_`` will match as a wildcard, and "Something's wrong with the internet" is 491returned. 492Note the last block: the variable name, ``_``, acts as a *wildcard* and insures 493the subject will always match. The use of ``_`` is optional. 494 495You can combine several literals in a single pattern using ``|`` ("or"):: 496 497 case 401 | 403 | 404: 498 return "Not allowed" 499 500Behavior without the wildcard 501^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 502 503If we modify the above example by removing the last case block, the example 504becomes:: 505 506 def http_error(status): 507 match status: 508 case 400: 509 return "Bad request" 510 case 404: 511 return "Not found" 512 case 418: 513 return "I'm a teapot" 514 515Without the use of ``_`` in a case statement, a match may not exist. If no 516match exists, the behavior is a no-op. For example, if ``status`` of 500 is 517passed, a no-op occurs. 518 519Patterns with a literal and variable 520~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 521 522Patterns can look like unpacking assignments, and a pattern may be used to bind 523variables. In this example, a data point can be unpacked to its x-coordinate 524and y-coordinate:: 525 526 # point is an (x, y) tuple 527 match point: 528 case (0, 0): 529 print("Origin") 530 case (0, y): 531 print(f"Y={y}") 532 case (x, 0): 533 print(f"X={x}") 534 case (x, y): 535 print(f"X={x}, Y={y}") 536 case _: 537 raise ValueError("Not a point") 538 539The first pattern has two literals, ``(0, 0)``, and may be thought of as an 540extension of the literal pattern shown above. The next two patterns combine a 541literal and a variable, and the variable *binds* a value from the subject 542(``point``). The fourth pattern captures two values, which makes it 543conceptually similar to the unpacking assignment ``(x, y) = point``. 544 545Patterns and classes 546~~~~~~~~~~~~~~~~~~~~ 547 548If you are using classes to structure your data, you can use as a pattern 549the class name followed by an argument list resembling a constructor. This 550pattern has the ability to capture class attributes into variables:: 551 552 class Point: 553 x: int 554 y: int 555 556 def location(point): 557 match point: 558 case Point(x=0, y=0): 559 print("Origin is the point's location.") 560 case Point(x=0, y=y): 561 print(f"Y={y} and the point is on the y-axis.") 562 case Point(x=x, y=0): 563 print(f"X={x} and the point is on the x-axis.") 564 case Point(): 565 print("The point is located somewhere else on the plane.") 566 case _: 567 print("Not a point") 568 569Patterns with positional parameters 570^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 571 572You can use positional parameters with some builtin classes that provide an 573ordering for their attributes (e.g. dataclasses). You can also define a specific 574position for attributes in patterns by setting the ``__match_args__`` special 575attribute in your classes. If it's set to ("x", "y"), the following patterns 576are all equivalent (and all bind the ``y`` attribute to the ``var`` variable):: 577 578 Point(1, var) 579 Point(1, y=var) 580 Point(x=1, y=var) 581 Point(y=var, x=1) 582 583Nested patterns 584~~~~~~~~~~~~~~~ 585 586Patterns can be arbitrarily nested. For example, if our data is a short 587list of points, it could be matched like this:: 588 589 match points: 590 case []: 591 print("No points in the list.") 592 case [Point(0, 0)]: 593 print("The origin is the only point in the list.") 594 case [Point(x, y)]: 595 print(f"A single point {x}, {y} is in the list.") 596 case [Point(0, y1), Point(0, y2)]: 597 print(f"Two points on the Y axis at {y1}, {y2} are in the list.") 598 case _: 599 print("Something else is found in the list.") 600 601Complex patterns and the wildcard 602~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 603 604To this point, the examples have used ``_`` alone in the last case statement. 605A wildcard can be used in more complex patterns, such as ``('error', code, _)``. 606For example:: 607 608 match test_variable: 609 case ('warning', code, 40): 610 print("A warning has been received.") 611 case ('error', code, _): 612 print(f"An error {code} occurred.") 613 614In the above case, ``test_variable`` will match for ('error', code, 100) and 615('error', code, 800). 616 617Guard 618~~~~~ 619 620We can add an ``if`` clause to a pattern, known as a "guard". If the 621guard is false, ``match`` goes on to try the next case block. Note 622that value capture happens before the guard is evaluated:: 623 624 match point: 625 case Point(x, y) if x == y: 626 print(f"The point is located on the diagonal Y=X at {x}.") 627 case Point(x, y): 628 print(f"Point is not on the diagonal.") 629 630Other Key Features 631~~~~~~~~~~~~~~~~~~ 632 633Several other key features: 634 635- Like unpacking assignments, tuple and list patterns have exactly the 636 same meaning and actually match arbitrary sequences. Technically, 637 the subject must be a sequence. 638 Therefore, an important exception is that patterns don't match iterators. 639 Also, to prevent a common mistake, sequence patterns don't match strings. 640 641- Sequence patterns support wildcards: ``[x, y, *rest]`` and ``(x, y, 642 *rest)`` work similar to wildcards in unpacking assignments. The 643 name after ``*`` may also be ``_``, so ``(x, y, *_)`` matches a sequence 644 of at least two items without binding the remaining items. 645 646- Mapping patterns: ``{"bandwidth": b, "latency": l}`` captures the 647 ``"bandwidth"`` and ``"latency"`` values from a dict. Unlike sequence 648 patterns, extra keys are ignored. A wildcard ``**rest`` is also 649 supported. (But ``**_`` would be redundant, so is not allowed.) 650 651- Subpatterns may be captured using the ``as`` keyword:: 652 653 case (Point(x1, y1), Point(x2, y2) as p2): ... 654 655 This binds x1, y1, x2, y2 like you would expect without the ``as`` clause, 656 and p2 to the entire second item of the subject. 657 658- Most literals are compared by equality. However, the singletons ``True``, 659 ``False`` and ``None`` are compared by identity. 660 661- Named constants may be used in patterns. These named constants must be 662 dotted names to prevent the constant from being interpreted as a capture 663 variable:: 664 665 from enum import Enum 666 class Color(Enum): 667 RED = 0 668 GREEN = 1 669 BLUE = 2 670 671 match color: 672 case Color.RED: 673 print("I see red!") 674 case Color.GREEN: 675 print("Grass is green") 676 case Color.BLUE: 677 print("I'm feeling the blues :(") 678 679For the full specification see :pep:`634`. Motivation and rationale 680are in :pep:`635`, and a longer tutorial is in :pep:`636`. 681 682 683.. _whatsnew310-pep597: 684 685Optional ``EncodingWarning`` and ``encoding="locale"`` option 686------------------------------------------------------------- 687 688The default encoding of :class:`TextIOWrapper` and :func:`open` is 689platform and locale dependent. Since UTF-8 is used on most Unix 690platforms, omitting ``encoding`` option when opening UTF-8 files 691(e.g. JSON, YAML, TOML, Markdown) is a very common bug. For example:: 692 693 # BUG: "rb" mode or encoding="utf-8" should be used. 694 with open("data.json") as f: 695 data = json.load(f) 696 697To find this type of bug, an optional ``EncodingWarning`` is added. 698It is emitted when :data:`sys.flags.warn_default_encoding <sys.flags>` 699is true and locale-specific default encoding is used. 700 701``-X warn_default_encoding`` option and :envvar:`PYTHONWARNDEFAULTENCODING` 702are added to enable the warning. 703 704See :ref:`io-text-encoding` for more information. 705 706.. _new-feat-related-type-hints: 707 708New Features Related to Type Hints 709================================== 710 711This section covers major changes affecting :pep:`484` type hints and 712the :mod:`typing` module. 713 714 715PEP 604: New Type Union Operator 716-------------------------------- 717 718A new type union operator was introduced which enables the syntax ``X | Y``. 719This provides a cleaner way of expressing 'either type X or type Y' instead of 720using :data:`typing.Union`, especially in type hints. 721 722In previous versions of Python, to apply a type hint for functions accepting 723arguments of multiple types, :data:`typing.Union` was used:: 724 725 def square(number: Union[int, float]) -> Union[int, float]: 726 return number ** 2 727 728 729Type hints can now be written in a more succinct manner:: 730 731 def square(number: int | float) -> int | float: 732 return number ** 2 733 734 735This new syntax is also accepted as the second argument to :func:`isinstance` 736and :func:`issubclass`:: 737 738 >>> isinstance(1, int | str) 739 True 740 741See :ref:`types-union` and :pep:`604` for more details. 742 743(Contributed by Maggie Moss and Philippe Prados in :issue:`41428`, 744with additions by Yurii Karabas and Serhiy Storchaka in :issue:`44490`.) 745 746 747PEP 612: Parameter Specification Variables 748------------------------------------------ 749 750Two new options to improve the information provided to static type checkers for 751:pep:`484`\ 's ``Callable`` have been added to the :mod:`typing` module. 752 753The first is the parameter specification variable. They are used to forward the 754parameter types of one callable to another callable -- a pattern commonly 755found in higher order functions and decorators. Examples of usage can be found 756in :class:`typing.ParamSpec`. Previously, there was no easy way to type annotate 757dependency of parameter types in such a precise manner. 758 759The second option is the new ``Concatenate`` operator. It's used in conjunction 760with parameter specification variables to type annotate a higher order callable 761which adds or removes parameters of another callable. Examples of usage can 762be found in :class:`typing.Concatenate`. 763 764See :class:`typing.Callable`, :class:`typing.ParamSpec`, 765:class:`typing.Concatenate`, :class:`typing.ParamSpecArgs`, 766:class:`typing.ParamSpecKwargs`, and :pep:`612` for more details. 767 768(Contributed by Ken Jin in :issue:`41559`, with minor enhancements by Jelle 769Zijlstra in :issue:`43783`. PEP written by Mark Mendoza.) 770 771 772PEP 613: TypeAlias 773------------------ 774 775:pep:`484` introduced the concept of type aliases, only requiring them to be 776top-level unannotated assignments. This simplicity sometimes made it difficult 777for type checkers to distinguish between type aliases and ordinary assignments, 778especially when forward references or invalid types were involved. Compare:: 779 780 StrCache = 'Cache[str]' # a type alias 781 LOG_PREFIX = 'LOG[DEBUG]' # a module constant 782 783Now the :mod:`typing` module has a special value :data:`TypeAlias` 784which lets you declare type aliases more explicitly:: 785 786 StrCache: TypeAlias = 'Cache[str]' # a type alias 787 LOG_PREFIX = 'LOG[DEBUG]' # a module constant 788 789See :pep:`613` for more details. 790 791(Contributed by Mikhail Golubev in :issue:`41923`.) 792 793PEP 647: User-Defined Type Guards 794--------------------------------- 795 796:data:`TypeGuard` has been added to the :mod:`typing` module to annotate 797type guard functions and improve information provided to static type checkers 798during type narrowing. For more information, please see :data:`TypeGuard`\ 's 799documentation, and :pep:`647`. 800 801(Contributed by Ken Jin and Guido van Rossum in :issue:`43766`. 802PEP written by Eric Traut.) 803 804Other Language Changes 805====================== 806 807* The :class:`int` type has a new method :meth:`int.bit_count`, returning the 808 number of ones in the binary expansion of a given integer, also known 809 as the population count. (Contributed by Niklas Fiekas in :issue:`29882`.) 810 811* The views returned by :meth:`dict.keys`, :meth:`dict.values` and 812 :meth:`dict.items` now all have a ``mapping`` attribute that gives a 813 :class:`types.MappingProxyType` object wrapping the original 814 dictionary. (Contributed by Dennis Sweeney in :issue:`40890`.) 815 816* :pep:`618`: The :func:`zip` function now has an optional ``strict`` flag, used 817 to require that all the iterables have an equal length. 818 819* Builtin and extension functions that take integer arguments no longer accept 820 :class:`~decimal.Decimal`\ s, :class:`~fractions.Fraction`\ s and other 821 objects that can be converted to integers only with a loss (e.g. that have 822 the :meth:`~object.__int__` method but do not have the 823 :meth:`~object.__index__` method). 824 (Contributed by Serhiy Storchaka in :issue:`37999`.) 825 826* If :func:`object.__ipow__` returns :const:`NotImplemented`, the operator will 827 correctly fall back to :func:`object.__pow__` and :func:`object.__rpow__` as expected. 828 (Contributed by Alex Shkop in :issue:`38302`.) 829 830* Assignment expressions can now be used unparenthesized within set literals 831 and set comprehensions, as well as in sequence indexes (but not slices). 832 833* Functions have a new ``__builtins__`` attribute which is used to look for 834 builtin symbols when a function is executed, instead of looking into 835 ``__globals__['__builtins__']``. The attribute is initialized from 836 ``__globals__["__builtins__"]`` if it exists, else from the current builtins. 837 (Contributed by Mark Shannon in :issue:`42990`.) 838 839* Two new builtin functions -- :func:`aiter` and :func:`anext` have been added 840 to provide asynchronous counterparts to :func:`iter` and :func:`next`, 841 respectively. 842 (Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.) 843 844* Static methods (:func:`@staticmethod <staticmethod>`) and class methods 845 (:func:`@classmethod <classmethod>`) now inherit the method attributes 846 (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, 847 ``__annotations__``) and have a new ``__wrapped__`` attribute. 848 Moreover, static methods are now callable as regular functions. 849 (Contributed by Victor Stinner in :issue:`43682`.) 850 851* Annotations for complex targets (everything beside ``simple name`` targets 852 defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``. 853 (Contributed by Batuhan Taskaya in :issue:`42737`.) 854 855* Class and module objects now lazy-create empty annotations dicts on demand. 856 The annotations dicts are stored in the object’s ``__dict__`` for 857 backwards compatibility. This improves the best practices for working 858 with ``__annotations__``; for more information, please see 859 :ref:`annotations-howto`. 860 (Contributed by Larry Hastings in :issue:`43901`.) 861 862* Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions 863 are now forbidden under ``from __future__ import annotations`` due to their side 864 effects. 865 (Contributed by Batuhan Taskaya in :issue:`42725`.) 866 867* Usage of unbound variables, ``super()`` and other expressions that might 868 alter the processing of symbol table as annotations are now rendered 869 effectless under ``from __future__ import annotations``. 870 (Contributed by Batuhan Taskaya in :issue:`42725`.) 871 872* Hashes of NaN values of both :class:`float` type and 873 :class:`decimal.Decimal` type now depend on object identity. Formerly, they 874 always hashed to ``0`` even though NaN values are not equal to one another. 875 This caused potentially quadratic runtime behavior due to excessive hash 876 collisions when creating dictionaries and sets containing multiple NaNs. 877 (Contributed by Raymond Hettinger in :issue:`43475`.) 878 879* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting 880 the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.) 881 882* :exc:`SyntaxError` exceptions now have ``end_lineno`` and 883 ``end_offset`` attributes. They will be ``None`` if not determined. 884 (Contributed by Pablo Galindo in :issue:`43914`.) 885 886New Modules 887=========== 888 889* None yet. 890 891 892Improved Modules 893================ 894 895asyncio 896------- 897 898Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` 899method. 900(Contributed by Alex Grönholm in :issue:`41332`.) 901 902argparse 903-------- 904 905Misleading phrase "optional arguments" was replaced with "options" in argparse help. Some tests might require adaptation if they rely on exact output match. 906(Contributed by Raymond Hettinger in :issue:`9694`.) 907 908array 909----- 910 911The :meth:`~array.array.index` method of :class:`array.array` now has 912optional *start* and *stop* parameters. 913(Contributed by Anders Lorentsen and Zackery Spytz in :issue:`31956`.) 914 915asynchat, asyncore, smtpd 916------------------------- 917These modules have been marked as deprecated in their module documentation 918since Python 3.6. An import-time :class:`DeprecationWarning` has now been 919added to all three of these modules. 920 921base64 922------ 923 924Add :func:`base64.b32hexencode` and :func:`base64.b32hexdecode` to support the 925Base32 Encoding with Extended Hex Alphabet. 926 927bdb 928--- 929 930Add :meth:`~bdb.Breakpoint.clearBreakpoints` to reset all set breakpoints. 931(Contributed by Irit Katriel in :issue:`24160`.) 932 933bisect 934------ 935 936Added the possibility of providing a *key* function to the APIs in the :mod:`bisect` 937module. (Contributed by Raymond Hettinger in :issue:`4356`.) 938 939codecs 940------ 941 942Add a :func:`codecs.unregister` function to unregister a codec search function. 943(Contributed by Hai Shi in :issue:`41842`.) 944 945collections.abc 946--------------- 947 948The ``__args__`` of the :ref:`parameterized generic <types-genericalias>` for 949:class:`collections.abc.Callable` are now consistent with :data:`typing.Callable`. 950:class:`collections.abc.Callable` generic now flattens type parameters, similar 951to what :data:`typing.Callable` currently does. This means that 952``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of 953``(int, str, str)``; previously this was ``([int, str], str)``. To allow this 954change, :class:`types.GenericAlias` can now be subclassed, and a subclass will 955be returned when subscripting the :class:`collections.abc.Callable` type. Note 956that a :exc:`TypeError` may be raised for invalid forms of parameterizing 957:class:`collections.abc.Callable` which may have passed silently in Python 3.9. 958(Contributed by Ken Jin in :issue:`42195`.) 959 960contextlib 961---------- 962 963Add a :func:`contextlib.aclosing` context manager to safely close async generators 964and objects representing asynchronously released resources. 965(Contributed by Joongi Kim and John Belmonte in :issue:`41229`.) 966 967Add asynchronous context manager support to :func:`contextlib.nullcontext`. 968(Contributed by Tom Gringauz in :issue:`41543`.) 969 970Add :class:`AsyncContextDecorator`, for supporting usage of async context managers 971as decorators. 972 973curses 974------ 975 976The extended color functions added in ncurses 6.1 will be used transparently 977by :func:`curses.color_content`, :func:`curses.init_color`, 978:func:`curses.init_pair`, and :func:`curses.pair_content`. A new function, 979:func:`curses.has_extended_color_support`, indicates whether extended color 980support is provided by the underlying ncurses library. 981(Contributed by Jeffrey Kintscher and Hans Petter Jansson in :issue:`36982`.) 982 983The ``BUTTON5_*`` constants are now exposed in the :mod:`curses` module if 984they are provided by the underlying curses library. 985(Contributed by Zackery Spytz in :issue:`39273`.) 986 987dataclasses 988----------- 989 990__slots__ 991~~~~~~~~~ 992 993Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator. 994(Contributed by Yurii Karabas in :issue:`42269`) 995 996Keyword-only fields 997~~~~~~~~~~~~~~~~~~~ 998 999dataclasses now supports fields that are keyword-only in the 1000generated __init__ method. There are a number of ways of specifying 1001keyword-only fields. 1002 1003You can say that every field is keyword-only: 1004 1005.. code-block:: python 1006 1007 from dataclasses import dataclass 1008 1009 @dataclass(kw_only=True) 1010 class Birthday: 1011 name: str 1012 birthday: datetime.date 1013 1014Both ``name`` and ``birthday`` are keyword-only parameters to the 1015generated __init__ method. 1016 1017You can specify keyword-only on a per-field basis: 1018 1019.. code-block:: python 1020 1021 from dataclasses import dataclass, field 1022 1023 @dataclass 1024 class Birthday: 1025 name: str 1026 birthday: datetime.date = field(kw_only=True) 1027 1028Here only ``birthday`` is keyword-only. If you set ``kw_only`` on 1029individual fields, be aware that there are rules about re-ordering 1030fields due to keyword-only fields needing to follow non-keyword-only 1031fields. See the full dataclasses documentation for details. 1032 1033You can also specify that all fields following a KW_ONLY marker are 1034keyword-only. This will probably be the most common usage: 1035 1036.. code-block:: python 1037 1038 from dataclasses import dataclass, KW_ONLY 1039 1040 @dataclass 1041 class Point: 1042 x: float 1043 y: float 1044 _: KW_ONLY 1045 z: float = 0.0 1046 t: float = 0.0 1047 1048Here, ``z`` and ``t`` are keyword-only parameters, while ``x`` and 1049``y`` are not. 1050(Contributed by Eric V. Smith in :issue:`43532`.) 1051 1052.. _distutils-deprecated: 1053 1054distutils 1055--------- 1056 1057The entire ``distutils`` package is deprecated, to be removed in Python 10583.12. Its functionality for specifying package builds has already been 1059completely replaced by third-party packages ``setuptools`` and 1060``packaging``, and most other commonly used APIs are available elsewhere 1061in the standard library (such as :mod:`platform`, :mod:`shutil`, 1062:mod:`subprocess` or :mod:`sysconfig`). There are no plans to migrate 1063any other functionality from ``distutils``, and applications that are 1064using other functions should plan to make private copies of the code. 1065Refer to :pep:`632` for discussion. 1066 1067The ``bdist_wininst`` command deprecated in Python 3.8 has been removed. 1068The ``bdist_wheel`` command is now recommended to distribute binary packages 1069on Windows. 1070(Contributed by Victor Stinner in :issue:`42802`.) 1071 1072doctest 1073------- 1074 1075When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1076(Contributed by Brett Cannon in :issue:`42133`.) 1077 1078encodings 1079--------- 1080 1081:func:`encodings.normalize_encoding` now ignores non-ASCII characters. 1082(Contributed by Hai Shi in :issue:`39337`.) 1083 1084enum 1085---- 1086 1087:class:`Enum` :func:`__repr__` now returns ``enum_name.member_name`` and 1088:func:`__str__` now returns ``member_name``. Stdlib enums available as 1089module constants have a :func:`repr` of ``module_name.member_name``. 1090(Contributed by Ethan Furman in :issue:`40066`.) 1091 1092Add :class:`enum.StrEnum` for enums where all members are strings. 1093(Contributed by Ethan Furman in :issue:`41816`.) 1094 1095fileinput 1096--------- 1097 1098Add *encoding* and *errors* parameters in :func:`fileinput.input` and 1099:class:`fileinput.FileInput`. 1100(Contributed by Inada Naoki in :issue:`43712`.) 1101 1102:func:`fileinput.hook_compressed` now returns :class:`TextIOWrapper` object 1103when *mode* is "r" and file is compressed, like uncompressed files. 1104(Contributed by Inada Naoki in :issue:`5758`.) 1105 1106faulthandler 1107------------ 1108 1109The :mod:`faulthandler` module now detects if a fatal error occurs during a 1110garbage collector collection. 1111(Contributed by Victor Stinner in :issue:`44466`.) 1112 1113gc 1114-- 1115 1116Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and 1117:func:`gc.get_referents`. (Contributed by Pablo Galindo in :issue:`43439`.) 1118 1119glob 1120---- 1121 1122Add the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and 1123:func:`~glob.iglob` which allow to specify the root directory for searching. 1124(Contributed by Serhiy Storchaka in :issue:`38144`.) 1125 1126hashlib 1127------- 1128 1129The hashlib module requires OpenSSL 1.1.1 or newer. 1130(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) 1131 1132The hashlib module has preliminary support for OpenSSL 3.0.0. 1133(Contributed by Christian Heimes in :issue:`38820` and other issues.) 1134 1135The pure-Python fallback of :func:`~hashlib.pbkdf2_hmac` is deprecated. In 1136the future PBKDF2-HMAC will only be available when Python has been built with 1137OpenSSL support. 1138(Contributed by Christian Heimes in :issue:`43880`.) 1139 1140hmac 1141---- 1142 1143The hmac module now uses OpenSSL's HMAC implementation internally. 1144(Contributed by Christian Heimes in :issue:`40645`.) 1145 1146IDLE and idlelib 1147---------------- 1148 1149Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). 1150User hooks were previously ignored. (Contributed by Ken Hilton in 1151:issue:`43008`.) 1152 1153Rearrange the settings dialog. Split the General tab into Windows 1154and Shell/Ed tabs. Move help sources, which extend the Help menu, to the 1155Extensions tab. Make space for new options and shorten the dialog. The 1156latter makes the dialog better fit small screens. (Contributed by Terry Jan 1157Reedy in :issue:`40468`.) Move the indent space setting from the Font tab to 1158the new Windows tab. (Contributed by Mark Roseman and Terry Jan Reedy in 1159:issue:`33962`.) 1160 1161The changes above were backported to a 3.9 maintenance release. 1162 1163Add a Shell sidebar. Move the primary prompt ('>>>') to the sidebar. 1164Add secondary prompts ('...') to the sidebar. Left click and optional 1165drag selects one or more lines of text, as with the editor 1166line number sidebar. Right click after selecting text lines displays 1167a context menu with 'copy with prompts'. This zips together prompts 1168from the sidebar with lines from the selected text. This option also 1169appears on the context menu for the text. (Contributed by Tal Einat 1170in :issue:`37903`.) 1171 1172Use spaces instead of tabs to indent interactive code. This makes 1173interactive code entries 'look right'. Making this feasible was a 1174major motivation for adding the shell sidebar. (Contributed by 1175Terry Jan Reedy in :issue:`37892`.) 1176 1177Highlight the new :ref:`soft keywords <soft-keywords>` :keyword:`match`, 1178:keyword:`case <match>`, and :keyword:`_ <wildcard-patterns>` in 1179pattern-matching statements. However, this highlighting is not perfect 1180and will be incorrect in some rare cases, including some ``_``-s in 1181``case`` patterns. (Contributed by Tal Einat in :issue:`44010`.) 1182 1183New in 3.10 maintenance releases. 1184 1185Apply syntax highlighting to ``.pyi`` files. (Contributed by Alex 1186Waygood and Terry Jan Reedy in :issue:`45447`.) 1187 1188Include prompts when saving Shell with inputs and outputs. 1189(Contributed by Terry Jan Reedy in :gh:`95191`.) 1190 1191importlib.metadata 1192------------------ 1193 1194Feature parity with ``importlib_metadata`` 4.6 1195(`history <https://importlib-metadata.readthedocs.io/en/latest/history.html>`_). 1196 1197:ref:`importlib.metadata entry points <entry-points>` 1198now provide a nicer experience 1199for selecting entry points by group and name through a new 1200:class:`importlib.metadata.EntryPoints` class. See the Compatibility 1201Note in the docs for more info on the deprecation and usage. 1202 1203Added :func:`importlib.metadata.packages_distributions` for resolving 1204top-level Python modules and packages to their 1205:class:`importlib.metadata.Distribution`. 1206 1207inspect 1208------- 1209 1210When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1211(Contributed by Brett Cannon in :issue:`42133`.) 1212 1213Add :func:`inspect.get_annotations`, which safely computes the annotations 1214defined on an object. It works around the quirks of accessing the annotations 1215on various types of objects, and makes very few assumptions about the object 1216it examines. :func:`inspect.get_annotations` can also correctly un-stringize 1217stringized annotations. :func:`inspect.get_annotations` is now considered 1218best practice for accessing the annotations dict defined on any Python object; 1219for more information on best practices for working with annotations, please see 1220:ref:`annotations-howto`. 1221Relatedly, :func:`inspect.signature`, 1222:func:`inspect.Signature.from_callable`, and :func:`inspect.Signature.from_function` 1223now call :func:`inspect.get_annotations` to retrieve annotations. This means 1224:func:`inspect.signature` and :func:`inspect.Signature.from_callable` can 1225also now un-stringize stringized annotations. 1226(Contributed by Larry Hastings in :issue:`43817`.) 1227 1228itertools 1229--------- 1230 1231Add :func:`itertools.pairwise()`. 1232(Contributed by Raymond Hettinger in :issue:`38200`.) 1233 1234linecache 1235--------- 1236 1237When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1238(Contributed by Brett Cannon in :issue:`42133`.) 1239 1240os 1241-- 1242 1243Add :func:`os.cpu_count()` support for VxWorks RTOS. 1244(Contributed by Peixing Xin in :issue:`41440`.) 1245 1246Add a new function :func:`os.eventfd` and related helpers to wrap the 1247``eventfd2`` syscall on Linux. 1248(Contributed by Christian Heimes in :issue:`41001`.) 1249 1250Add :func:`os.splice()` that allows to move data between two file 1251descriptors without copying between kernel address space and user 1252address space, where one of the file descriptors must refer to a 1253pipe. (Contributed by Pablo Galindo in :issue:`41625`.) 1254 1255Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` 1256and :data:`~os.O_NOFOLLOW_ANY` for macOS. 1257(Contributed by Dong-hee Na in :issue:`43106`.) 1258 1259os.path 1260------- 1261 1262:func:`os.path.realpath` now accepts a *strict* keyword-only argument. When set 1263to ``True``, :exc:`OSError` is raised if a path doesn't exist or a symlink loop 1264is encountered. 1265(Contributed by Barney Gale in :issue:`43757`.) 1266 1267pathlib 1268------- 1269 1270Add slice support to :attr:`PurePath.parents <pathlib.PurePath.parents>`. 1271(Contributed by Joshua Cannon in :issue:`35498`.) 1272 1273Add negative indexing support to :attr:`PurePath.parents 1274<pathlib.PurePath.parents>`. 1275(Contributed by Yaroslav Pankovych in :issue:`21041`.) 1276 1277Add :meth:`Path.hardlink_to <pathlib.Path.hardlink_to>` method that 1278supersedes :meth:`~pathlib.Path.link_to`. The new method has the same argument 1279order as :meth:`~pathlib.Path.symlink_to`. 1280(Contributed by Barney Gale in :issue:`39950`.) 1281 1282:meth:`pathlib.Path.stat` and :meth:`~pathlib.Path.chmod` now accept a 1283*follow_symlinks* keyword-only argument for consistency with corresponding 1284functions in the :mod:`os` module. 1285(Contributed by Barney Gale in :issue:`39906`.) 1286 1287platform 1288-------- 1289 1290Add :func:`platform.freedesktop_os_release()` to retrieve operation system 1291identification from `freedesktop.org os-release 1292<https://www.freedesktop.org/software/systemd/man/os-release.html>`_ standard file. 1293(Contributed by Christian Heimes in :issue:`28468`.) 1294 1295pprint 1296------ 1297 1298:func:`pprint.pprint` now accepts a new ``underscore_numbers`` keyword argument. 1299(Contributed by sblondon in :issue:`42914`.) 1300 1301:mod:`pprint` can now pretty-print :class:`dataclasses.dataclass` instances. 1302(Contributed by Lewis Gaul in :issue:`43080`.) 1303 1304py_compile 1305---------- 1306 1307Add ``--quiet`` option to command-line interface of :mod:`py_compile`. 1308(Contributed by Gregory Schevchenko in :issue:`38731`.) 1309 1310pyclbr 1311------ 1312 1313Add an ``end_lineno`` attribute to the ``Function`` and ``Class`` 1314objects in the tree returned by :func:`pyclbr.readline` and 1315:func:`pyclbr.readline_ex`. It matches the existing (start) ``lineno``. 1316(Contributed by Aviral Srivastava in :issue:`38307`.) 1317 1318shelve 1319------ 1320 1321The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default 1322instead of :mod:`pickle` protocol ``3`` when creating shelves. 1323(Contributed by Zackery Spytz in :issue:`34204`.) 1324 1325statistics 1326---------- 1327 1328Add :func:`~statistics.covariance`, Pearson's 1329:func:`~statistics.correlation`, and simple 1330:func:`~statistics.linear_regression` functions. 1331(Contributed by Tymoteusz Wołodźko in :issue:`38490`.) 1332 1333site 1334---- 1335 1336When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1337(Contributed by Brett Cannon in :issue:`42133`.) 1338 1339socket 1340------ 1341 1342The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. 1343(Contributed by Christian Heimes in :issue:`42413`.) 1344 1345Add option to create MPTCP sockets with ``IPPROTO_MPTCP`` 1346(Contributed by Rui Cunha in :issue:`43571`.) 1347 1348Add ``IP_RECVTOS`` option to receive the type of service (ToS) or DSCP/ECN fields 1349(Contributed by Georg Sauthoff in :issue:`44077`.) 1350 1351ssl 1352--- 1353 1354The ssl module requires OpenSSL 1.1.1 or newer. 1355(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) 1356 1357The ssl module has preliminary support for OpenSSL 3.0.0 and new option 1358:data:`~ssl.OP_IGNORE_UNEXPECTED_EOF`. 1359(Contributed by Christian Heimes in :issue:`38820`, :issue:`43794`, 1360:issue:`43788`, :issue:`43791`, :issue:`43799`, :issue:`43920`, 1361:issue:`43789`, and :issue:`43811`.) 1362 1363Deprecated function and use of deprecated constants now result in 1364a :exc:`DeprecationWarning`. :attr:`ssl.SSLContext.options` has 1365:data:`~ssl.OP_NO_SSLv2` and :data:`~ssl.OP_NO_SSLv3` set by default and 1366therefore cannot warn about setting the flag again. The 1367:ref:`deprecation section <whatsnew310-deprecated>` has a list of deprecated 1368features. 1369(Contributed by Christian Heimes in :issue:`43880`.) 1370 1371The ssl module now has more secure default settings. Ciphers without forward 1372secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits 1373weak RSA, DH, and ECC keys with less than 112 bits of security. 1374:class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2. 1375Settings are based on Hynek Schlawack's research. 1376(Contributed by Christian Heimes in :issue:`43998`.) 1377 1378The deprecated protocols SSL 3.0, TLS 1.0, and TLS 1.1 are no longer 1379officially supported. Python does not block them actively. However 1380OpenSSL build options, distro configurations, vendor patches, and cipher 1381suites may prevent a successful handshake. 1382 1383Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. 1384(Contributed by Zackery Spytz in :issue:`31870`.) 1385 1386The ssl module uses heap-types and multi-phase initialization. 1387(Contributed by Christian Heimes in :issue:`42333`.) 1388 1389A new verify flag :data:`~ssl.VERIFY_X509_PARTIAL_CHAIN` has been added. 1390(Contributed by l0x in :issue:`40849`.) 1391 1392sqlite3 1393------- 1394 1395Add audit events for :func:`~sqlite3.connect/handle`, 1396:meth:`~sqlite3.Connection.enable_load_extension`, and 1397:meth:`~sqlite3.Connection.load_extension`. 1398(Contributed by Erlend E. Aasland in :issue:`43762`.) 1399 1400sys 1401--- 1402 1403Add :data:`sys.orig_argv` attribute: the list of the original command line 1404arguments passed to the Python executable. 1405(Contributed by Victor Stinner in :issue:`23427`.) 1406 1407Add :data:`sys.stdlib_module_names`, containing the list of the standard library 1408module names. 1409(Contributed by Victor Stinner in :issue:`42955`.) 1410 1411_thread 1412------- 1413 1414:func:`_thread.interrupt_main` now takes an optional signal number to 1415simulate (the default is still :data:`signal.SIGINT`). 1416(Contributed by Antoine Pitrou in :issue:`43356`.) 1417 1418threading 1419--------- 1420 1421Add :func:`threading.gettrace` and :func:`threading.getprofile` to 1422retrieve the functions set by :func:`threading.settrace` and 1423:func:`threading.setprofile` respectively. 1424(Contributed by Mario Corchero in :issue:`42251`.) 1425 1426Add :data:`threading.__excepthook__` to allow retrieving the original value 1427of :func:`threading.excepthook` in case it is set to a broken or a different 1428value. 1429(Contributed by Mario Corchero in :issue:`42308`.) 1430 1431traceback 1432--------- 1433 1434The :func:`~traceback.format_exception`, 1435:func:`~traceback.format_exception_only`, and 1436:func:`~traceback.print_exception` functions can now take an exception object 1437as a positional-only argument. 1438(Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.) 1439 1440types 1441----- 1442 1443Reintroduce the :data:`types.EllipsisType`, :data:`types.NoneType` 1444and :data:`types.NotImplementedType` classes, providing a new set 1445of types readily interpretable by type checkers. 1446(Contributed by Bas van Beek in :issue:`41810`.) 1447 1448typing 1449------ 1450 1451For major changes, see :ref:`new-feat-related-type-hints`. 1452 1453The behavior of :class:`typing.Literal` was changed to conform with :pep:`586` 1454and to match the behavior of static type checkers specified in the PEP. 1455 14561. ``Literal`` now de-duplicates parameters. 14572. Equality comparisons between ``Literal`` objects are now order independent. 14583. ``Literal`` comparisons now respect types. For example, 1459 ``Literal[0] == Literal[False]`` previously evaluated to ``True``. It is 1460 now ``False``. To support this change, the internally used type cache now 1461 supports differentiating types. 14624. ``Literal`` objects will now raise a :exc:`TypeError` exception during 1463 equality comparisons if any of their parameters are not :term:`hashable`. 1464 Note that declaring ``Literal`` with unhashable parameters will not throw 1465 an error:: 1466 1467 >>> from typing import Literal 1468 >>> Literal[{0}] 1469 >>> Literal[{0}] == Literal[{False}] 1470 Traceback (most recent call last): 1471 File "<stdin>", line 1, in <module> 1472 TypeError: unhashable type: 'set' 1473 1474(Contributed by Yurii Karabas in :issue:`42345`.) 1475 1476Add new function :func:`typing.is_typeddict` to introspect if an annotation 1477is a :class:`typing.TypedDict`. 1478(Contributed by Patrick Reader in :issue:`41792`.) 1479 1480Subclasses of ``typing.Protocol`` which only have data variables declared 1481will now raise a ``TypeError`` when checked with ``isinstance`` unless they 1482are decorated with :func:`runtime_checkable`. Previously, these checks 1483passed silently. Users should decorate their 1484subclasses with the :func:`runtime_checkable` decorator 1485if they want runtime protocols. 1486(Contributed by Yurii Karabas in :issue:`38908`.) 1487 1488Importing from the ``typing.io`` and ``typing.re`` submodules will now emit 1489:exc:`DeprecationWarning`. These submodules have been deprecated since 1490Python 3.8 and will be removed in a future version of Python. Anything 1491belonging to those submodules should be imported directly from 1492:mod:`typing` instead. 1493(Contributed by Sebastian Rittau in :issue:`38291`.) 1494 1495unittest 1496-------- 1497 1498Add new method :meth:`~unittest.TestCase.assertNoLogs` to complement the 1499existing :meth:`~unittest.TestCase.assertLogs`. (Contributed by Kit Yan Choi 1500in :issue:`39385`.) 1501 1502urllib.parse 1503------------ 1504 1505Python versions earlier than Python 3.10 allowed using both ``;`` and ``&`` as 1506query parameter separators in :func:`urllib.parse.parse_qs` and 1507:func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with 1508newer W3C recommendations, this has been changed to allow only a single 1509separator key, with ``&`` as the default. This change also affects 1510:func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected 1511functions internally. For more details, please see their respective 1512documentation. 1513(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) 1514 1515xml 1516--- 1517 1518Add a :class:`~xml.sax.handler.LexicalHandler` class to the 1519:mod:`xml.sax.handler` module. 1520(Contributed by Jonathan Gossage and Zackery Spytz in :issue:`35018`.) 1521 1522zipimport 1523--------- 1524Add methods related to :pep:`451`: :meth:`~zipimport.zipimporter.find_spec`, 1525:meth:`zipimport.zipimporter.create_module`, and 1526:meth:`zipimport.zipimporter.exec_module`. 1527(Contributed by Brett Cannon in :issue:`42131`.) 1528 1529Add :meth:`~zipimport.zipimporter.invalidate_caches` method. 1530(Contributed by Desmond Cheong in :issue:`14678`.) 1531 1532 1533Optimizations 1534============= 1535 1536* Constructors :func:`str`, :func:`bytes` and :func:`bytearray` are now faster 1537 (around 30--40% for small objects). 1538 (Contributed by Serhiy Storchaka in :issue:`41334`.) 1539 1540* The :mod:`runpy` module now imports fewer modules. 1541 The ``python3 -m module-name`` command startup time is 1.4x faster in 1542 average. On Linux, ``python3 -I -m module-name`` imports 69 modules on Python 1543 3.9, whereas it only imports 51 modules (-18) on Python 3.10. 1544 (Contributed by Victor Stinner in :issue:`41006` and :issue:`41718`.) 1545 1546* The ``LOAD_ATTR`` instruction now uses new "per opcode cache" mechanism. It 1547 is about 36% faster now for regular attributes and 44% faster for slots. 1548 (Contributed by Pablo Galindo and Yury Selivanov in :issue:`42093` and Guido 1549 van Rossum in :issue:`42927`, based on ideas implemented originally in PyPy 1550 and MicroPython.) 1551 1552* When building Python with :option:`--enable-optimizations` now 1553 ``-fno-semantic-interposition`` is added to both the compile and link line. 1554 This speeds builds of the Python interpreter created with :option:`--enable-shared` 1555 with ``gcc`` by up to 30%. See `this article 1556 <https://developers.redhat.com/blog/2020/06/25/red-hat-enterprise-linux-8-2-brings-faster-python-3-8-run-speeds/>`_ 1557 for more details. (Contributed by Victor Stinner and Pablo Galindo in 1558 :issue:`38980`.) 1559 1560* Use a new output buffer management code for :mod:`bz2` / :mod:`lzma` / 1561 :mod:`zlib` modules, and add ``.readall()`` function to 1562 ``_compression.DecompressReader`` class. bz2 decompression is now 1.09x ~ 1.17x 1563 faster, lzma decompression 1.20x ~ 1.32x faster, ``GzipFile.read(-1)`` 1.11x 1564 ~ 1.18x faster. (Contributed by Ma Lin, reviewed by Gregory P. Smith, in :issue:`41486`) 1565 1566* When using stringized annotations, annotations dicts for functions are no longer 1567 created when the function is created. Instead, they are stored as a tuple of 1568 strings, and the function object lazily converts this into the annotations dict 1569 on demand. This optimization cuts the CPU time needed to define an annotated 1570 function by half. 1571 (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`.) 1572 1573* Substring search functions such as ``str1 in str2`` and ``str2.find(str1)`` 1574 now sometimes use Crochemore & Perrin's "Two-Way" string searching 1575 algorithm to avoid quadratic behavior on long strings. (Contributed 1576 by Dennis Sweeney in :issue:`41972`) 1577 1578* Add micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup 1579 performance in the common case of cache hits. This makes the interpreter 1.04 times faster 1580 on average. (Contributed by Dino Viehland in :issue:`43452`.) 1581 1582* The following built-in functions now support the faster :pep:`590` vectorcall calling convention: 1583 :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`. 1584 (Contributed by Dong-hee Na and Jeroen Demeyer in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`.) 1585 1586* :class:`BZ2File` performance is improved by removing internal ``RLock``. 1587 This makes :class:`BZ2File` thread unsafe in the face of multiple simultaneous 1588 readers or writers, just like its equivalent classes in :mod:`gzip` and 1589 :mod:`lzma` have always been. (Contributed by Inada Naoki in :issue:`43785`.) 1590 1591.. _whatsnew310-deprecated: 1592 1593Deprecated 1594========== 1595 1596* Currently Python accepts numeric literals immediately followed by keywords, 1597 for example ``0in x``, ``1or x``, ``0if 1else 2``. It allows confusing 1598 and ambiguous expressions like ``[0x1for x in y]`` (which can be 1599 interpreted as ``[0x1 for x in y]`` or ``[0x1f or x in y]``). Starting in 1600 this release, a deprecation warning is raised if the numeric literal is 1601 immediately followed by one of keywords :keyword:`and`, :keyword:`else`, 1602 :keyword:`for`, :keyword:`if`, :keyword:`in`, :keyword:`is` and :keyword:`or`. 1603 In future releases it will be changed to syntax warning, and finally to 1604 syntax error. 1605 (Contributed by Serhiy Storchaka in :issue:`43833`.) 1606 1607* Starting in this release, there will be a concerted effort to begin 1608 cleaning up old import semantics that were kept for Python 2.7 1609 compatibility. Specifically, 1610 :meth:`~importlib.abc.PathEntryFinder.find_loader`/:meth:`~importlib.abc.Finder.find_module` 1611 (superseded by :meth:`~importlib.abc.Finder.find_spec`), 1612 :meth:`~importlib.abc.Loader.load_module` 1613 (superseded by :meth:`~importlib.abc.Loader.exec_module`), 1614 :meth:`~importlib.abc.Loader.module_repr` (which the import system 1615 takes care of for you), the ``__package__`` attribute 1616 (superseded by ``__spec__.parent``), the ``__loader__`` attribute 1617 (superseded by ``__spec__.loader``), and the ``__cached__`` attribute 1618 (superseded by ``__spec__.cached``) will slowly be removed (as well 1619 as other classes and methods in :mod:`importlib`). 1620 :exc:`ImportWarning` and/or :exc:`DeprecationWarning` will be raised 1621 as appropriate to help identify code which needs updating during 1622 this transition. 1623 1624* The entire ``distutils`` namespace is deprecated, to be removed in 1625 Python 3.12. Refer to the :ref:`module changes <distutils-deprecated>` 1626 section for more information. 1627 1628* Non-integer arguments to :func:`random.randrange` are deprecated. 1629 The :exc:`ValueError` is deprecated in favor of a :exc:`TypeError`. 1630 (Contributed by Serhiy Storchaka and Raymond Hettinger in :issue:`37319`.) 1631 1632* The various ``load_module()`` methods of :mod:`importlib` have been 1633 documented as deprecated since Python 3.6, but will now also trigger 1634 a :exc:`DeprecationWarning`. Use 1635 :meth:`~importlib.abc.Loader.exec_module` instead. 1636 (Contributed by Brett Cannon in :issue:`26131`.) 1637 1638* :meth:`zimport.zipimporter.load_module` has been deprecated in 1639 preference for :meth:`~zipimport.zipimporter.exec_module`. 1640 (Contributed by Brett Cannon in :issue:`26131`.) 1641 1642* The use of :meth:`~importlib.abc.Loader.load_module` by the import 1643 system now triggers an :exc:`ImportWarning` as 1644 :meth:`~importlib.abc.Loader.exec_module` is preferred. 1645 (Contributed by Brett Cannon in :issue:`26131`.) 1646 1647* The use of :meth:`importlib.abc.MetaPathFinder.find_module` and 1648 :meth:`importlib.abc.PathEntryFinder.find_module` by the import system now 1649 trigger an :exc:`ImportWarning` as 1650 :meth:`importlib.abc.MetaPathFinder.find_spec` and 1651 :meth:`importlib.abc.PathEntryFinder.find_spec` 1652 are preferred, respectively. You can use 1653 :func:`importlib.util.spec_from_loader` to help in porting. 1654 (Contributed by Brett Cannon in :issue:`42134`.) 1655 1656* The use of :meth:`importlib.abc.PathEntryFinder.find_loader` by the import 1657 system now triggers an :exc:`ImportWarning` as 1658 :meth:`importlib.abc.PathEntryFinder.find_spec` is preferred. You can use 1659 :func:`importlib.util.spec_from_loader` to help in porting. 1660 (Contributed by Brett Cannon in :issue:`43672`.) 1661 1662* The various implementations of 1663 :meth:`importlib.abc.MetaPathFinder.find_module` ( 1664 :meth:`importlib.machinery.BuiltinImporter.find_module`, 1665 :meth:`importlib.machinery.FrozenImporter.find_module`, 1666 :meth:`importlib.machinery.WindowsRegistryFinder.find_module`, 1667 :meth:`importlib.machinery.PathFinder.find_module`, 1668 :meth:`importlib.abc.MetaPathFinder.find_module` ), 1669 :meth:`importlib.abc.PathEntryFinder.find_module` ( 1670 :meth:`importlib.machinery.FileFinder.find_module` ), and 1671 :meth:`importlib.abc.PathEntryFinder.find_loader` ( 1672 :meth:`importlib.machinery.FileFinder.find_loader` ) 1673 now raise :exc:`DeprecationWarning` and are slated for removal in 1674 Python 3.12 (previously they were documented as deprecated in Python 3.4). 1675 (Contributed by Brett Cannon in :issue:`42135`.) 1676 1677* :class:`importlib.abc.Finder` is deprecated (including its sole method, 1678 :meth:`~importlib.abc.Finder.find_module`). Both 1679 :class:`importlib.abc.MetaPathFinder` and :class:`importlib.abc.PathEntryFinder` 1680 no longer inherit from the class. Users should inherit from one of these two 1681 classes as appropriate instead. 1682 (Contributed by Brett Cannon in :issue:`42135`.) 1683 1684* The deprecations of :mod:`imp`, :func:`importlib.find_loader`, 1685 :func:`importlib.util.set_package_wrapper`, 1686 :func:`importlib.util.set_loader_wrapper`, 1687 :func:`importlib.util.module_for_loader`, 1688 :class:`pkgutil.ImpImporter`, and 1689 :class:`pkgutil.ImpLoader` have all been updated to list Python 3.12 as the 1690 slated version of removal (they began raising :exc:`DeprecationWarning` in 1691 previous versions of Python). 1692 (Contributed by Brett Cannon in :issue:`43720`.) 1693 1694* The import system now uses the ``__spec__`` attribute on modules before 1695 falling back on :meth:`~importlib.abc.Loader.module_repr` for a module's 1696 ``__repr__()`` method. Removal of the use of ``module_repr()`` is scheduled 1697 for Python 3.12. 1698 (Contributed by Brett Cannon in :issue:`42137`.) 1699 1700* :meth:`importlib.abc.Loader.module_repr`, 1701 :meth:`importlib.machinery.FrozenLoader.module_repr`, and 1702 :meth:`importlib.machinery.BuiltinLoader.module_repr` are deprecated and 1703 slated for removal in Python 3.12. 1704 (Contributed by Brett Cannon in :issue:`42136`.) 1705 1706* ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python 1707 3.3, when it was made an alias to :class:`str`. It is now deprecated, 1708 scheduled for removal in Python 3.12. 1709 (Contributed by Erlend E. Aasland in :issue:`42264`.) 1710 1711* The undocumented built-in function ``sqlite3.enable_shared_cache`` is now 1712 deprecated, scheduled for removal in Python 3.12. Its use is strongly 1713 discouraged by the SQLite3 documentation. See `the SQLite3 docs 1714 <https://sqlite.org/c3ref/enable_shared_cache.html>`_ for more details. 1715 If a shared cache must be used, open the database in URI mode using the 1716 ``cache=shared`` query parameter. 1717 (Contributed by Erlend E. Aasland in :issue:`24464`.) 1718 1719* The following ``threading`` methods are now deprecated: 1720 1721 * ``threading.currentThread`` => :func:`threading.current_thread` 1722 1723 * ``threading.activeCount`` => :func:`threading.active_count` 1724 1725 * ``threading.Condition.notifyAll`` => 1726 :meth:`threading.Condition.notify_all` 1727 1728 * ``threading.Event.isSet`` => :meth:`threading.Event.is_set` 1729 1730 * ``threading.Thread.setName`` => :attr:`threading.Thread.name` 1731 1732 * ``threading.thread.getName`` => :attr:`threading.Thread.name` 1733 1734 * ``threading.Thread.isDaemon`` => :attr:`threading.Thread.daemon` 1735 1736 * ``threading.Thread.setDaemon`` => :attr:`threading.Thread.daemon` 1737 1738 (Contributed by Jelle Zijlstra in :gh:`87889`.) 1739 1740* :meth:`pathlib.Path.link_to` is deprecated and slated for removal in 1741 Python 3.12. Use :meth:`pathlib.Path.hardlink_to` instead. 1742 (Contributed by Barney Gale in :issue:`39950`.) 1743 1744* ``cgi.log()`` is deprecated and slated for removal in Python 3.12. 1745 (Contributed by Inada Naoki in :issue:`41139`.) 1746 1747* The following :mod:`ssl` features have been deprecated since Python 3.6, 1748 Python 3.7, or OpenSSL 1.1.0 and will be removed in 3.11: 1749 1750 * :data:`~ssl.OP_NO_SSLv2`, :data:`~ssl.OP_NO_SSLv3`, :data:`~ssl.OP_NO_TLSv1`, 1751 :data:`~ssl.OP_NO_TLSv1_1`, :data:`~ssl.OP_NO_TLSv1_2`, and 1752 :data:`~ssl.OP_NO_TLSv1_3` are replaced by 1753 :attr:`sslSSLContext.minimum_version` and 1754 :attr:`sslSSLContext.maximum_version`. 1755 1756 * :data:`~ssl.PROTOCOL_SSLv2`, :data:`~ssl.PROTOCOL_SSLv3`, 1757 :data:`~ssl.PROTOCOL_SSLv23`, :data:`~ssl.PROTOCOL_TLSv1`, 1758 :data:`~ssl.PROTOCOL_TLSv1_1`, :data:`~ssl.PROTOCOL_TLSv1_2`, and 1759 :data:`~ssl.PROTOCOL_TLS` are deprecated in favor of 1760 :data:`~ssl.PROTOCOL_TLS_CLIENT` and :data:`~ssl.PROTOCOL_TLS_SERVER` 1761 1762 * :func:`~ssl.wrap_socket` is replaced by :meth:`ssl.SSLContext.wrap_socket` 1763 1764 * :func:`~ssl.match_hostname` 1765 1766 * :func:`~ssl.RAND_pseudo_bytes`, :func:`~ssl.RAND_egd` 1767 1768 * NPN features like :meth:`ssl.SSLSocket.selected_npn_protocol` and 1769 :meth:`ssl.SSLContext.set_npn_protocols` are replaced by ALPN. 1770 1771* The threading debug (:envvar:`PYTHONTHREADDEBUG` environment variable) is 1772 deprecated in Python 3.10 and will be removed in Python 3.12. This feature 1773 requires a :ref:`debug build of Python <debug-build>`. 1774 (Contributed by Victor Stinner in :issue:`44584`.) 1775 1776* Importing from the ``typing.io`` and ``typing.re`` submodules will now emit 1777 :exc:`DeprecationWarning`. These submodules will be removed in a future version 1778 of Python. Anything belonging to these submodules should be imported directly 1779 from :mod:`typing` instead. 1780 (Contributed by Sebastian Rittau in :issue:`38291`.) 1781 1782.. _whatsnew310-removed: 1783 1784Removed 1785======= 1786 1787* Removed special methods ``__int__``, ``__float__``, ``__floordiv__``, 1788 ``__mod__``, ``__divmod__``, ``__rfloordiv__``, ``__rmod__`` and 1789 ``__rdivmod__`` of the :class:`complex` class. They always raised 1790 a :exc:`TypeError`. 1791 (Contributed by Serhiy Storchaka in :issue:`41974`.) 1792 1793* The ``ParserBase.error()`` method from the private and undocumented ``_markupbase`` 1794 module has been removed. :class:`html.parser.HTMLParser` is the only subclass of 1795 ``ParserBase`` and its ``error()`` implementation was already removed in 1796 Python 3.5. 1797 (Contributed by Berker Peksag in :issue:`31844`.) 1798 1799* Removed the ``unicodedata.ucnhash_CAPI`` attribute which was an internal 1800 PyCapsule object. The related private ``_PyUnicode_Name_CAPI`` structure was 1801 moved to the internal C API. 1802 (Contributed by Victor Stinner in :issue:`42157`.) 1803 1804* Removed the ``parser`` module, which was deprecated in 3.9 due to the 1805 switch to the new PEG parser, as well as all the C source and header files 1806 that were only being used by the old parser, including ``node.h``, ``parser.h``, 1807 ``graminit.h`` and ``grammar.h``. 1808 1809* Removed the Public C API functions ``PyParser_SimpleParseStringFlags``, 1810 ``PyParser_SimpleParseStringFlagsFilename``, 1811 ``PyParser_SimpleParseFileFlags`` and ``PyNode_Compile`` 1812 that were deprecated in 3.9 due to the switch to the new PEG parser. 1813 1814* Removed the ``formatter`` module, which was deprecated in Python 3.4. 1815 It is somewhat obsolete, little used, and not tested. It was originally 1816 scheduled to be removed in Python 3.6, but such removals were delayed until 1817 after Python 2.7 EOL. Existing users should copy whatever classes they use 1818 into their code. 1819 (Contributed by Dong-hee Na and Terry J. Reedy in :issue:`42299`.) 1820 1821* Removed the :c:func:`PyModule_GetWarningsModule` function that was useless 1822 now due to the _warnings module was converted to a builtin module in 2.6. 1823 (Contributed by Hai Shi in :issue:`42599`.) 1824 1825* Remove deprecated aliases to :ref:`collections-abstract-base-classes` from 1826 the :mod:`collections` module. 1827 (Contributed by Victor Stinner in :issue:`37324`.) 1828 1829* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's 1830 :doc:`high-level API <../library/asyncio-api-index>` following deprecation 1831 in Python 3.8. The motivation behind this change is multifold: 1832 1833 1. This simplifies the high-level API. 1834 2. The functions in the high-level API have been implicitly getting the 1835 current thread's running event loop since Python 3.7. There isn't a need to 1836 pass the event loop to the API in most normal use cases. 1837 3. Event loop passing is error-prone especially when dealing with loops 1838 running in different threads. 1839 1840 Note that the low-level API will still accept ``loop``. 1841 See :ref:`changes-python-api` for examples of how to replace existing code. 1842 1843 (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley 1844 in :issue:`42392`.) 1845 1846 1847Porting to Python 3.10 1848====================== 1849 1850This section lists previously described changes and other bugfixes 1851that may require changes to your code. 1852 1853 1854Changes in the Python syntax 1855---------------------------- 1856 1857* Deprecation warning is now emitted when compiling previously valid syntax 1858 if the numeric literal is immediately followed by a keyword (like in ``0in x``). 1859 In future releases it will be changed to syntax warning, and finally to a 1860 syntax error. To get rid of the warning and make the code compatible with 1861 future releases just add a space between the numeric literal and the 1862 following keyword. 1863 (Contributed by Serhiy Storchaka in :issue:`43833`.) 1864 1865.. _changes-python-api: 1866 1867Changes in the Python API 1868------------------------- 1869 1870* The *etype* parameters of the :func:`~traceback.format_exception`, 1871 :func:`~traceback.format_exception_only`, and 1872 :func:`~traceback.print_exception` functions in the :mod:`traceback` module 1873 have been renamed to *exc*. 1874 (Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.) 1875 1876* :mod:`atexit`: At Python exit, if a callback registered with 1877 :func:`atexit.register` fails, its exception is now logged. Previously, only 1878 some exceptions were logged, and the last exception was always silently 1879 ignored. 1880 (Contributed by Victor Stinner in :issue:`42639`.) 1881 1882* :class:`collections.abc.Callable` generic now flattens type parameters, similar 1883 to what :data:`typing.Callable` currently does. This means that 1884 ``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of 1885 ``(int, str, str)``; previously this was ``([int, str], str)``. Code which 1886 accesses the arguments via :func:`typing.get_args` or ``__args__`` need to account 1887 for this change. Furthermore, :exc:`TypeError` may be raised for invalid forms 1888 of parameterizing :class:`collections.abc.Callable` which may have passed 1889 silently in Python 3.9. 1890 (Contributed by Ken Jin in :issue:`42195`.) 1891 1892* :meth:`socket.htons` and :meth:`socket.ntohs` now raise :exc:`OverflowError` 1893 instead of :exc:`DeprecationWarning` if the given parameter will not fit in 1894 a 16-bit unsigned integer. 1895 (Contributed by Erlend E. Aasland in :issue:`42393`.) 1896 1897* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's 1898 :doc:`high-level API <../library/asyncio-api-index>` following deprecation 1899 in Python 3.8. 1900 1901 A coroutine that currently looks like this:: 1902 1903 async def foo(loop): 1904 await asyncio.sleep(1, loop=loop) 1905 1906 Should be replaced with this:: 1907 1908 async def foo(): 1909 await asyncio.sleep(1) 1910 1911 If ``foo()`` was specifically designed *not* to run in the current thread's 1912 running event loop (e.g. running in another thread's event loop), consider 1913 using :func:`asyncio.run_coroutine_threadsafe` instead. 1914 1915 (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley 1916 in :issue:`42392`.) 1917 1918* The :data:`types.FunctionType` constructor now inherits the current builtins 1919 if the *globals* dictionary has no ``"__builtins__"`` key, rather than using 1920 ``{"None": None}`` as builtins: same behavior as :func:`eval` and 1921 :func:`exec` functions. Defining a function with ``def function(...): ...`` 1922 in Python is not affected, globals cannot be overridden with this syntax: it 1923 also inherits the current builtins. 1924 (Contributed by Victor Stinner in :issue:`42990`.) 1925 1926Changes in the C API 1927-------------------- 1928 1929* The C API functions ``PyParser_SimpleParseStringFlags``, 1930 ``PyParser_SimpleParseStringFlagsFilename``, 1931 ``PyParser_SimpleParseFileFlags``, ``PyNode_Compile`` and the type 1932 used by these functions, ``struct _node``, were removed due to the switch 1933 to the new PEG parser. 1934 1935 Source should be now be compiled directly to a code object using, for 1936 example, :c:func:`Py_CompileString`. The resulting code object can then be 1937 evaluated using, for example, :c:func:`PyEval_EvalCode`. 1938 1939 Specifically: 1940 1941 * A call to ``PyParser_SimpleParseStringFlags`` followed by 1942 ``PyNode_Compile`` can be replaced by calling :c:func:`Py_CompileString`. 1943 1944 * There is no direct replacement for ``PyParser_SimpleParseFileFlags``. 1945 To compile code from a ``FILE *`` argument, you will need to read 1946 the file in C and pass the resulting buffer to :c:func:`Py_CompileString`. 1947 1948 * To compile a file given a ``char *`` filename, explicitly open the file, read 1949 it and compile the result. One way to do this is using the :py:mod:`io` 1950 module with :c:func:`PyImport_ImportModule`, :c:func:`PyObject_CallMethod`, 1951 :c:func:`PyBytes_AsString` and :c:func:`Py_CompileString`, 1952 as sketched below. (Declarations and error handling are omitted.) :: 1953 1954 io_module = Import_ImportModule("io"); 1955 fileobject = PyObject_CallMethod(io_module, "open", "ss", filename, "rb"); 1956 source_bytes_object = PyObject_CallMethod(fileobject, "read", ""); 1957 result = PyObject_CallMethod(fileobject, "close", ""); 1958 source_buf = PyBytes_AsString(source_bytes_object); 1959 code = Py_CompileString(source_buf, filename, Py_file_input); 1960 1961 * For ``FrameObject`` objects, the ``f_lasti`` member now represents a wordcode 1962 offset instead of a simple offset into the bytecode string. This means that this 1963 number needs to be multiplied by 2 to be used with APIs that expect a byte offset 1964 instead (like :c:func:`PyCode_Addr2Line` for example). Notice as well that the 1965 ``f_lasti`` member of ``FrameObject`` objects is not considered stable: please 1966 use :c:func:`PyFrame_GetLineNumber` instead. 1967 1968CPython bytecode changes 1969======================== 1970 1971* The ``MAKE_FUNCTION`` instruction now accepts either a dict or a tuple of 1972 strings as the function's annotations. 1973 (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`.) 1974 1975Build Changes 1976============= 1977 1978* :pep:`644`: Python now requires OpenSSL 1.1.1 or newer. OpenSSL 1.0.2 is no 1979 longer supported. 1980 (Contributed by Christian Heimes in :issue:`43669`.) 1981 1982* The C99 functions :c:func:`snprintf` and :c:func:`vsnprintf` are now required 1983 to build Python. 1984 (Contributed by Victor Stinner in :issue:`36020`.) 1985 1986* :mod:`sqlite3` requires SQLite 3.7.15 or higher. (Contributed by Sergey Fedoseev 1987 and Erlend E. Aasland in :issue:`40744` and :issue:`40810`.) 1988 1989* The :mod:`atexit` module must now always be built as a built-in module. 1990 (Contributed by Victor Stinner in :issue:`42639`.) 1991 1992* Add :option:`--disable-test-modules` option to the ``configure`` script: 1993 don't build nor install test modules. 1994 (Contributed by Xavier de Gaye, Thomas Petazzoni and Peixing Xin in :issue:`27640`.) 1995 1996* Add :option:`--with-wheel-pkg-dir=PATH option <--with-wheel-pkg-dir>` 1997 to the ``./configure`` script. If 1998 specified, the :mod:`ensurepip` module looks for ``setuptools`` and ``pip`` 1999 wheel packages in this directory: if both are present, these wheel packages 2000 are used instead of ensurepip bundled wheel packages. 2001 2002 Some Linux distribution packaging policies recommend against bundling 2003 dependencies. For example, Fedora installs wheel packages in the 2004 ``/usr/share/python-wheels/`` directory and don't install the 2005 ``ensurepip._bundled`` package. 2006 2007 (Contributed by Victor Stinner in :issue:`42856`.) 2008 2009* Add a new :option:`configure --without-static-libpython option 2010 <--without-static-libpython>` to not build the ``libpythonMAJOR.MINOR.a`` 2011 static library and not install the ``python.o`` object file. 2012 2013 (Contributed by Victor Stinner in :issue:`43103`.) 2014 2015* The ``configure`` script now uses the ``pkg-config`` utility, if available, 2016 to detect the location of Tcl/Tk headers and libraries. As before, those 2017 locations can be explicitly specified with the ``--with-tcltk-includes`` 2018 and ``--with-tcltk-libs`` configuration options. 2019 (Contributed by Manolis Stamatogiannakis in :issue:`42603`.) 2020 2021* Add :option:`--with-openssl-rpath` option to ``configure`` script. The option 2022 simplifies building Python with a custom OpenSSL installation, e.g. 2023 ``./configure --with-openssl=/path/to/openssl --with-openssl-rpath=auto``. 2024 (Contributed by Christian Heimes in :issue:`43466`.) 2025 2026 2027C API Changes 2028============= 2029 2030PEP 652: Maintaining the Stable ABI 2031----------------------------------- 2032 2033The Stable ABI (Application Binary Interface) for extension modules or 2034embedding Python is now explicitly defined. 2035:ref:`stable` describes C API and ABI stability guarantees along with best 2036practices for using the Stable ABI. 2037 2038(Contributed by Petr Viktorin in :pep:`652` and :issue:`43795`.) 2039 2040New Features 2041------------ 2042 2043* The result of :c:func:`PyNumber_Index` now always has exact type :class:`int`. 2044 Previously, the result could have been an instance of a subclass of ``int``. 2045 (Contributed by Serhiy Storchaka in :issue:`40792`.) 2046 2047* Add a new :c:member:`~PyConfig.orig_argv` member to the :c:type:`PyConfig` 2048 structure: the list of the original command line arguments passed to the 2049 Python executable. 2050 (Contributed by Victor Stinner in :issue:`23427`.) 2051 2052* The :c:func:`PyDateTime_DATE_GET_TZINFO` and 2053 :c:func:`PyDateTime_TIME_GET_TZINFO` macros have been added for accessing 2054 the ``tzinfo`` attributes of :class:`datetime.datetime` and 2055 :class:`datetime.time` objects. 2056 (Contributed by Zackery Spytz in :issue:`30155`.) 2057 2058* Add a :c:func:`PyCodec_Unregister` function to unregister a codec 2059 search function. 2060 (Contributed by Hai Shi in :issue:`41842`.) 2061 2062* The :c:func:`PyIter_Send` function was added to allow 2063 sending value into iterator without raising ``StopIteration`` exception. 2064 (Contributed by Vladimir Matveev in :issue:`41756`.) 2065 2066* Add :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. 2067 (Contributed by Alex Gaynor in :issue:`41784`.) 2068 2069* Add :c:func:`PyModule_AddObjectRef` function: similar to 2070 :c:func:`PyModule_AddObject` but don't steal a reference to the value on 2071 success. 2072 (Contributed by Victor Stinner in :issue:`1635741`.) 2073 2074* Add :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the 2075 reference count of an object and return the object. 2076 (Contributed by Victor Stinner in :issue:`42262`.) 2077 2078* The :c:func:`PyType_FromSpecWithBases` and :c:func:`PyType_FromModuleAndSpec` 2079 functions now accept a single class as the *bases* argument. 2080 (Contributed by Serhiy Storchaka in :issue:`42423`.) 2081 2082* The :c:func:`PyType_FromModuleAndSpec` function now accepts NULL ``tp_doc`` 2083 slot. 2084 (Contributed by Hai Shi in :issue:`41832`.) 2085 2086* The :c:func:`PyType_GetSlot` function can accept 2087 :ref:`static types <static-types>`. 2088 (Contributed by Hai Shi and Petr Viktorin in :issue:`41073`.) 2089 2090* Add a new :c:func:`PySet_CheckExact` function to the C-API to check if an 2091 object is an instance of :class:`set` but not an instance of a subtype. 2092 (Contributed by Pablo Galindo in :issue:`43277`.) 2093 2094* Add :c:func:`PyErr_SetInterruptEx` which allows passing a signal number 2095 to simulate. 2096 (Contributed by Antoine Pitrou in :issue:`43356`.) 2097 2098* The limited C API is now supported if :ref:`Python is built in debug mode 2099 <debug-build>` (if the ``Py_DEBUG`` macro is defined). In the limited C API, 2100 the :c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented 2101 as opaque function 2102 calls, rather than accessing directly the :c:member:`PyObject.ob_refcnt` 2103 member, if Python is built in debug mode and the ``Py_LIMITED_API`` macro 2104 targets Python 3.10 or newer. It became possible to support the limited C API 2105 in debug mode because the :c:type:`PyObject` structure is the same in release 2106 and debug mode since Python 3.8 (see :issue:`36465`). 2107 2108 The limited C API is still not supported in the :option:`--with-trace-refs` 2109 special build (``Py_TRACE_REFS`` macro). 2110 (Contributed by Victor Stinner in :issue:`43688`.) 2111 2112* Add the :c:func:`Py_Is(x, y) <Py_Is>` function to test if the *x* object is 2113 the *y* object, the same as ``x is y`` in Python. Add also the 2114 :c:func:`Py_IsNone`, :c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` functions to 2115 test if an object is, respectively, the ``None`` singleton, the ``True`` 2116 singleton or the ``False`` singleton. 2117 (Contributed by Victor Stinner in :issue:`43753`.) 2118 2119* Add new functions to control the garbage collector from C code: 2120 :c:func:`PyGC_Enable()`, 2121 :c:func:`PyGC_Disable()`, 2122 :c:func:`PyGC_IsEnabled()`. 2123 These functions allow to activate, deactivate and query the state of the garbage collector from C code without 2124 having to import the :mod:`gc` module. 2125 2126* Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow 2127 creating type instances. 2128 (Contributed by Victor Stinner in :issue:`43916`.) 2129 2130* Add a new :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag for creating immutable 2131 type objects: type attributes cannot be set nor deleted. 2132 (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) 2133 2134Porting to Python 3.10 2135---------------------- 2136 2137* The ``PY_SSIZE_T_CLEAN`` macro must now be defined to use 2138 :c:func:`PyArg_ParseTuple` and :c:func:`Py_BuildValue` formats which use 2139 ``#``: ``es#``, ``et#``, ``s#``, ``u#``, ``y#``, ``z#``, ``U#`` and ``Z#``. 2140 See :ref:`arg-parsing` and :pep:`353`. 2141 (Contributed by Victor Stinner in :issue:`40943`.) 2142 2143* Since :c:func:`Py_REFCNT()` is changed to the inline static function, 2144 ``Py_REFCNT(obj) = new_refcnt`` must be replaced with ``Py_SET_REFCNT(obj, new_refcnt)``: 2145 see :c:func:`Py_SET_REFCNT()` (available since Python 3.9). For backward 2146 compatibility, this macro can be used:: 2147 2148 #if PY_VERSION_HEX < 0x030900A4 2149 # define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0) 2150 #endif 2151 2152 (Contributed by Victor Stinner in :issue:`39573`.) 2153 2154* Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had been allowed 2155 for historical reason. It is no longer allowed. 2156 (Contributed by Victor Stinner in :issue:`40839`.) 2157 2158* ``PyUnicode_FromUnicode(NULL, size)`` and ``PyUnicode_FromStringAndSize(NULL, size)`` 2159 raise ``DeprecationWarning`` now. Use :c:func:`PyUnicode_New` to allocate 2160 Unicode object without initial data. 2161 (Contributed by Inada Naoki in :issue:`36346`.) 2162 2163* The private ``_PyUnicode_Name_CAPI`` structure of the PyCapsule API 2164 ``unicodedata.ucnhash_CAPI`` has been moved to the internal C API. 2165 (Contributed by Victor Stinner in :issue:`42157`.) 2166 2167* :c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, 2168 :c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome` and 2169 :c:func:`Py_GetProgramName` functions now return ``NULL`` if called before 2170 :c:func:`Py_Initialize` (before Python is initialized). Use the new 2171 :ref:`init-config` API to get the :ref:`init-path-config`. 2172 (Contributed by Victor Stinner in :issue:`42260`.) 2173 2174* :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and 2175 :c:func:`PyCell_SET` macros can no longer be used as l-value or r-value. 2176 For example, ``x = PyList_SET_ITEM(a, b, c)`` and 2177 ``PyList_SET_ITEM(a, b, c) = x`` now fail with a compiler error. It prevents 2178 bugs like ``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test. 2179 (Contributed by Zackery Spytz and Victor Stinner in :issue:`30459`.) 2180 2181* The non-limited API files ``odictobject.h``, ``parser_interface.h``, 2182 ``picklebufobject.h``, ``pyarena.h``, ``pyctype.h``, ``pydebug.h``, 2183 ``pyfpe.h``, and ``pytime.h`` have been moved to the ``Include/cpython`` 2184 directory. These files must not be included directly, as they are already 2185 included in ``Python.h``; see :ref:`api-includes`. If they have 2186 been included directly, consider including ``Python.h`` instead. 2187 (Contributed by Nicholas Sim in :issue:`35134`.) 2188 2189* Use the :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag to create immutable type 2190 objects. Do not rely on :c:data:`Py_TPFLAGS_HEAPTYPE` to decide if a type 2191 object is mutable or not; check if :c:data:`Py_TPFLAGS_IMMUTABLETYPE` is set 2192 instead. 2193 (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) 2194 2195* The undocumented function ``Py_FrozenMain`` has been removed from the 2196 limited API. The function is mainly useful for custom builds of Python. 2197 (Contributed by Petr Viktorin in :issue:`26241`.) 2198 2199Deprecated 2200---------- 2201 2202* The ``PyUnicode_InternImmortal()`` function is now deprecated 2203 and will be removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace` 2204 instead. 2205 (Contributed by Victor Stinner in :issue:`41692`.) 2206 2207Removed 2208------- 2209 2210* Removed ``Py_UNICODE_str*`` functions manipulating ``Py_UNICODE*`` strings. 2211 (Contributed by Inada Naoki in :issue:`41123`.) 2212 2213 * ``Py_UNICODE_strlen``: use :c:func:`PyUnicode_GetLength` or 2214 :c:macro:`PyUnicode_GET_LENGTH` 2215 * ``Py_UNICODE_strcat``: use :c:func:`PyUnicode_CopyCharacters` or 2216 :c:func:`PyUnicode_FromFormat` 2217 * ``Py_UNICODE_strcpy``, ``Py_UNICODE_strncpy``: use 2218 :c:func:`PyUnicode_CopyCharacters` or :c:func:`PyUnicode_Substring` 2219 * ``Py_UNICODE_strcmp``: use :c:func:`PyUnicode_Compare` 2220 * ``Py_UNICODE_strncmp``: use :c:func:`PyUnicode_Tailmatch` 2221 * ``Py_UNICODE_strchr``, ``Py_UNICODE_strrchr``: use 2222 :c:func:`PyUnicode_FindChar` 2223 2224* Removed ``PyUnicode_GetMax()``. Please migrate to new (:pep:`393`) APIs. 2225 (Contributed by Inada Naoki in :issue:`41103`.) 2226 2227* Removed ``PyLong_FromUnicode()``. Please migrate to :c:func:`PyLong_FromUnicodeObject`. 2228 (Contributed by Inada Naoki in :issue:`41103`.) 2229 2230* Removed ``PyUnicode_AsUnicodeCopy()``. Please use :c:func:`PyUnicode_AsUCS4Copy` or 2231 :c:func:`PyUnicode_AsWideCharString` 2232 (Contributed by Inada Naoki in :issue:`41103`.) 2233 2234* Removed ``_Py_CheckRecursionLimit`` variable: it has been replaced by 2235 ``ceval.recursion_limit`` of the :c:type:`PyInterpreterState` structure. 2236 (Contributed by Victor Stinner in :issue:`41834`.) 2237 2238* Removed undocumented macros ``Py_ALLOW_RECURSION`` and 2239 ``Py_END_ALLOW_RECURSION`` and the ``recursion_critical`` field of the 2240 :c:type:`PyInterpreterState` structure. 2241 (Contributed by Serhiy Storchaka in :issue:`41936`.) 2242 2243* Removed the undocumented ``PyOS_InitInterrupts()`` function. Initializing 2244 Python already implicitly installs signal handlers: see 2245 :c:member:`PyConfig.install_signal_handlers`. 2246 (Contributed by Victor Stinner in :issue:`41713`.) 2247 2248* Remove the ``PyAST_Validate()`` function. It is no longer possible to build a 2249 AST object (``mod_ty`` type) with the public C API. The function was already 2250 excluded from the limited C API (:pep:`384`). 2251 (Contributed by Victor Stinner in :issue:`43244`.) 2252 2253* Remove the ``symtable.h`` header file and the undocumented functions: 2254 2255 * ``PyST_GetScope()`` 2256 * ``PySymtable_Build()`` 2257 * ``PySymtable_BuildObject()`` 2258 * ``PySymtable_Free()`` 2259 * ``Py_SymtableString()`` 2260 * ``Py_SymtableStringObject()`` 2261 2262 The ``Py_SymtableString()`` function was part the stable ABI by mistake but 2263 it could not be used, because the ``symtable.h`` header file was excluded 2264 from the limited C API. 2265 2266 Use Python :mod:`symtable` module instead. 2267 (Contributed by Victor Stinner in :issue:`43244`.) 2268 2269* Remove :c:func:`PyOS_ReadlineFunctionPointer` from the limited C API headers 2270 and from ``python3.dll``, the library that provides the stable ABI on 2271 Windows. Since the function takes a ``FILE*`` argument, its ABI stability 2272 cannot be guaranteed. 2273 (Contributed by Petr Viktorin in :issue:`43868`.) 2274 2275* Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. 2276 These functions were undocumented and excluded from the limited C API. 2277 Most names defined by these header files were not prefixed by ``Py`` and so 2278 could create names conflicts. For example, ``Python-ast.h`` defined a 2279 ``Yield`` macro which was conflict with the ``Yield`` name used by the 2280 Windows ``<winbase.h>`` header. Use the Python :mod:`ast` module instead. 2281 (Contributed by Victor Stinner in :issue:`43244`.) 2282 2283* Remove the compiler and parser functions using ``struct _mod`` type, because 2284 the public AST C API was removed: 2285 2286 * ``PyAST_Compile()`` 2287 * ``PyAST_CompileEx()`` 2288 * ``PyAST_CompileObject()`` 2289 * ``PyFuture_FromAST()`` 2290 * ``PyFuture_FromASTObject()`` 2291 * ``PyParser_ASTFromFile()`` 2292 * ``PyParser_ASTFromFileObject()`` 2293 * ``PyParser_ASTFromFilename()`` 2294 * ``PyParser_ASTFromString()`` 2295 * ``PyParser_ASTFromStringObject()`` 2296 2297 These functions were undocumented and excluded from the limited C API. 2298 (Contributed by Victor Stinner in :issue:`43244`.) 2299 2300* Remove the ``pyarena.h`` header file with functions: 2301 2302 * ``PyArena_New()`` 2303 * ``PyArena_Free()`` 2304 * ``PyArena_Malloc()`` 2305 * ``PyArena_AddPyObject()`` 2306 2307 These functions were undocumented, excluded from the limited C API, and were 2308 only used internally by the compiler. 2309 (Contributed by Victor Stinner in :issue:`43244`.) 2310 2311* The ``PyThreadState.use_tracing`` member has been removed to optimize Python. 2312 (Contributed by Mark Shannon in :issue:`43760`.) 2313