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