1**************************** 2 What's New In Python 3.8 3**************************** 4 5.. Rules for maintenance: 6 7 * Anyone can add text to this document. Do not spend very much time 8 on the wording of your changes, because your text will probably 9 get rewritten to some degree. 10 11 * The maintainer will go through Misc/NEWS periodically and add 12 changes; it's therefore more important to add your changes to 13 Misc/NEWS than to this file. 14 15 * This is not a complete list of every single change; completeness 16 is the purpose of Misc/NEWS. Some changes I consider too small 17 or esoteric to include. If such a change is added to the text, 18 I'll just remove it. (This is another reason you shouldn't spend 19 too much time on writing your addition.) 20 21 * If you want to draw your new text to the attention of the 22 maintainer, add 'XXX' to the beginning of the paragraph or 23 section. 24 25 * It's OK to just add a fragmentary note about a change. For 26 example: "XXX Describe the transmogrify() function added to the 27 socket module." The maintainer will research the change and 28 write the necessary text. 29 30 * You can comment out your additions if you like, but it's not 31 necessary (especially when a final release is some months away). 32 33 * Credit the author of a patch or bugfix. Just the name is 34 sufficient; the e-mail address isn't necessary. 35 36 * It's helpful to add the bug/patch number as a comment: 37 38 XXX Describe the transmogrify() function added to the socket 39 module. 40 (Contributed by P.Y. Developer in :issue:`12345`.) 41 42 This saves the maintainer the effort of going through the Git log 43 when researching a change. 44 45:Editor: Raymond Hettinger 46 47This article explains the new features in Python 3.8, compared to 3.7. 48For full details, see the :ref:`changelog <changelog>`. 49 50.. testsetup:: 51 52 from datetime import date 53 from math import cos, radians 54 from unicodedata import normalize 55 import re 56 import math 57 58 59Summary -- Release highlights 60============================= 61 62.. This section singles out the most important changes in Python 3.8. 63 Brevity is key. 64 65 66.. PEP-sized items next. 67 68 69 70New Features 71============ 72 73Assignment expressions 74---------------------- 75 76There is new syntax ``:=`` that assigns values to variables as part of a larger 77expression. It is affectionately known as "the walrus operator" due to 78its resemblance to `the eyes and tusks of a walrus 79<https://en.wikipedia.org/wiki/Walrus#/media/File:Pacific_Walrus_-_Bull_(8247646168).jpg>`_. 80 81In this example, the assignment expression helps avoid calling 82:func:`len` twice:: 83 84 if (n := len(a)) > 10: 85 print(f"List is too long ({n} elements, expected <= 10)") 86 87A similar benefit arises during regular expression matching where 88match objects are needed twice, once to test whether a match 89occurred and another to extract a subgroup:: 90 91 discount = 0.0 92 if (mo := re.search(r'(\d+)% discount', advertisement)): 93 discount = float(mo.group(1)) / 100.0 94 95The operator is also useful with while-loops that compute 96a value to test loop termination and then need that same 97value again in the body of the loop:: 98 99 # Loop over fixed length blocks 100 while (block := f.read(256)) != '': 101 process(block) 102 103Another motivating use case arises in list comprehensions where 104a value computed in a filtering condition is also needed in 105the expression body:: 106 107 [clean_name.title() for name in names 108 if (clean_name := normalize('NFC', name)) in allowed_names] 109 110Try to limit use of the walrus operator to clean cases that reduce 111complexity and improve readability. 112 113See :pep:`572` for a full description. 114 115(Contributed by Emily Morehouse in :issue:`35224`.) 116 117 118Positional-only parameters 119-------------------------- 120 121There is a new function parameter syntax ``/`` to indicate that some 122function parameters must be specified positionally and cannot be used as 123keyword arguments. This is the same notation shown by ``help()`` for C 124functions annotated with Larry Hastings' `Argument Clinic 125<https://docs.python.org/3/howto/clinic.html>`_ tool. 126 127In the following example, parameters *a* and *b* are positional-only, 128while *c* or *d* can be positional or keyword, and *e* or *f* are 129required to be keywords:: 130 131 def f(a, b, /, c, d, *, e, f): 132 print(a, b, c, d, e, f) 133 134The following is a valid call:: 135 136 f(10, 20, 30, d=40, e=50, f=60) 137 138However, these are invalid calls:: 139 140 f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument 141 f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument 142 143One use case for this notation is that it allows pure Python functions 144to fully emulate behaviors of existing C coded functions. For example, 145the built-in :func:`divmod` function does not accept keyword arguments:: 146 147 def divmod(a, b, /): 148 "Emulate the built in divmod() function" 149 return (a // b, a % b) 150 151Another use case is to preclude keyword arguments when the parameter 152name is not helpful. For example, the builtin :func:`len` function has 153the signature ``len(obj, /)``. This precludes awkward calls such as:: 154 155 len(obj='hello') # The "obj" keyword argument impairs readability 156 157A further benefit of marking a parameter as positional-only is that it 158allows the parameter name to be changed in the future without risk of 159breaking client code. For example, in the :mod:`statistics` module, the 160parameter name *dist* may be changed in the future. This was made 161possible with the following function specification:: 162 163 def quantiles(dist, /, *, n=4, method='exclusive') 164 ... 165 166Since the parameters to the left of ``/`` are not exposed as possible 167keywords, the parameters names remain available for use in ``**kwargs``:: 168 169 >>> def f(a, b, /, **kwargs): 170 ... print(a, b, kwargs) 171 ... 172 >>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways 173 10 20 {'a': 1, 'b': 2, 'c': 3} 174 175This greatly simplifies the implementation of functions and methods 176that need to accept arbitrary keyword arguments. For example, here 177is an excerpt from code in the :mod:`collections` module:: 178 179 class Counter(dict): 180 181 def __init__(self, iterable=None, /, **kwds): 182 # Note "iterable" is a possible keyword argument 183 184See :pep:`570` for a full description. 185 186(Contributed by Pablo Galindo in :issue:`36540`.) 187 188.. TODO: Pablo will sprint on docs at PyCon US 2019. 189 190 191Parallel filesystem cache for compiled bytecode files 192----------------------------------------------------- 193 194The new :envvar:`PYTHONPYCACHEPREFIX` setting (also available as 195:option:`-X` ``pycache_prefix``) configures the implicit bytecode 196cache to use a separate parallel filesystem tree, rather than 197the default ``__pycache__`` subdirectories within each source 198directory. 199 200The location of the cache is reported in :data:`sys.pycache_prefix` 201(:const:`None` indicates the default location in ``__pycache__`` 202subdirectories). 203 204(Contributed by Carl Meyer in :issue:`33499`.) 205 206 207Debug build uses the same ABI as release build 208----------------------------------------------- 209 210Python now uses the same ABI whether it's built in release or debug mode. On 211Unix, when Python is built in debug mode, it is now possible to load C 212extensions built in release mode and C extensions built using the stable ABI. 213 214Release builds and debug builds are now ABI compatible: defining the 215``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which 216introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` macro, which 217adds the :func:`sys.getobjects` function and the :envvar:`PYTHONDUMPREFS` 218environment variable, can be set using the new ``./configure --with-trace-refs`` 219build option. 220(Contributed by Victor Stinner in :issue:`36465`.) 221 222On Unix, C extensions are no longer linked to libpython except on Android 223and Cygwin. 224It is now possible 225for a statically linked Python to load a C extension built using a shared 226library Python. 227(Contributed by Victor Stinner in :issue:`21536`.) 228 229On Unix, when Python is built in debug mode, import now also looks for C 230extensions compiled in release mode and for C extensions compiled with the 231stable ABI. 232(Contributed by Victor Stinner in :issue:`36722`.) 233 234To embed Python into an application, a new ``--embed`` option must be passed to 235``python3-config --libs --embed`` to get ``-lpython3.8`` (link the application 236to libpython). To support both 3.8 and older, try ``python3-config --libs 237--embed`` first and fallback to ``python3-config --libs`` (without ``--embed``) 238if the previous command fails. 239 240Add a pkg-config ``python-3.8-embed`` module to embed Python into an 241application: ``pkg-config python-3.8-embed --libs`` includes ``-lpython3.8``. 242To support both 3.8 and older, try ``pkg-config python-X.Y-embed --libs`` first 243and fallback to ``pkg-config python-X.Y --libs`` (without ``--embed``) if the 244previous command fails (replace ``X.Y`` with the Python version). 245 246On the other hand, ``pkg-config python3.8 --libs`` no longer contains 247``-lpython3.8``. C extensions must not be linked to libpython (except on 248Android and Cygwin, whose cases are handled by the script); 249this change is backward incompatible on purpose. 250(Contributed by Victor Stinner in :issue:`36721`.) 251 252 253f-strings support ``=`` for self-documenting expressions and debugging 254---------------------------------------------------------------------- 255 256Added an ``=`` specifier to :term:`f-string`\s. An f-string such as 257``f'{expr=}'`` will expand to the text of the expression, an equal sign, 258then the representation of the evaluated expression. For example: 259 260 >>> user = 'eric_idle' 261 >>> member_since = date(1975, 7, 31) 262 >>> f'{user=} {member_since=}' 263 "user='eric_idle' member_since=datetime.date(1975, 7, 31)" 264 265The usual :ref:`f-string format specifiers <f-strings>` allow more 266control over how the result of the expression is displayed:: 267 268 >>> delta = date.today() - member_since 269 >>> f'{user=!s} {delta.days=:,d}' 270 'user=eric_idle delta.days=16,075' 271 272The ``=`` specifier will display the whole expression so that 273calculations can be shown:: 274 275 >>> print(f'{theta=} {cos(radians(theta))=:.3f}') 276 theta=30 cos(radians(theta))=0.866 277 278(Contributed by Eric V. Smith and Larry Hastings in :issue:`36817`.) 279 280 281PEP 578: Python Runtime Audit Hooks 282----------------------------------- 283 284The PEP adds an Audit Hook and Verified Open Hook. Both are available from 285Python and native code, allowing applications and frameworks written in pure 286Python code to take advantage of extra notifications, while also allowing 287embedders or system administrators to deploy builds of Python where auditing is 288always enabled. 289 290See :pep:`578` for full details. 291 292 293PEP 587: Python Initialization Configuration 294-------------------------------------------- 295 296The :pep:`587` adds a new C API to configure the Python Initialization 297providing finer control on the whole configuration and better error reporting. 298 299New structures: 300 301* :c:type:`PyConfig` 302* :c:type:`PyPreConfig` 303* :c:type:`PyStatus` 304* :c:type:`PyWideStringList` 305 306New functions: 307 308* :c:func:`PyConfig_Clear` 309* :c:func:`PyConfig_InitIsolatedConfig` 310* :c:func:`PyConfig_InitPythonConfig` 311* :c:func:`PyConfig_Read` 312* :c:func:`PyConfig_SetArgv` 313* :c:func:`PyConfig_SetBytesArgv` 314* :c:func:`PyConfig_SetBytesString` 315* :c:func:`PyConfig_SetString` 316* :c:func:`PyPreConfig_InitIsolatedConfig` 317* :c:func:`PyPreConfig_InitPythonConfig` 318* :c:func:`PyStatus_Error` 319* :c:func:`PyStatus_Exception` 320* :c:func:`PyStatus_Exit` 321* :c:func:`PyStatus_IsError` 322* :c:func:`PyStatus_IsExit` 323* :c:func:`PyStatus_NoMemory` 324* :c:func:`PyStatus_Ok` 325* :c:func:`PyWideStringList_Append` 326* :c:func:`PyWideStringList_Insert` 327* :c:func:`Py_BytesMain` 328* :c:func:`Py_ExitStatusException` 329* :c:func:`Py_InitializeFromConfig` 330* :c:func:`Py_PreInitialize` 331* :c:func:`Py_PreInitializeFromArgs` 332* :c:func:`Py_PreInitializeFromBytesArgs` 333* :c:func:`Py_RunMain` 334 335This PEP also adds ``_PyRuntimeState.preconfig`` (:c:type:`PyPreConfig` type) 336and ``PyInterpreterState.config`` (:c:type:`PyConfig` type) fields to these 337internal structures. ``PyInterpreterState.config`` becomes the new 338reference configuration, replacing global configuration variables and 339other private variables. 340 341See :ref:`Python Initialization Configuration <init-config>` for the 342documentation. 343 344See :pep:`587` for a full description. 345 346(Contributed by Victor Stinner in :issue:`36763`.) 347 348 349PEP 590: Vectorcall: a fast calling protocol for CPython 350-------------------------------------------------------- 351 352:ref:`vectorcall` is added to the Python/C API. 353It is meant to formalize existing optimizations which were already done 354for various classes. 355Any static type implementing a callable can use this protocol. 356 357This is currently provisional. 358The aim is to make it fully public in Python 3.9. 359 360See :pep:`590` for a full description. 361 362(Contributed by Jeroen Demeyer, Mark Shannon and Petr Viktorin in :issue:`36974`.) 363 364 365Pickle protocol 5 with out-of-band data buffers 366----------------------------------------------- 367 368When :mod:`pickle` is used to transfer large data between Python processes 369in order to take advantage of multi-core or multi-machine processing, 370it is important to optimize the transfer by reducing memory copies, and 371possibly by applying custom techniques such as data-dependent compression. 372 373The :mod:`pickle` protocol 5 introduces support for out-of-band buffers 374where :pep:`3118`-compatible data can be transmitted separately from the 375main pickle stream, at the discretion of the communication layer. 376 377See :pep:`574` for a full description. 378 379(Contributed by Antoine Pitrou in :issue:`36785`.) 380 381 382Other Language Changes 383====================== 384 385* A :keyword:`continue` statement was illegal in the :keyword:`finally` clause 386 due to a problem with the implementation. In Python 3.8 this restriction 387 was lifted. 388 (Contributed by Serhiy Storchaka in :issue:`32489`.) 389 390* The :class:`bool`, :class:`int`, and :class:`fractions.Fraction` types 391 now have an :meth:`~int.as_integer_ratio` method like that found in 392 :class:`float` and :class:`decimal.Decimal`. This minor API extension 393 makes it possible to write ``numerator, denominator = 394 x.as_integer_ratio()`` and have it work across multiple numeric types. 395 (Contributed by Lisa Roach in :issue:`33073` and Raymond Hettinger in 396 :issue:`37819`.) 397 398* Constructors of :class:`int`, :class:`float` and :class:`complex` will now 399 use the :meth:`~object.__index__` special method, if available and the 400 corresponding method :meth:`~object.__int__`, :meth:`~object.__float__` 401 or :meth:`~object.__complex__` is not available. 402 (Contributed by Serhiy Storchaka in :issue:`20092`.) 403 404* Added support of ``\N{name}`` escapes in :mod:`regular expressions <re>`:: 405 406 >>> notice = 'Copyright © 2019' 407 >>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s*(\d{4})') 408 >>> int(copyright_year_pattern.search(notice).group(1)) 409 2019 410 411 (Contributed by Jonathan Eunice and Serhiy Storchaka in :issue:`30688`.) 412 413* Dict and dictviews are now iterable in reversed insertion order using 414 :func:`reversed`. (Contributed by Rémi Lapeyre in :issue:`33462`.) 415 416* The syntax allowed for keyword names in function calls was further 417 restricted. In particular, ``f((keyword)=arg)`` is no longer allowed. It was 418 never intended to permit more than a bare name on the left-hand side of a 419 keyword argument assignment term. 420 (Contributed by Benjamin Peterson in :issue:`34641`.) 421 422* Generalized iterable unpacking in :keyword:`yield` and 423 :keyword:`return` statements no longer requires enclosing parentheses. 424 This brings the *yield* and *return* syntax into better agreement with 425 normal assignment syntax:: 426 427 >>> def parse(family): 428 lastname, *members = family.split() 429 return lastname.upper(), *members 430 431 >>> parse('simpsons homer marge bart lisa maggie') 432 ('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'maggie') 433 434 (Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.) 435 436* When a comma is missed in code such as ``[(10, 20) (30, 40)]``, the 437 compiler displays a :exc:`SyntaxWarning` with a helpful suggestion. 438 This improves on just having a :exc:`TypeError` indicating that the 439 first tuple was not callable. (Contributed by Serhiy Storchaka in 440 :issue:`15248`.) 441 442* Arithmetic operations between subclasses of :class:`datetime.date` or 443 :class:`datetime.datetime` and :class:`datetime.timedelta` objects now return 444 an instance of the subclass, rather than the base class. This also affects 445 the return type of operations whose implementation (directly or indirectly) 446 uses :class:`datetime.timedelta` arithmetic, such as 447 :meth:`~datetime.datetime.astimezone`. 448 (Contributed by Paul Ganssle in :issue:`32417`.) 449 450* When the Python interpreter is interrupted by Ctrl-C (SIGINT) and the 451 resulting :exc:`KeyboardInterrupt` exception is not caught, the Python process 452 now exits via a SIGINT signal or with the correct exit code such that the 453 calling process can detect that it died due to a Ctrl-C. Shells on POSIX 454 and Windows use this to properly terminate scripts in interactive sessions. 455 (Contributed by Google via Gregory P. Smith in :issue:`1054041`.) 456 457* Some advanced styles of programming require updating the 458 :class:`types.CodeType` object for an existing function. Since code 459 objects are immutable, a new code object needs to be created, one 460 that is modeled on the existing code object. With 19 parameters, 461 this was somewhat tedious. Now, the new ``replace()`` method makes 462 it possible to create a clone with a few altered parameters. 463 464 Here's an example that alters the :func:`statistics.mean` function to 465 prevent the *data* parameter from being used as a keyword argument:: 466 467 >>> from statistics import mean 468 >>> mean(data=[10, 20, 90]) 469 40 470 >>> mean.__code__ = mean.__code__.replace(co_posonlyargcount=1) 471 >>> mean(data=[10, 20, 90]) 472 Traceback (most recent call last): 473 ... 474 TypeError: mean() got some positional-only arguments passed as keyword arguments: 'data' 475 476 (Contributed by Victor Stinner in :issue:`37032`.) 477 478* For integers, the three-argument form of the :func:`pow` function now 479 permits the exponent to be negative in the case where the base is 480 relatively prime to the modulus. It then computes a modular inverse to 481 the base when the exponent is ``-1``, and a suitable power of that 482 inverse for other negative exponents. For example, to compute the 483 `modular multiplicative inverse 484 <https://en.wikipedia.org/wiki/Modular_multiplicative_inverse>`_ of 38 485 modulo 137, write:: 486 487 >>> pow(38, -1, 137) 488 119 489 >>> 119 * 38 % 137 490 1 491 492 Modular inverses arise in the solution of `linear Diophantine 493 equations <https://en.wikipedia.org/wiki/Diophantine_equation>`_. 494 For example, to find integer solutions for ``4258 + 147 = 369``, 495 first rewrite as ``4258 ≡ 369 (mod 147)`` then solve: 496 497 >>> x = 369 * pow(4258, -1, 147) % 147 498 >>> y = (4258 * x - 369) // -147 499 >>> 4258 * x + 147 * y 500 369 501 502 (Contributed by Mark Dickinson in :issue:`36027`.) 503 504* Dict comprehensions have been synced-up with dict literals so that the 505 key is computed first and the value second:: 506 507 >>> # Dict comprehension 508 >>> cast = {input('role? '): input('actor? ') for i in range(2)} 509 role? King Arthur 510 actor? Chapman 511 role? Black Knight 512 actor? Cleese 513 514 >>> # Dict literal 515 >>> cast = {input('role? '): input('actor? ')} 516 role? Sir Robin 517 actor? Eric Idle 518 519 The guaranteed execution order is helpful with assignment expressions 520 because variables assigned in the key expression will be available in 521 the value expression:: 522 523 >>> names = ['Martin von Löwis', 'Łukasz Langa', 'Walter Dörwald'] 524 >>> {(n := normalize('NFC', name)).casefold() : n for name in names} 525 {'martin von löwis': 'Martin von Löwis', 526 'łukasz langa': 'Łukasz Langa', 527 'walter dörwald': 'Walter Dörwald'} 528 529 (Contributed by Jörn Heissler in :issue:`35224`.) 530 531* The :meth:`object.__reduce__` method can now return a tuple from two to 532 six elements long. Formerly, five was the limit. The new, optional sixth 533 element is a callable with a ``(obj, state)`` signature. This allows the 534 direct control over the state-updating behavior of a specific object. If 535 not *None*, this callable will have priority over the object's 536 :meth:`~__setstate__` method. 537 (Contributed by Pierre Glaser and Olivier Grisel in :issue:`35900`.) 538 539New Modules 540=========== 541 542* The new :mod:`importlib.metadata` module provides (provisional) support for 543 reading metadata from third-party packages. For example, it can extract an 544 installed package's version number, list of entry points, and more:: 545 546 >>> # Note following example requires that the popular "requests" 547 >>> # package has been installed. 548 >>> 549 >>> from importlib.metadata import version, requires, files 550 >>> version('requests') 551 '2.22.0' 552 >>> list(requires('requests')) 553 ['chardet (<3.1.0,>=3.0.2)'] 554 >>> list(files('requests'))[:5] 555 [PackagePath('requests-2.22.0.dist-info/INSTALLER'), 556 PackagePath('requests-2.22.0.dist-info/LICENSE'), 557 PackagePath('requests-2.22.0.dist-info/METADATA'), 558 PackagePath('requests-2.22.0.dist-info/RECORD'), 559 PackagePath('requests-2.22.0.dist-info/WHEEL')] 560 561 (Contributed by Barry Warsaw and Jason R. Coombs in :issue:`34632`.) 562 563 564Improved Modules 565================ 566 567ast 568--- 569 570AST nodes now have ``end_lineno`` and ``end_col_offset`` attributes, 571which give the precise location of the end of the node. (This only 572applies to nodes that have ``lineno`` and ``col_offset`` attributes.) 573 574New function :func:`ast.get_source_segment` returns the source code 575for a specific AST node. 576 577(Contributed by Ivan Levkivskyi in :issue:`33416`.) 578 579The :func:`ast.parse` function has some new flags: 580 581* ``type_comments=True`` causes it to return the text of :pep:`484` and 582 :pep:`526` type comments associated with certain AST nodes; 583 584* ``mode='func_type'`` can be used to parse :pep:`484` "signature type 585 comments" (returned for function definition AST nodes); 586 587* ``feature_version=(3, N)`` allows specifying an earlier Python 3 588 version. For example, ``feature_version=(3, 4)`` will treat 589 :keyword:`async` and :keyword:`await` as non-reserved words. 590 591(Contributed by Guido van Rossum in :issue:`35766`.) 592 593 594asyncio 595------- 596 597:func:`asyncio.run` has graduated from the provisional to stable API. This 598function can be used to execute a :term:`coroutine` and return the result while 599automatically managing the event loop. For example:: 600 601 import asyncio 602 603 async def main(): 604 await asyncio.sleep(0) 605 return 42 606 607 asyncio.run(main()) 608 609This is *roughly* equivalent to:: 610 611 import asyncio 612 613 async def main(): 614 await asyncio.sleep(0) 615 return 42 616 617 loop = asyncio.new_event_loop() 618 asyncio.set_event_loop(loop) 619 try: 620 loop.run_until_complete(main()) 621 finally: 622 asyncio.set_event_loop(None) 623 loop.close() 624 625 626The actual implementation is significantly more complex. Thus, 627:func:`asyncio.run` should be the preferred way of running asyncio programs. 628 629(Contributed by Yury Selivanov in :issue:`32314`.) 630 631Running ``python -m asyncio`` launches a natively async REPL. This allows rapid 632experimentation with code that has a top-level :keyword:`await`. There is no 633longer a need to directly call ``asyncio.run()`` which would spawn a new event 634loop on every invocation: 635 636.. code-block:: none 637 638 $ python -m asyncio 639 asyncio REPL 3.8.0 640 Use "await" directly instead of "asyncio.run()". 641 Type "help", "copyright", "credits" or "license" for more information. 642 >>> import asyncio 643 >>> await asyncio.sleep(10, result='hello') 644 hello 645 646(Contributed by Yury Selivanov in :issue:`37028`.) 647 648The exception :class:`asyncio.CancelledError` now inherits from 649:class:`BaseException` rather than :class:`Exception` and no longer inherits 650from :class:`concurrent.futures.CancelledError`. 651(Contributed by Yury Selivanov in :issue:`32528`.) 652 653On Windows, the default event loop is now :class:`~asyncio.ProactorEventLoop`. 654(Contributed by Victor Stinner in :issue:`34687`.) 655 656:class:`~asyncio.ProactorEventLoop` now also supports UDP. 657(Contributed by Adam Meily and Andrew Svetlov in :issue:`29883`.) 658 659:class:`~asyncio.ProactorEventLoop` can now be interrupted by 660:exc:`KeyboardInterrupt` ("CTRL+C"). 661(Contributed by Vladimir Matveev in :issue:`23057`.) 662 663Added :meth:`asyncio.Task.get_coro` for getting the wrapped coroutine 664within an :class:`asyncio.Task`. 665(Contributed by Alex Grönholm in :issue:`36999`.) 666 667Asyncio tasks can now be named, either by passing the ``name`` keyword 668argument to :func:`asyncio.create_task` or 669the :meth:`~asyncio.loop.create_task` event loop method, or by 670calling the :meth:`~asyncio.Task.set_name` method on the task object. The 671task name is visible in the ``repr()`` output of :class:`asyncio.Task` and 672can also be retrieved using the :meth:`~asyncio.Task.get_name` method. 673(Contributed by Alex Grönholm in :issue:`34270`.) 674 675Added support for 676`Happy Eyeballs <https://en.wikipedia.org/wiki/Happy_Eyeballs>`_ to 677:func:`asyncio.loop.create_connection`. To specify the behavior, two new 678parameters have been added: *happy_eyeballs_delay* and *interleave*. The Happy 679Eyeballs algorithm improves responsiveness in applications that support IPv4 680and IPv6 by attempting to simultaneously connect using both. 681(Contributed by twisteroid ambassador in :issue:`33530`.) 682 683 684builtins 685-------- 686 687The :func:`compile` built-in has been improved to accept the 688``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag. With this new flag passed, 689:func:`compile` will allow top-level ``await``, ``async for`` and ``async with`` 690constructs that are usually considered invalid syntax. Asynchronous code object 691marked with the ``CO_COROUTINE`` flag may then be returned. 692(Contributed by Matthias Bussonnier in :issue:`34616`) 693 694 695collections 696----------- 697 698The :meth:`~collections.somenamedtuple._asdict` method for 699:func:`collections.namedtuple` now returns a :class:`dict` instead of a 700:class:`collections.OrderedDict`. This works because regular dicts have 701guaranteed ordering since Python 3.7. If the extra features of 702:class:`OrderedDict` are required, the suggested remediation is to cast the 703result to the desired type: ``OrderedDict(nt._asdict())``. 704(Contributed by Raymond Hettinger in :issue:`35864`.) 705 706 707cProfile 708-------- 709 710The :class:`cProfile.Profile <profile.Profile>` class can now be used as a context manager. 711Profile a block of code by running:: 712 713 import cProfile 714 715 with cProfile.Profile() as profiler: 716 # code to be profiled 717 ... 718 719(Contributed by Scott Sanderson in :issue:`29235`.) 720 721 722csv 723--- 724 725The :class:`csv.DictReader` now returns instances of :class:`dict` instead of 726a :class:`collections.OrderedDict`. The tool is now faster and uses less 727memory while still preserving the field order. 728(Contributed by Michael Selik in :issue:`34003`.) 729 730 731curses 732------- 733 734Added a new variable holding structured version information for the 735underlying ncurses library: :data:`~curses.ncurses_version`. 736(Contributed by Serhiy Storchaka in :issue:`31680`.) 737 738 739ctypes 740------ 741 742On Windows, :class:`~ctypes.CDLL` and subclasses now accept a *winmode* parameter 743to specify flags for the underlying ``LoadLibraryEx`` call. The default flags are 744set to only load DLL dependencies from trusted locations, including the path 745where the DLL is stored (if a full or partial path is used to load the initial 746DLL) and paths added by :func:`~os.add_dll_directory`. 747(Contributed by Steve Dower in :issue:`36085`.) 748 749 750datetime 751-------- 752 753Added new alternate constructors :meth:`datetime.date.fromisocalendar` and 754:meth:`datetime.datetime.fromisocalendar`, which construct :class:`date` and 755:class:`datetime` objects respectively from ISO year, week number, and weekday; 756these are the inverse of each class's ``isocalendar`` method. 757(Contributed by Paul Ganssle in :issue:`36004`.) 758 759 760functools 761--------- 762 763:func:`functools.lru_cache` can now be used as a straight decorator rather 764than as a function returning a decorator. So both of these are now supported:: 765 766 @lru_cache 767 def f(x): 768 ... 769 770 @lru_cache(maxsize=256) 771 def f(x): 772 ... 773 774(Contributed by Raymond Hettinger in :issue:`36772`.) 775 776Added a new :func:`functools.cached_property` decorator, for computed properties 777cached for the life of the instance. :: 778 779 import functools 780 import statistics 781 782 class Dataset: 783 def __init__(self, sequence_of_numbers): 784 self.data = sequence_of_numbers 785 786 @functools.cached_property 787 def variance(self): 788 return statistics.variance(self.data) 789 790(Contributed by Carl Meyer in :issue:`21145`) 791 792 793Added a new :func:`functools.singledispatchmethod` decorator that converts 794methods into :term:`generic functions <generic function>` using 795:term:`single dispatch`:: 796 797 from functools import singledispatchmethod 798 from contextlib import suppress 799 800 class TaskManager: 801 802 def __init__(self, tasks): 803 self.tasks = list(tasks) 804 805 @singledispatchmethod 806 def discard(self, value): 807 with suppress(ValueError): 808 self.tasks.remove(value) 809 810 @discard.register(list) 811 def _(self, tasks): 812 targets = set(tasks) 813 self.tasks = [x for x in self.tasks if x not in targets] 814 815(Contributed by Ethan Smith in :issue:`32380`) 816 817gc 818-- 819 820:func:`~gc.get_objects` can now receive an optional *generation* parameter 821indicating a generation to get objects from. 822(Contributed by Pablo Galindo in :issue:`36016`.) 823 824 825gettext 826------- 827 828Added :func:`~gettext.pgettext` and its variants. 829(Contributed by Franz Glasner, Éric Araujo, and Cheryl Sabella in :issue:`2504`.) 830 831 832gzip 833---- 834 835Added the *mtime* parameter to :func:`gzip.compress` for reproducible output. 836(Contributed by Guo Ci Teo in :issue:`34898`.) 837 838A :exc:`~gzip.BadGzipFile` exception is now raised instead of :exc:`OSError` 839for certain types of invalid or corrupt gzip files. 840(Contributed by Filip Gruszczyński, Michele Orrù, and Zackery Spytz in 841:issue:`6584`.) 842 843 844IDLE and idlelib 845---------------- 846 847Output over N lines (50 by default) is squeezed down to a button. 848N can be changed in the PyShell section of the General page of the 849Settings dialog. Fewer, but possibly extra long, lines can be squeezed by 850right clicking on the output. Squeezed output can be expanded in place 851by double-clicking the button or into the clipboard or a separate window 852by right-clicking the button. (Contributed by Tal Einat in :issue:`1529353`.) 853 854Add "Run Customized" to the Run menu to run a module with customized 855settings. Any command line arguments entered are added to sys.argv. 856They also re-appear in the box for the next customized run. One can also 857suppress the normal Shell main module restart. (Contributed by Cheryl 858Sabella, Terry Jan Reedy, and others in :issue:`5680` and :issue:`37627`.) 859 860Added optional line numbers for IDLE editor windows. Windows 861open without line numbers unless set otherwise in the General 862tab of the configuration dialog. Line numbers for an existing 863window are shown and hidden in the Options menu. 864(Contributed by Tal Einat and Saimadhav Heblikar in :issue:`17535`.) 865 866OS native encoding is now used for converting between Python strings and Tcl 867objects. This allows IDLE to work with emoji and other non-BMP characters. 868These characters can be displayed or copied and pasted to or from the 869clipboard. Converting strings from Tcl to Python and back now never fails. 870(Many people worked on this for eight years but the problem was finally 871solved by Serhiy Storchaka in :issue:`13153`.) 872 873New in 3.8.1: 874 875Add option to toggle cursor blink off. (Contributed by Zackery Spytz 876in :issue:`4603`.) 877 878Escape key now closes IDLE completion windows. (Contributed by Johnny 879Najera in :issue:`38944`.) 880 881The changes above have been backported to 3.7 maintenance releases. 882 883Add keywords to module name completion list. (Contributed by Terry J. 884Reedy in :issue:`37765`.) 885 886inspect 887------- 888 889The :func:`inspect.getdoc` function can now find docstrings for ``__slots__`` 890if that attribute is a :class:`dict` where the values are docstrings. 891This provides documentation options similar to what we already have 892for :func:`property`, :func:`classmethod`, and :func:`staticmethod`:: 893 894 class AudioClip: 895 __slots__ = {'bit_rate': 'expressed in kilohertz to one decimal place', 896 'duration': 'in seconds, rounded up to an integer'} 897 def __init__(self, bit_rate, duration): 898 self.bit_rate = round(bit_rate / 1000.0, 1) 899 self.duration = ceil(duration) 900 901(Contributed by Raymond Hettinger in :issue:`36326`.) 902 903 904io 905-- 906 907In development mode (:option:`-X` ``env``) and in debug build, the 908:class:`io.IOBase` finalizer now logs the exception if the ``close()`` method 909fails. The exception is ignored silently by default in release build. 910(Contributed by Victor Stinner in :issue:`18748`.) 911 912 913itertools 914--------- 915 916The :func:`itertools.accumulate` function added an option *initial* keyword 917argument to specify an initial value:: 918 919 >>> from itertools import accumulate 920 >>> list(accumulate([10, 5, 30, 15], initial=1000)) 921 [1000, 1010, 1015, 1045, 1060] 922 923(Contributed by Lisa Roach in :issue:`34659`.) 924 925 926json.tool 927--------- 928 929Add option ``--json-lines`` to parse every input line as a separate JSON object. 930(Contributed by Weipeng Hong in :issue:`31553`.) 931 932 933logging 934------- 935 936Added a *force* keyword argument to :func:`logging.basicConfig()` 937When set to true, any existing handlers attached 938to the root logger are removed and closed before carrying out the 939configuration specified by the other arguments. 940 941This solves a long-standing problem. Once a logger or *basicConfig()* had 942been called, subsequent calls to *basicConfig()* were silently ignored. 943This made it difficult to update, experiment with, or teach the various 944logging configuration options using the interactive prompt or a Jupyter 945notebook. 946 947(Suggested by Raymond Hettinger, implemented by Dong-hee Na, and 948reviewed by Vinay Sajip in :issue:`33897`.) 949 950 951math 952---- 953 954Added new function :func:`math.dist` for computing Euclidean distance 955between two points. (Contributed by Raymond Hettinger in :issue:`33089`.) 956 957Expanded the :func:`math.hypot` function to handle multiple dimensions. 958Formerly, it only supported the 2-D case. 959(Contributed by Raymond Hettinger in :issue:`33089`.) 960 961Added new function, :func:`math.prod`, as analogous function to :func:`sum` 962that returns the product of a 'start' value (default: 1) times an iterable of 963numbers:: 964 965 >>> prior = 0.8 966 >>> likelihoods = [0.625, 0.84, 0.30] 967 >>> math.prod(likelihoods, start=prior) 968 0.126 969 970(Contributed by Pablo Galindo in :issue:`35606`.) 971 972Added two new combinatoric functions :func:`math.perm` and :func:`math.comb`:: 973 974 >>> math.perm(10, 3) # Permutations of 10 things taken 3 at a time 975 720 976 >>> math.comb(10, 3) # Combinations of 10 things taken 3 at a time 977 120 978 979(Contributed by Yash Aggarwal, Keller Fuchs, Serhiy Storchaka, and Raymond 980Hettinger in :issue:`37128`, :issue:`37178`, and :issue:`35431`.) 981 982Added a new function :func:`math.isqrt` for computing accurate integer square 983roots without conversion to floating point. The new function supports 984arbitrarily large integers. It is faster than ``floor(sqrt(n))`` but slower 985than :func:`math.sqrt`:: 986 987 >>> r = 650320427 988 >>> s = r ** 2 989 >>> isqrt(s - 1) # correct 990 650320426 991 >>> floor(sqrt(s - 1)) # incorrect 992 650320427 993 994(Contributed by Mark Dickinson in :issue:`36887`.) 995 996The function :func:`math.factorial` no longer accepts arguments that are not 997int-like. (Contributed by Pablo Galindo in :issue:`33083`.) 998 999 1000mmap 1001---- 1002 1003The :class:`mmap.mmap` class now has an :meth:`~mmap.mmap.madvise` method to 1004access the ``madvise()`` system call. 1005(Contributed by Zackery Spytz in :issue:`32941`.) 1006 1007 1008multiprocessing 1009--------------- 1010 1011Added new :mod:`multiprocessing.shared_memory` module. 1012(Contributed by Davin Potts in :issue:`35813`.) 1013 1014On macOS, the *spawn* start method is now used by default. 1015(Contributed by Victor Stinner in :issue:`33725`.) 1016 1017 1018os 1019-- 1020 1021Added new function :func:`~os.add_dll_directory` on Windows for providing 1022additional search paths for native dependencies when importing extension 1023modules or loading DLLs using :mod:`ctypes`. 1024(Contributed by Steve Dower in :issue:`36085`.) 1025 1026A new :func:`os.memfd_create` function was added to wrap the 1027``memfd_create()`` syscall. 1028(Contributed by Zackery Spytz and Christian Heimes in :issue:`26836`.) 1029 1030On Windows, much of the manual logic for handling reparse points (including 1031symlinks and directory junctions) has been delegated to the operating system. 1032Specifically, :func:`os.stat` will now traverse anything supported by the 1033operating system, while :func:`os.lstat` will only open reparse points that 1034identify as "name surrogates" while others are opened as for :func:`os.stat`. 1035In all cases, :attr:`stat_result.st_mode` will only have ``S_IFLNK`` set for 1036symbolic links and not other kinds of reparse points. To identify other kinds 1037of reparse point, check the new :attr:`stat_result.st_reparse_tag` attribute. 1038 1039On Windows, :func:`os.readlink` is now able to read directory junctions. Note 1040that :func:`~os.path.islink` will return ``False`` for directory junctions, 1041and so code that checks ``islink`` first will continue to treat junctions as 1042directories, while code that handles errors from :func:`os.readlink` may now 1043treat junctions as links. 1044 1045(Contributed by Steve Dower in :issue:`37834`.) 1046 1047 1048os.path 1049------- 1050 1051:mod:`os.path` functions that return a boolean result like 1052:func:`~os.path.exists`, :func:`~os.path.lexists`, :func:`~os.path.isdir`, 1053:func:`~os.path.isfile`, :func:`~os.path.islink`, and :func:`~os.path.ismount` 1054now return ``False`` instead of raising :exc:`ValueError` or its subclasses 1055:exc:`UnicodeEncodeError` and :exc:`UnicodeDecodeError` for paths that contain 1056characters or bytes unrepresentable at the OS level. 1057(Contributed by Serhiy Storchaka in :issue:`33721`.) 1058 1059:func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE` 1060environment variable and does not use :envvar:`HOME`, which is not normally set 1061for regular user accounts. 1062(Contributed by Anthony Sottile in :issue:`36264`.) 1063 1064:func:`~os.path.isdir` on Windows no longer returns ``True`` for a link to a 1065non-existent directory. 1066 1067:func:`~os.path.realpath` on Windows now resolves reparse points, including 1068symlinks and directory junctions. 1069 1070(Contributed by Steve Dower in :issue:`37834`.) 1071 1072 1073pathlib 1074------- 1075 1076:mod:`pathlib.Path` methods that return a boolean result like 1077:meth:`~pathlib.Path.exists()`, :meth:`~pathlib.Path.is_dir()`, 1078:meth:`~pathlib.Path.is_file()`, :meth:`~pathlib.Path.is_mount()`, 1079:meth:`~pathlib.Path.is_symlink()`, :meth:`~pathlib.Path.is_block_device()`, 1080:meth:`~pathlib.Path.is_char_device()`, :meth:`~pathlib.Path.is_fifo()`, 1081:meth:`~pathlib.Path.is_socket()` now return ``False`` instead of raising 1082:exc:`ValueError` or its subclass :exc:`UnicodeEncodeError` for paths that 1083contain characters unrepresentable at the OS level. 1084(Contributed by Serhiy Storchaka in :issue:`33721`.) 1085 1086Added :meth:`pathlib.Path.link_to()` which creates a hard link pointing 1087to a path. 1088(Contributed by Joannah Nanjekye in :issue:`26978`) 1089 1090 1091pickle 1092------ 1093 1094:mod:`pickle` extensions subclassing the C-optimized :class:`~pickle.Pickler` 1095can now override the pickling logic of functions and classes by defining the 1096special :meth:`~pickle.Pickler.reducer_override` method. 1097(Contributed by Pierre Glaser and Olivier Grisel in :issue:`35900`.) 1098 1099 1100plistlib 1101-------- 1102 1103Added new :class:`plistlib.UID` and enabled support for reading and writing 1104NSKeyedArchiver-encoded binary plists. 1105(Contributed by Jon Janzen in :issue:`26707`.) 1106 1107 1108pprint 1109------ 1110 1111The :mod:`pprint` module added a *sort_dicts* parameter to several functions. 1112By default, those functions continue to sort dictionaries before rendering or 1113printing. However, if *sort_dicts* is set to false, the dictionaries retain 1114the order that keys were inserted. This can be useful for comparison to JSON 1115inputs during debugging. 1116 1117In addition, there is a convenience new function, :func:`pprint.pp` that is 1118like :func:`pprint.pprint` but with *sort_dicts* defaulting to ``False``:: 1119 1120 >>> from pprint import pprint, pp 1121 >>> d = dict(source='input.txt', operation='filter', destination='output.txt') 1122 >>> pp(d, width=40) # Original order 1123 {'source': 'input.txt', 1124 'operation': 'filter', 1125 'destination': 'output.txt'} 1126 >>> pprint(d, width=40) # Keys sorted alphabetically 1127 {'destination': 'output.txt', 1128 'operation': 'filter', 1129 'source': 'input.txt'} 1130 1131(Contributed by Rémi Lapeyre in :issue:`30670`.) 1132 1133 1134py_compile 1135---------- 1136 1137:func:`py_compile.compile` now supports silent mode. 1138(Contributed by Joannah Nanjekye in :issue:`22640`.) 1139 1140 1141shlex 1142----- 1143 1144The new :func:`shlex.join` function acts as the inverse of :func:`shlex.split`. 1145(Contributed by Bo Bayles in :issue:`32102`.) 1146 1147 1148shutil 1149------ 1150 1151:func:`shutil.copytree` now accepts a new ``dirs_exist_ok`` keyword argument. 1152(Contributed by Josh Bronson in :issue:`20849`.) 1153 1154:func:`shutil.make_archive` now defaults to the modern pax (POSIX.1-2001) 1155format for new archives to improve portability and standards conformance, 1156inherited from the corresponding change to the :mod:`tarfile` module. 1157(Contributed by C.A.M. Gerlach in :issue:`30661`.) 1158 1159:func:`shutil.rmtree` on Windows now removes directory junctions without 1160recursively removing their contents first. 1161(Contributed by Steve Dower in :issue:`37834`.) 1162 1163 1164socket 1165------ 1166 1167Added :meth:`~socket.create_server()` and :meth:`~socket.has_dualstack_ipv6()` 1168convenience functions to automate the necessary tasks usually involved when 1169creating a server socket, including accepting both IPv4 and IPv6 connections 1170on the same socket. (Contributed by Giampaolo Rodolà in :issue:`17561`.) 1171 1172The :func:`socket.if_nameindex()`, :func:`socket.if_nametoindex()`, and 1173:func:`socket.if_indextoname()` functions have been implemented on Windows. 1174(Contributed by Zackery Spytz in :issue:`37007`.) 1175 1176 1177ssl 1178--- 1179 1180Added :attr:`~ssl.SSLContext.post_handshake_auth` to enable and 1181:meth:`~ssl.SSLSocket.verify_client_post_handshake` to initiate TLS 1.3 1182post-handshake authentication. 1183(Contributed by Christian Heimes in :issue:`34670`.) 1184 1185 1186statistics 1187---------- 1188 1189Added :func:`statistics.fmean` as a faster, floating point variant of 1190:func:`statistics.mean()`. (Contributed by Raymond Hettinger and 1191Steven D'Aprano in :issue:`35904`.) 1192 1193Added :func:`statistics.geometric_mean()` 1194(Contributed by Raymond Hettinger in :issue:`27181`.) 1195 1196Added :func:`statistics.multimode` that returns a list of the most 1197common values. (Contributed by Raymond Hettinger in :issue:`35892`.) 1198 1199Added :func:`statistics.quantiles` that divides data or a distribution 1200in to equiprobable intervals (e.g. quartiles, deciles, or percentiles). 1201(Contributed by Raymond Hettinger in :issue:`36546`.) 1202 1203Added :class:`statistics.NormalDist`, a tool for creating 1204and manipulating normal distributions of a random variable. 1205(Contributed by Raymond Hettinger in :issue:`36018`.) 1206 1207:: 1208 1209 >>> temperature_feb = NormalDist.from_samples([4, 12, -3, 2, 7, 14]) 1210 >>> temperature_feb.mean 1211 6.0 1212 >>> temperature_feb.stdev 1213 6.356099432828281 1214 1215 >>> temperature_feb.cdf(3) # Chance of being under 3 degrees 1216 0.3184678262814532 1217 >>> # Relative chance of being 7 degrees versus 10 degrees 1218 >>> temperature_feb.pdf(7) / temperature_feb.pdf(10) 1219 1.2039930378537762 1220 1221 >>> el_niño = NormalDist(4, 2.5) 1222 >>> temperature_feb += el_niño # Add in a climate effect 1223 >>> temperature_feb 1224 NormalDist(mu=10.0, sigma=6.830080526611674) 1225 1226 >>> temperature_feb * (9/5) + 32 # Convert to Fahrenheit 1227 NormalDist(mu=50.0, sigma=12.294144947901014) 1228 >>> temperature_feb.samples(3) # Generate random samples 1229 [7.672102882379219, 12.000027119750287, 4.647488369766392] 1230 1231 1232sys 1233--- 1234 1235Add new :func:`sys.unraisablehook` function which can be overridden to control 1236how "unraisable exceptions" are handled. It is called when an exception has 1237occurred but there is no way for Python to handle it. For example, when a 1238destructor raises an exception or during garbage collection 1239(:func:`gc.collect`). 1240(Contributed by Victor Stinner in :issue:`36829`.) 1241 1242 1243tarfile 1244------- 1245 1246The :mod:`tarfile` module now defaults to the modern pax (POSIX.1-2001) 1247format for new archives, instead of the previous GNU-specific one. 1248This improves cross-platform portability with a consistent encoding (UTF-8) 1249in a standardized and extensible format, and offers several other benefits. 1250(Contributed by C.A.M. Gerlach in :issue:`36268`.) 1251 1252 1253threading 1254--------- 1255 1256Add a new :func:`threading.excepthook` function which handles uncaught 1257:meth:`threading.Thread.run` exception. It can be overridden to control how 1258uncaught :meth:`threading.Thread.run` exceptions are handled. 1259(Contributed by Victor Stinner in :issue:`1230540`.) 1260 1261Add a new :func:`threading.get_native_id` function and 1262a :data:`~threading.Thread.native_id` 1263attribute to the :class:`threading.Thread` class. These return the native 1264integral Thread ID of the current thread assigned by the kernel. 1265This feature is only available on certain platforms, see 1266:func:`get_native_id <threading.get_native_id>` for more information. 1267(Contributed by Jake Tesler in :issue:`36084`.) 1268 1269 1270tokenize 1271-------- 1272 1273The :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token when 1274provided with input that does not have a trailing new line. This behavior 1275now matches what the C tokenizer does internally. 1276(Contributed by Ammar Askar in :issue:`33899`.) 1277 1278 1279tkinter 1280------- 1281 1282Added methods :meth:`~tkinter.Spinbox.selection_from`, 1283:meth:`~tkinter.Spinbox.selection_present`, 1284:meth:`~tkinter.Spinbox.selection_range` and 1285:meth:`~tkinter.Spinbox.selection_to` 1286in the :class:`tkinter.Spinbox` class. 1287(Contributed by Juliette Monsel in :issue:`34829`.) 1288 1289Added method :meth:`~tkinter.Canvas.moveto` 1290in the :class:`tkinter.Canvas` class. 1291(Contributed by Juliette Monsel in :issue:`23831`.) 1292 1293The :class:`tkinter.PhotoImage` class now has 1294:meth:`~tkinter.PhotoImage.transparency_get` and 1295:meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by 1296Zackery Spytz in :issue:`25451`.) 1297 1298 1299time 1300---- 1301 1302Added new clock :data:`~time.CLOCK_UPTIME_RAW` for macOS 10.12. 1303(Contributed by Joannah Nanjekye in :issue:`35702`.) 1304 1305 1306typing 1307------ 1308 1309The :mod:`typing` module incorporates several new features: 1310 1311* A dictionary type with per-key types. See :pep:`589` and 1312 :class:`typing.TypedDict`. 1313 TypedDict uses only string keys. By default, every key is required 1314 to be present. Specify "total=False" to allow keys to be optional:: 1315 1316 class Location(TypedDict, total=False): 1317 lat_long: tuple 1318 grid_square: str 1319 xy_coordinate: tuple 1320 1321* Literal types. See :pep:`586` and :class:`typing.Literal`. 1322 Literal types indicate that a parameter or return value 1323 is constrained to one or more specific literal values:: 1324 1325 def get_status(port: int) -> Literal['connected', 'disconnected']: 1326 ... 1327 1328* "Final" variables, functions, methods and classes. See :pep:`591`, 1329 :class:`typing.Final` and :func:`typing.final`. 1330 The final qualifier instructs a static type checker to restrict 1331 subclassing, overriding, or reassignment:: 1332 1333 pi: Final[float] = 3.1415926536 1334 1335* Protocol definitions. See :pep:`544`, :class:`typing.Protocol` and 1336 :func:`typing.runtime_checkable`. Simple ABCs like 1337 :class:`typing.SupportsInt` are now ``Protocol`` subclasses. 1338 1339* New protocol class :class:`typing.SupportsIndex`. 1340 1341* New functions :func:`typing.get_origin` and :func:`typing.get_args`. 1342 1343 1344unicodedata 1345----------- 1346 1347The :mod:`unicodedata` module has been upgraded to use the `Unicode 12.1.0 1348<http://blog.unicode.org/2019/05/unicode-12-1-en.html>`_ release. 1349 1350New function :func:`~unicodedata.is_normalized` can be used to verify a string 1351is in a specific normal form, often much faster than by actually normalizing 1352the string. (Contributed by Max Belanger, David Euresti, and Greg Price in 1353:issue:`32285` and :issue:`37966`). 1354 1355 1356unittest 1357-------- 1358 1359Added :class:`~unittest.mock.AsyncMock` to support an asynchronous version of 1360:class:`~unittest.mock.Mock`. Appropriate new assert functions for testing 1361have been added as well. 1362(Contributed by Lisa Roach in :issue:`26467`). 1363 1364Added :func:`~unittest.addModuleCleanup()` and 1365:meth:`~unittest.TestCase.addClassCleanup()` to unittest to support 1366cleanups for :func:`~unittest.setUpModule()` and 1367:meth:`~unittest.TestCase.setUpClass()`. 1368(Contributed by Lisa Roach in :issue:`24412`.) 1369 1370Several mock assert functions now also print a list of actual calls upon 1371failure. (Contributed by Petter Strandmark in :issue:`35047`.) 1372 1373:mod:`unittest` module gained support for coroutines to be used as test cases 1374with :class:`unittest.IsolatedAsyncioTestCase`. 1375(Contributed by Andrew Svetlov in :issue:`32972`.) 1376 1377Example:: 1378 1379 import unittest 1380 1381 1382 class TestRequest(unittest.IsolatedAsyncioTestCase): 1383 1384 async def asyncSetUp(self): 1385 self.connection = await AsyncConnection() 1386 1387 async def test_get(self): 1388 response = await self.connection.get("https://example.com") 1389 self.assertEqual(response.status_code, 200) 1390 1391 async def asyncTearDown(self): 1392 await self.connection.close() 1393 1394 1395 if __name__ == "__main__": 1396 unittest.main() 1397 1398 1399venv 1400---- 1401 1402:mod:`venv` now includes an ``Activate.ps1`` script on all platforms for 1403activating virtual environments under PowerShell Core 6.1. 1404(Contributed by Brett Cannon in :issue:`32718`.) 1405 1406 1407weakref 1408------- 1409 1410The proxy objects returned by :func:`weakref.proxy` now support the matrix 1411multiplication operators ``@`` and ``@=`` in addition to the other 1412numeric operators. (Contributed by Mark Dickinson in :issue:`36669`.) 1413 1414 1415xml 1416--- 1417 1418As mitigation against DTD and external entity retrieval, the 1419:mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process 1420external entities by default. 1421(Contributed by Christian Heimes in :issue:`17239`.) 1422 1423The ``.find*()`` methods in the :mod:`xml.etree.ElementTree` module 1424support wildcard searches like ``{*}tag`` which ignores the namespace 1425and ``{namespace}*`` which returns all tags in the given namespace. 1426(Contributed by Stefan Behnel in :issue:`28238`.) 1427 1428The :mod:`xml.etree.ElementTree` module provides a new function 1429:func:`–xml.etree.ElementTree.canonicalize()` that implements C14N 2.0. 1430(Contributed by Stefan Behnel in :issue:`13611`.) 1431 1432The target object of :class:`xml.etree.ElementTree.XMLParser` can 1433receive namespace declaration events through the new callback methods 1434``start_ns()`` and ``end_ns()``. Additionally, the 1435:class:`xml.etree.ElementTree.TreeBuilder` target can be configured 1436to process events about comments and processing instructions to include 1437them in the generated tree. 1438(Contributed by Stefan Behnel in :issue:`36676` and :issue:`36673`.) 1439 1440 1441xmlrpc 1442------ 1443 1444:class:`xmlrpc.client.ServerProxy` now supports an optional *headers* keyword 1445argument for a sequence of HTTP headers to be sent with each request. Among 1446other things, this makes it possible to upgrade from default basic 1447authentication to faster session authentication. 1448(Contributed by Cédric Krier in :issue:`35153`.) 1449 1450 1451Optimizations 1452============= 1453 1454* The :mod:`subprocess` module can now use the :func:`os.posix_spawn` function 1455 in some cases for better performance. Currently, it is only used on macOS 1456 and Linux (using glibc 2.24 or newer) if all these conditions are met: 1457 1458 * *close_fds* is false; 1459 * *preexec_fn*, *pass_fds*, *cwd* and *start_new_session* parameters 1460 are not set; 1461 * the *executable* path contains a directory. 1462 1463 (Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.) 1464 1465* :func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, 1466 :func:`shutil.copytree` and :func:`shutil.move` use platform-specific 1467 "fast-copy" syscalls on Linux and macOS in order to copy the file 1468 more efficiently. 1469 "fast-copy" means that the copying operation occurs within the kernel, 1470 avoiding the use of userspace buffers in Python as in 1471 "``outfd.write(infd.read())``". 1472 On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB 1473 instead of 16 KiB) and a :func:`memoryview`-based variant of 1474 :func:`shutil.copyfileobj` is used. 1475 The speedup for copying a 512 MiB file within the same partition is about 1476 +26% on Linux, +50% on macOS and +40% on Windows. Also, much less CPU cycles 1477 are consumed. 1478 See :ref:`shutil-platform-dependent-efficient-copy-operations` section. 1479 (Contributed by Giampaolo Rodolà in :issue:`33671`.) 1480 1481* :func:`shutil.copytree` uses :func:`os.scandir` function and all copy 1482 functions depending from it use cached :func:`os.stat` values. The speedup 1483 for copying a directory with 8000 files is around +9% on Linux, +20% on 1484 Windows and +30% on a Windows SMB share. Also the number of :func:`os.stat` 1485 syscalls is reduced by 38% making :func:`shutil.copytree` especially faster 1486 on network filesystems. (Contributed by Giampaolo Rodolà in :issue:`33695`.) 1487 1488* The default protocol in the :mod:`pickle` module is now Protocol 4, 1489 first introduced in Python 3.4. It offers better performance and smaller 1490 size compared to Protocol 3 available since Python 3.0. 1491 1492* Removed one ``Py_ssize_t`` member from ``PyGC_Head``. All GC tracked 1493 objects (e.g. tuple, list, dict) size is reduced 4 or 8 bytes. 1494 (Contributed by Inada Naoki in :issue:`33597`.) 1495 1496* :class:`uuid.UUID` now uses ``__slots__`` to reduce its memory footprint. 1497 (Contributed by Wouter Bolsterlee and Tal Einat in :issue:`30977`) 1498 1499* Improved performance of :func:`operator.itemgetter` by 33%. Optimized 1500 argument handling and added a fast path for the common case of a single 1501 non-negative integer index into a tuple (which is the typical use case in 1502 the standard library). (Contributed by Raymond Hettinger in 1503 :issue:`35664`.) 1504 1505* Sped-up field lookups in :func:`collections.namedtuple`. They are now more 1506 than two times faster, making them the fastest form of instance variable 1507 lookup in Python. (Contributed by Raymond Hettinger, Pablo Galindo, and 1508 Joe Jevnik, Serhiy Storchaka in :issue:`32492`.) 1509 1510* The :class:`list` constructor does not overallocate the internal item buffer 1511 if the input iterable has a known length (the input implements ``__len__``). 1512 This makes the created list 12% smaller on average. (Contributed by 1513 Raymond Hettinger and Pablo Galindo in :issue:`33234`.) 1514 1515* Doubled the speed of class variable writes. When a non-dunder attribute 1516 was updated, there was an unnecessary call to update slots. 1517 (Contributed by Stefan Behnel, Pablo Galindo Salgado, Raymond Hettinger, 1518 Neil Schemenauer, and Serhiy Storchaka in :issue:`36012`.) 1519 1520* Reduced an overhead of converting arguments passed to many builtin functions 1521 and methods. This sped up calling some simple builtin functions and 1522 methods up to 20--50%. (Contributed by Serhiy Storchaka in :issue:`23867`, 1523 :issue:`35582` and :issue:`36127`.) 1524 1525* ``LOAD_GLOBAL`` instruction now uses new "per opcode cache" mechanism. 1526 It is about 40% faster now. (Contributed by Yury Selivanov and Inada Naoki in 1527 :issue:`26219`.) 1528 1529 1530Build and C API Changes 1531======================= 1532 1533* Default :data:`sys.abiflags` became an empty string: the ``m`` flag for 1534 pymalloc became useless (builds with and without pymalloc are ABI compatible) 1535 and so has been removed. (Contributed by Victor Stinner in :issue:`36707`.) 1536 1537 Example of changes: 1538 1539 * Only ``python3.8`` program is installed, ``python3.8m`` program is gone. 1540 * Only ``python3.8-config`` script is installed, ``python3.8m-config`` script 1541 is gone. 1542 * The ``m`` flag has been removed from the suffix of dynamic library 1543 filenames: extension modules in the standard library as well as those 1544 produced and installed by third-party packages, like those downloaded from 1545 PyPI. On Linux, for example, the Python 3.7 suffix 1546 ``.cpython-37m-x86_64-linux-gnu.so`` became 1547 ``.cpython-38-x86_64-linux-gnu.so`` in Python 3.8. 1548 1549* The header files have been reorganized to better separate the different kinds 1550 of APIs: 1551 1552 * ``Include/*.h`` should be the portable public stable C API. 1553 * ``Include/cpython/*.h`` should be the unstable C API specific to CPython; 1554 public API, with some private API prefixed by ``_Py`` or ``_PY``. 1555 * ``Include/internal/*.h`` is the private internal C API very specific to 1556 CPython. This API comes with no backward compatibility warranty and should 1557 not be used outside CPython. It is only exposed for very specific needs 1558 like debuggers and profiles which has to access to CPython internals 1559 without calling functions. This API is now installed by ``make install``. 1560 1561 (Contributed by Victor Stinner in :issue:`35134` and :issue:`35081`, 1562 work initiated by Eric Snow in Python 3.7.) 1563 1564* Some macros have been converted to static inline functions: parameter types 1565 and return type are well defined, they don't have issues specific to macros, 1566 variables have a local scopes. Examples: 1567 1568 * :c:func:`Py_INCREF`, :c:func:`Py_DECREF` 1569 * :c:func:`Py_XINCREF`, :c:func:`Py_XDECREF` 1570 * :c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR` 1571 * Private functions: :c:func:`_PyObject_GC_TRACK`, 1572 :c:func:`_PyObject_GC_UNTRACK`, :c:func:`_Py_Dealloc` 1573 1574 (Contributed by Victor Stinner in :issue:`35059`.) 1575 1576* The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have 1577 been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were 1578 excluded from the limited API (stable ABI), and were not documented. 1579 (Contributed by Victor Stinner in :issue:`35713`.) 1580 1581* The result of :c:func:`PyExceptionClass_Name` is now of type 1582 ``const char *`` rather of ``char *``. 1583 (Contributed by Serhiy Storchaka in :issue:`33818`.) 1584 1585* The duality of ``Modules/Setup.dist`` and ``Modules/Setup`` has been 1586 removed. Previously, when updating the CPython source tree, one had 1587 to manually copy ``Modules/Setup.dist`` (inside the source tree) to 1588 ``Modules/Setup`` (inside the build tree) in order to reflect any changes 1589 upstream. This was of a small benefit to packagers at the expense of 1590 a frequent annoyance to developers following CPython development, as 1591 forgetting to copy the file could produce build failures. 1592 1593 Now the build system always reads from ``Modules/Setup`` inside the source 1594 tree. People who want to customize that file are encouraged to maintain 1595 their changes in a git fork of CPython or as patch files, as they would do 1596 for any other change to the source tree. 1597 1598 (Contributed by Antoine Pitrou in :issue:`32430`.) 1599 1600* Functions that convert Python number to C integer like 1601 :c:func:`PyLong_AsLong` and argument parsing functions like 1602 :c:func:`PyArg_ParseTuple` with integer converting format units like ``'i'`` 1603 will now use the :meth:`~object.__index__` special method instead of 1604 :meth:`~object.__int__`, if available. The deprecation warning will be 1605 emitted for objects with the ``__int__()`` method but without the 1606 ``__index__()`` method (like :class:`~decimal.Decimal` and 1607 :class:`~fractions.Fraction`). :c:func:`PyNumber_Check` will now return 1608 ``1`` for objects implementing ``__index__()``. 1609 :c:func:`PyNumber_Long`, :c:func:`PyNumber_Float` and 1610 :c:func:`PyFloat_AsDouble` also now use the ``__index__()`` method if 1611 available. 1612 (Contributed by Serhiy Storchaka in :issue:`36048` and :issue:`20092`.) 1613 1614* Heap-allocated type objects will now increase their reference count 1615 in :c:func:`PyObject_Init` (and its parallel macro ``PyObject_INIT``) 1616 instead of in :c:func:`PyType_GenericAlloc`. Types that modify instance 1617 allocation or deallocation may need to be adjusted. 1618 (Contributed by Eddie Elizondo in :issue:`35810`.) 1619 1620* The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows to create 1621 code objects like :c:func:`PyCode_New`, but with an extra *posonlyargcount* 1622 parameter for indicating the number of positional-only arguments. 1623 (Contributed by Pablo Galindo in :issue:`37221`.) 1624 1625* :c:func:`Py_SetPath` now sets :data:`sys.executable` to the program full 1626 path (:c:func:`Py_GetProgramFullPath`) rather than to the program name 1627 (:c:func:`Py_GetProgramName`). 1628 (Contributed by Victor Stinner in :issue:`38234`.) 1629 1630 1631Deprecated 1632========== 1633 1634* The distutils ``bdist_wininst`` command is now deprecated, use 1635 ``bdist_wheel`` (wheel packages) instead. 1636 (Contributed by Victor Stinner in :issue:`37481`.) 1637 1638* Deprecated methods ``getchildren()`` and ``getiterator()`` in 1639 the :mod:`~xml.etree.ElementTree` module now emit a 1640 :exc:`DeprecationWarning` instead of :exc:`PendingDeprecationWarning`. 1641 They will be removed in Python 3.9. 1642 (Contributed by Serhiy Storchaka in :issue:`29209`.) 1643 1644* Passing an object that is not an instance of 1645 :class:`concurrent.futures.ThreadPoolExecutor` to 1646 :meth:`loop.set_default_executor() <asyncio.loop.set_default_executor>` is 1647 deprecated and will be prohibited in Python 3.9. 1648 (Contributed by Elvis Pranskevichus in :issue:`34075`.) 1649 1650* The :meth:`__getitem__` methods of :class:`xml.dom.pulldom.DOMEventStream`, 1651 :class:`wsgiref.util.FileWrapper` and :class:`fileinput.FileInput` have been 1652 deprecated. 1653 1654 Implementations of these methods have been ignoring their *index* parameter, 1655 and returning the next item instead. 1656 (Contributed by Berker Peksag in :issue:`9372`.) 1657 1658* The :class:`typing.NamedTuple` class has deprecated the ``_field_types`` 1659 attribute in favor of the ``__annotations__`` attribute which has the same 1660 information. (Contributed by Raymond Hettinger in :issue:`36320`.) 1661 1662* :mod:`ast` classes ``Num``, ``Str``, ``Bytes``, ``NameConstant`` and 1663 ``Ellipsis`` are considered deprecated and will be removed in future Python 1664 versions. :class:`~ast.Constant` should be used instead. 1665 (Contributed by Serhiy Storchaka in :issue:`32892`.) 1666 1667* :class:`ast.NodeVisitor` methods ``visit_Num()``, ``visit_Str()``, 1668 ``visit_Bytes()``, ``visit_NameConstant()`` and ``visit_Ellipsis()`` are 1669 deprecated now and will not be called in future Python versions. 1670 Add the :meth:`~ast.NodeVisitor.visit_Constant` method to handle all 1671 constant nodes. 1672 (Contributed by Serhiy Storchaka in :issue:`36917`.) 1673 1674* The :func:`asyncio.coroutine` :term:`decorator` is deprecated and will be 1675 removed in version 3.10. Instead of ``@asyncio.coroutine``, use 1676 :keyword:`async def` instead. 1677 (Contributed by Andrew Svetlov in :issue:`36921`.) 1678 1679* In :mod:`asyncio`, the explicit passing of a *loop* argument has been 1680 deprecated and will be removed in version 3.10 for the following: 1681 :func:`asyncio.sleep`, :func:`asyncio.gather`, :func:`asyncio.shield`, 1682 :func:`asyncio.wait_for`, :func:`asyncio.wait`, :func:`asyncio.as_completed`, 1683 :class:`asyncio.Task`, :class:`asyncio.Lock`, :class:`asyncio.Event`, 1684 :class:`asyncio.Condition`, :class:`asyncio.Semaphore`, 1685 :class:`asyncio.BoundedSemaphore`, :class:`asyncio.Queue`, 1686 :func:`asyncio.create_subprocess_exec`, and 1687 :func:`asyncio.create_subprocess_shell`. 1688 1689* The explicit passing of coroutine objects to :func:`asyncio.wait` has been 1690 deprecated and will be removed in version 3.11. 1691 (Contributed by Yury Selivanov in :issue:`34790`.) 1692 1693* The following functions and methods are deprecated in the :mod:`gettext` 1694 module: :func:`~gettext.lgettext`, :func:`~gettext.ldgettext`, 1695 :func:`~gettext.lngettext` and :func:`~gettext.ldngettext`. 1696 They return encoded bytes, and it's possible that you will get unexpected 1697 Unicode-related exceptions if there are encoding problems with the 1698 translated strings. It's much better to use alternatives which return 1699 Unicode strings in Python 3. These functions have been broken for a long time. 1700 1701 Function :func:`~gettext.bind_textdomain_codeset`, methods 1702 :meth:`~gettext.NullTranslations.output_charset` and 1703 :meth:`~gettext.NullTranslations.set_output_charset`, and the *codeset* 1704 parameter of functions :func:`~gettext.translation` and 1705 :func:`~gettext.install` are also deprecated, since they are only used for 1706 the ``l*gettext()`` functions. 1707 (Contributed by Serhiy Storchaka in :issue:`33710`.) 1708 1709* The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` 1710 has been deprecated. 1711 (Contributed by Dong-hee Na in :issue:`35283`.) 1712 1713* Many builtin and extension functions that take integer arguments will 1714 now emit a deprecation warning for :class:`~decimal.Decimal`\ s, 1715 :class:`~fractions.Fraction`\ s and any other objects that can be converted 1716 to integers only with a loss (e.g. that have the :meth:`~object.__int__` 1717 method but do not have the :meth:`~object.__index__` method). In future 1718 version they will be errors. 1719 (Contributed by Serhiy Storchaka in :issue:`36048`.) 1720 1721* Deprecated passing the following arguments as keyword arguments: 1722 1723 - *func* in :func:`functools.partialmethod`, :func:`weakref.finalize`, 1724 :meth:`profile.Profile.runcall`, :meth:`cProfile.Profile.runcall`, 1725 :meth:`bdb.Bdb.runcall`, :meth:`trace.Trace.runfunc` and 1726 :func:`curses.wrapper`. 1727 - *function* in :meth:`unittest.TestCase.addCleanup`. 1728 - *fn* in the :meth:`~concurrent.futures.Executor.submit` method of 1729 :class:`concurrent.futures.ThreadPoolExecutor` and 1730 :class:`concurrent.futures.ProcessPoolExecutor`. 1731 - *callback* in :meth:`contextlib.ExitStack.callback`, 1732 :meth:`contextlib.AsyncExitStack.callback` and 1733 :meth:`contextlib.AsyncExitStack.push_async_callback`. 1734 - *c* and *typeid* in the :meth:`~multiprocessing.managers.Server.create` 1735 method of :class:`multiprocessing.managers.Server` and 1736 :class:`multiprocessing.managers.SharedMemoryServer`. 1737 - *obj* in :func:`weakref.finalize`. 1738 1739 In future releases of Python, they will be :ref:`positional-only 1740 <positional-only_parameter>`. 1741 (Contributed by Serhiy Storchaka in :issue:`36492`.) 1742 1743 1744API and Feature Removals 1745======================== 1746 1747The following features and APIs have been removed from Python 3.8: 1748 1749* Starting with Python 3.3, importing ABCs from :mod:`collections` was 1750 deprecated, and importing should be done from :mod:`collections.abc`. Being 1751 able to import from collections was marked for removal in 3.8, but has been 1752 delayed to 3.9. (See :issue:`36952`.) 1753 1754* The :mod:`macpath` module, deprecated in Python 3.7, has been removed. 1755 (Contributed by Victor Stinner in :issue:`35471`.) 1756 1757* The function :func:`platform.popen` has been removed, after having been 1758 deprecated since Python 3.3: use :func:`os.popen` instead. 1759 (Contributed by Victor Stinner in :issue:`35345`.) 1760 1761* The function :func:`time.clock` has been removed, after having been 1762 deprecated since Python 3.3: use :func:`time.perf_counter` or 1763 :func:`time.process_time` instead, depending 1764 on your requirements, to have well-defined behavior. 1765 (Contributed by Matthias Bussonnier in :issue:`36895`.) 1766 1767* The ``pyvenv`` script has been removed in favor of ``python3.8 -m venv`` 1768 to help eliminate confusion as to what Python interpreter the ``pyvenv`` 1769 script is tied to. (Contributed by Brett Cannon in :issue:`25427`.) 1770 1771* ``parse_qs``, ``parse_qsl``, and ``escape`` are removed from the :mod:`cgi` 1772 module. They are deprecated in Python 3.2 or older. They should be imported 1773 from the ``urllib.parse`` and ``html`` modules instead. 1774 1775* ``filemode`` function is removed from the :mod:`tarfile` module. 1776 It is not documented and deprecated since Python 3.3. 1777 1778* The :class:`~xml.etree.ElementTree.XMLParser` constructor no longer accepts 1779 the *html* argument. It never had an effect and was deprecated in Python 3.4. 1780 All other parameters are now :ref:`keyword-only <keyword-only_parameter>`. 1781 (Contributed by Serhiy Storchaka in :issue:`29209`.) 1782 1783* Removed the ``doctype()`` method of :class:`~xml.etree.ElementTree.XMLParser`. 1784 (Contributed by Serhiy Storchaka in :issue:`29209`.) 1785 1786* "unicode_internal" codec is removed. 1787 (Contributed by Inada Naoki in :issue:`36297`.) 1788 1789* The ``Cache`` and ``Statement`` objects of the :mod:`sqlite3` module are not 1790 exposed to the user. 1791 (Contributed by Aviv Palivoda in :issue:`30262`.) 1792 1793* The ``bufsize`` keyword argument of :func:`fileinput.input` and 1794 :func:`fileinput.FileInput` which was ignored and deprecated since Python 3.6 1795 has been removed. :issue:`36952` (Contributed by Matthias Bussonnier.) 1796 1797* The functions :func:`sys.set_coroutine_wrapper` and 1798 :func:`sys.get_coroutine_wrapper` deprecated in Python 3.7 have been removed; 1799 :issue:`36933` (Contributed by Matthias Bussonnier.) 1800 1801 1802Porting to Python 3.8 1803===================== 1804 1805This section lists previously described changes and other bugfixes 1806that may require changes to your code. 1807 1808 1809Changes in Python behavior 1810-------------------------- 1811 1812* Yield expressions (both ``yield`` and ``yield from`` clauses) are now disallowed 1813 in comprehensions and generator expressions (aside from the iterable expression 1814 in the leftmost :keyword:`!for` clause). 1815 (Contributed by Serhiy Storchaka in :issue:`10544`.) 1816 1817* The compiler now produces a :exc:`SyntaxWarning` when identity checks 1818 (``is`` and ``is not``) are used with certain types of literals 1819 (e.g. strings, numbers). These can often work by accident in CPython, 1820 but are not guaranteed by the language spec. The warning advises users 1821 to use equality tests (``==`` and ``!=``) instead. 1822 (Contributed by Serhiy Storchaka in :issue:`34850`.) 1823 1824* The CPython interpreter can swallow exceptions in some circumstances. 1825 In Python 3.8 this happens in fewer cases. In particular, exceptions 1826 raised when getting the attribute from the type dictionary are no longer 1827 ignored. (Contributed by Serhiy Storchaka in :issue:`35459`.) 1828 1829* Removed ``__str__`` implementations from builtin types :class:`bool`, 1830 :class:`int`, :class:`float`, :class:`complex` and few classes from 1831 the standard library. They now inherit ``__str__()`` from :class:`object`. 1832 As result, defining the ``__repr__()`` method in the subclass of these 1833 classes will affect their string representation. 1834 (Contributed by Serhiy Storchaka in :issue:`36793`.) 1835 1836* On AIX, :attr:`sys.platform` doesn't contain the major version anymore. 1837 It is always ``'aix'``, instead of ``'aix3'`` .. ``'aix7'``. Since 1838 older Python versions include the version number, so it is recommended to 1839 always use ``sys.platform.startswith('aix')``. 1840 (Contributed by M. Felt in :issue:`36588`.) 1841 1842* :c:func:`PyEval_AcquireLock` and :c:func:`PyEval_AcquireThread` now 1843 terminate the current thread if called while the interpreter is 1844 finalizing, making them consistent with :c:func:`PyEval_RestoreThread`, 1845 :c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`. If this 1846 behavior is not desired, guard the call by checking :c:func:`_Py_IsFinalizing` 1847 or :c:func:`sys.is_finalizing`. 1848 (Contributed by Joannah Nanjekye in :issue:`36475`.) 1849 1850 1851Changes in the Python API 1852------------------------- 1853 1854* The :func:`os.getcwdb` function now uses the UTF-8 encoding on Windows, 1855 rather than the ANSI code page: see :pep:`529` for the rationale. The 1856 function is no longer deprecated on Windows. 1857 (Contributed by Victor Stinner in :issue:`37412`.) 1858 1859* :class:`subprocess.Popen` can now use :func:`os.posix_spawn` in some cases 1860 for better performance. On Windows Subsystem for Linux and QEMU User 1861 Emulation, the :class:`Popen` constructor using :func:`os.posix_spawn` no longer raises an 1862 exception on errors like "missing program". Instead the child process fails with a 1863 non-zero :attr:`~Popen.returncode`. 1864 (Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.) 1865 1866* The *preexec_fn* argument of * :class:`subprocess.Popen` is no longer 1867 compatible with subinterpreters. The use of the parameter in a 1868 subinterpreter now raises :exc:`RuntimeError`. 1869 (Contributed by Eric Snow in :issue:`34651`, modified by Christian Heimes 1870 in :issue:`37951`.) 1871 1872* The :meth:`imap.IMAP4.logout` method no longer silently ignores arbitrary 1873 exceptions. 1874 (Contributed by Victor Stinner in :issue:`36348`.) 1875 1876* The function :func:`platform.popen` has been removed, after having been deprecated since 1877 Python 3.3: use :func:`os.popen` instead. 1878 (Contributed by Victor Stinner in :issue:`35345`.) 1879 1880* The :func:`statistics.mode` function no longer raises an exception 1881 when given multimodal data. Instead, it returns the first mode 1882 encountered in the input data. (Contributed by Raymond Hettinger 1883 in :issue:`35892`.) 1884 1885* The :meth:`~tkinter.ttk.Treeview.selection` method of the 1886 :class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with 1887 arguments for changing the selection was deprecated in Python 3.6. Use 1888 specialized methods like :meth:`~tkinter.ttk.Treeview.selection_set` for 1889 changing the selection. (Contributed by Serhiy Storchaka in :issue:`31508`.) 1890 1891* The :meth:`writexml`, :meth:`toxml` and :meth:`toprettyxml` methods of 1892 :mod:`xml.dom.minidom`, and the :meth:`write` method of :mod:`xml.etree`, 1893 now preserve the attribute order specified by the user. 1894 (Contributed by Diego Rojas and Raymond Hettinger in :issue:`34160`.) 1895 1896* A :mod:`dbm.dumb` database opened with flags ``'r'`` is now read-only. 1897 :func:`dbm.dumb.open` with flags ``'r'`` and ``'w'`` no longer creates 1898 a database if it does not exist. 1899 (Contributed by Serhiy Storchaka in :issue:`32749`.) 1900 1901* The ``doctype()`` method defined in a subclass of 1902 :class:`~xml.etree.ElementTree.XMLParser` will no longer be called and will 1903 emit a :exc:`RuntimeWarning` instead of a :exc:`DeprecationWarning`. 1904 Define the :meth:`doctype() <xml.etree.ElementTree.TreeBuilder.doctype>` 1905 method on a target for handling an XML doctype declaration. 1906 (Contributed by Serhiy Storchaka in :issue:`29209`.) 1907 1908* A :exc:`RuntimeError` is now raised when the custom metaclass doesn't 1909 provide the ``__classcell__`` entry in the namespace passed to 1910 ``type.__new__``. A :exc:`DeprecationWarning` was emitted in Python 1911 3.6--3.7. (Contributed by Serhiy Storchaka in :issue:`23722`.) 1912 1913* The :class:`cProfile.Profile` class can now be used as a context 1914 manager. (Contributed by Scott Sanderson in :issue:`29235`.) 1915 1916* :func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, 1917 :func:`shutil.copytree` and :func:`shutil.move` use platform-specific 1918 "fast-copy" syscalls (see 1919 :ref:`shutil-platform-dependent-efficient-copy-operations` section). 1920 1921* :func:`shutil.copyfile` default buffer size on Windows was changed from 1922 16 KiB to 1 MiB. 1923 1924* The ``PyGC_Head`` struct has changed completely. All code that touched the 1925 struct member should be rewritten. (See :issue:`33597`.) 1926 1927* The :c:type:`PyInterpreterState` struct has been moved into the "internal" 1928 header files (specifically Include/internal/pycore_pystate.h). An 1929 opaque ``PyInterpreterState`` is still available as part of the public 1930 API (and stable ABI). The docs indicate that none of the struct's 1931 fields are public, so we hope no one has been using them. However, 1932 if you do rely on one or more of those private fields and have no 1933 alternative then please open a BPO issue. We'll work on helping 1934 you adjust (possibly including adding accessor functions to the 1935 public API). (See :issue:`35886`.) 1936 1937* The :meth:`mmap.flush() <mmap.mmap.flush>` method now returns ``None`` on 1938 success and raises an exception on error under all platforms. Previously, 1939 its behavior was platform-dependent: a nonzero value was returned on success; 1940 zero was returned on error under Windows. A zero value was returned on 1941 success; an exception was raised on error under Unix. 1942 (Contributed by Berker Peksag in :issue:`2122`.) 1943 1944* :mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process 1945 external entities by default. 1946 (Contributed by Christian Heimes in :issue:`17239`.) 1947 1948* Deleting a key from a read-only :mod:`dbm` database (:mod:`dbm.dumb`, 1949 :mod:`dbm.gnu` or :mod:`dbm.ndbm`) raises :attr:`error` (:exc:`dbm.dumb.error`, 1950 :exc:`dbm.gnu.error` or :exc:`dbm.ndbm.error`) instead of :exc:`KeyError`. 1951 (Contributed by Xiang Zhang in :issue:`33106`.) 1952 1953* Simplified AST for literals. All constants will be represented as 1954 :class:`ast.Constant` instances. Instantiating old classes ``Num``, 1955 ``Str``, ``Bytes``, ``NameConstant`` and ``Ellipsis`` will return 1956 an instance of ``Constant``. 1957 (Contributed by Serhiy Storchaka in :issue:`32892`.) 1958 1959* :func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE` 1960 environment variable and does not use :envvar:`HOME`, which is not normally 1961 set for regular user accounts. 1962 (Contributed by Anthony Sottile in :issue:`36264`.) 1963 1964* The exception :class:`asyncio.CancelledError` now inherits from 1965 :class:`BaseException` rather than :class:`Exception` and no longer inherits 1966 from :class:`concurrent.futures.CancelledError`. 1967 (Contributed by Yury Selivanov in :issue:`32528`.) 1968 1969* The function :func:`asyncio.wait_for` now correctly waits for cancellation 1970 when using an instance of :class:`asyncio.Task`. Previously, upon reaching 1971 *timeout*, it was cancelled and immediately returned. 1972 (Contributed by Elvis Pranskevichus in :issue:`32751`.) 1973 1974* The function :func:`asyncio.BaseTransport.get_extra_info` now returns a safe 1975 to use socket object when 'socket' is passed to the *name* parameter. 1976 (Contributed by Yury Selivanov in :issue:`37027`.) 1977 1978* :class:`asyncio.BufferedProtocol` has graduated to the stable API. 1979 1980.. _bpo-36085-whatsnew: 1981 1982* DLL dependencies for extension modules and DLLs loaded with :mod:`ctypes` on 1983 Windows are now resolved more securely. Only the system paths, the directory 1984 containing the DLL or PYD file, and directories added with 1985 :func:`~os.add_dll_directory` are searched for load-time dependencies. 1986 Specifically, :envvar:`PATH` and the current working directory are no longer 1987 used, and modifications to these will no longer have any effect on normal DLL 1988 resolution. If your application relies on these mechanisms, you should check 1989 for :func:`~os.add_dll_directory` and if it exists, use it to add your DLLs 1990 directory while loading your library. Note that Windows 7 users will need to 1991 ensure that Windows Update KB2533623 has been installed (this is also verified 1992 by the installer). 1993 (Contributed by Steve Dower in :issue:`36085`.) 1994 1995* The header files and functions related to pgen have been removed after its 1996 replacement by a pure Python implementation. (Contributed by Pablo Galindo 1997 in :issue:`36623`.) 1998 1999* :class:`types.CodeType` has a new parameter in the second position of the 2000 constructor (*posonlyargcount*) to support positional-only arguments defined 2001 in :pep:`570`. The first argument (*argcount*) now represents the total 2002 number of positional arguments (including positional-only arguments). The new 2003 ``replace()`` method of :class:`types.CodeType` can be used to make the code 2004 future-proof. 2005 2006 2007Changes in the C API 2008-------------------- 2009 2010* The :c:type:`PyCompilerFlags` structure got a new *cf_feature_version* 2011 field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored 2012 by default, and is used if and only if ``PyCF_ONLY_AST`` flag is set in 2013 *cf_flags*. 2014 (Contributed by Guido van Rossum in :issue:`35766`.) 2015 2016* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API. 2017 It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child` 2018 instead. 2019 (Contributed by Victor Stinner in :issue:`36728`.) 2020 2021* On Unix, C extensions are no longer linked to libpython except on Android 2022 and Cygwin. When Python is embedded, ``libpython`` must not be loaded with 2023 ``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using 2024 ``RTLD_LOCAL``, it was already not possible to load C extensions which 2025 were not linked to ``libpython``, like C extensions of the standard 2026 library built by the ``*shared*`` section of ``Modules/Setup``. 2027 (Contributed by Victor Stinner in :issue:`21536`.) 2028 2029* Use of ``#`` variants of formats in parsing or building value (e.g. 2030 :c:func:`PyArg_ParseTuple`, :c:func:`Py_BuildValue`, :c:func:`PyObject_CallFunction`, 2031 etc.) without ``PY_SSIZE_T_CLEAN`` defined raises ``DeprecationWarning`` now. 2032 It will be removed in 3.10 or 4.0. Read :ref:`arg-parsing` for detail. 2033 (Contributed by Inada Naoki in :issue:`36381`.) 2034 2035* Instances of heap-allocated types (such as those created with 2036 :c:func:`PyType_FromSpec`) hold a reference to their type object. 2037 Increasing the reference count of these type objects has been moved from 2038 :c:func:`PyType_GenericAlloc` to the more low-level functions, 2039 :c:func:`PyObject_Init` and :c:func:`PyObject_INIT`. 2040 This makes types created through :c:func:`PyType_FromSpec` behave like 2041 other classes in managed code. 2042 2043 Statically allocated types are not affected. 2044 2045 For the vast majority of cases, there should be no side effect. 2046 However, types that manually increase the reference count after allocating 2047 an instance (perhaps to work around the bug) may now become immortal. 2048 To avoid this, these classes need to call Py_DECREF on the type object 2049 during instance deallocation. 2050 2051 To correctly port these types into 3.8, please apply the following 2052 changes: 2053 2054 * Remove :c:macro:`Py_INCREF` on the type object after allocating an 2055 instance - if any. 2056 This may happen after calling :c:func:`PyObject_New`, 2057 :c:func:`PyObject_NewVar`, :c:func:`PyObject_GC_New`, 2058 :c:func:`PyObject_GC_NewVar`, or any other custom allocator that uses 2059 :c:func:`PyObject_Init` or :c:func:`PyObject_INIT`. 2060 2061 Example: 2062 2063 .. code-block:: c 2064 2065 static foo_struct * 2066 foo_new(PyObject *type) { 2067 foo_struct *foo = PyObject_GC_New(foo_struct, (PyTypeObject *) type); 2068 if (foo == NULL) 2069 return NULL; 2070 #if PY_VERSION_HEX < 0x03080000 2071 // Workaround for Python issue 35810; no longer necessary in Python 3.8 2072 PY_INCREF(type) 2073 #endif 2074 return foo; 2075 } 2076 2077 * Ensure that all custom ``tp_dealloc`` functions of heap-allocated types 2078 decrease the type's reference count. 2079 2080 Example: 2081 2082 .. code-block:: c 2083 2084 static void 2085 foo_dealloc(foo_struct *instance) { 2086 PyObject *type = Py_TYPE(instance); 2087 PyObject_GC_Del(instance); 2088 #if PY_VERSION_HEX >= 0x03080000 2089 // This was not needed before Python 3.8 (Python issue 35810) 2090 Py_DECREF(type); 2091 #endif 2092 } 2093 2094 (Contributed by Eddie Elizondo in :issue:`35810`.) 2095 2096* The :c:macro:`Py_DEPRECATED()` macro has been implemented for MSVC. 2097 The macro now must be placed before the symbol name. 2098 2099 Example: 2100 2101 .. code-block:: c 2102 2103 Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void); 2104 2105 (Contributed by Zackery Spytz in :issue:`33407`.) 2106 2107* The interpreter does not pretend to support binary compatibility of 2108 extension types across feature releases, anymore. A :c:type:`PyTypeObject` 2109 exported by a third-party extension module is supposed to have all the 2110 slots expected in the current Python version, including 2111 :c:member:`~PyTypeObject.tp_finalize` (:const:`Py_TPFLAGS_HAVE_FINALIZE` 2112 is not checked anymore before reading :c:member:`~PyTypeObject.tp_finalize`). 2113 2114 (Contributed by Antoine Pitrou in :issue:`32388`.) 2115 2116* The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept 2117 two additional ``int`` arguments *end_lineno* and *end_col_offset*. 2118 2119* The :file:`libpython38.a` file to allow MinGW tools to link directly against 2120 :file:`python38.dll` is no longer included in the regular Windows distribution. 2121 If you require this file, it may be generated with the ``gendef`` and 2122 ``dlltool`` tools, which are part of the MinGW binutils package: 2123 2124 .. code-block:: shell 2125 2126 gendef - python38.dll > tmp.def 2127 dlltool --dllname python38.dll --def tmp.def --output-lib libpython38.a 2128 2129 The location of an installed :file:`pythonXY.dll` will depend on the 2130 installation options and the version and language of Windows. See 2131 :ref:`using-on-windows` for more information. The resulting library should be 2132 placed in the same directory as :file:`pythonXY.lib`, which is generally the 2133 :file:`libs` directory under your Python installation. 2134 2135 (Contributed by Steve Dower in :issue:`37351`.) 2136 2137 2138CPython bytecode changes 2139------------------------ 2140 2141* The interpreter loop has been simplified by moving the logic of unrolling 2142 the stack of blocks into the compiler. The compiler emits now explicit 2143 instructions for adjusting the stack of values and calling the 2144 cleaning-up code for :keyword:`break`, :keyword:`continue` and 2145 :keyword:`return`. 2146 2147 Removed opcodes :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`, 2148 :opcode:`SETUP_LOOP` and :opcode:`SETUP_EXCEPT`. Added new opcodes 2149 :opcode:`ROT_FOUR`, :opcode:`BEGIN_FINALLY`, :opcode:`CALL_FINALLY` and 2150 :opcode:`POP_FINALLY`. Changed the behavior of :opcode:`END_FINALLY` 2151 and :opcode:`WITH_CLEANUP_START`. 2152 2153 (Contributed by Mark Shannon, Antoine Pitrou and Serhiy Storchaka in 2154 :issue:`17611`.) 2155 2156* Added new opcode :opcode:`END_ASYNC_FOR` for handling exceptions raised 2157 when awaiting a next item in an :keyword:`async for` loop. 2158 (Contributed by Serhiy Storchaka in :issue:`33041`.) 2159 2160* The :opcode:`MAP_ADD` now expects the value as the first element in the 2161 stack and the key as the second element. This change was made so the key 2162 is always evaluated before the value in dictionary comprehensions, as 2163 proposed by :pep:`572`. (Contributed by Jörn Heissler in :issue:`35224`.) 2164 2165 2166Demos and Tools 2167--------------- 2168 2169Added a benchmark script for timing various ways to access variables: 2170``Tools/scripts/var_access_benchmark.py``. 2171(Contributed by Raymond Hettinger in :issue:`35884`.) 2172 2173Here's a summary of performance improvements since Python 3.3: 2174 2175.. code-block:: none 2176 2177 Python version 3.3 3.4 3.5 3.6 3.7 3.8 2178 -------------- --- --- --- --- --- --- 2179 2180 Variable and attribute read access: 2181 read_local 4.0 7.1 7.1 5.4 5.1 3.9 2182 read_nonlocal 5.3 7.1 8.1 5.8 5.4 4.4 2183 read_global 13.3 15.5 19.0 14.3 13.6 7.6 2184 read_builtin 20.0 21.1 21.6 18.5 19.0 7.5 2185 read_classvar_from_class 20.5 25.6 26.5 20.7 19.5 18.4 2186 read_classvar_from_instance 18.5 22.8 23.5 18.8 17.1 16.4 2187 read_instancevar 26.8 32.4 33.1 28.0 26.3 25.4 2188 read_instancevar_slots 23.7 27.8 31.3 20.8 20.8 20.2 2189 read_namedtuple 68.5 73.8 57.5 45.0 46.8 18.4 2190 read_boundmethod 29.8 37.6 37.9 29.6 26.9 27.7 2191 2192 Variable and attribute write access: 2193 write_local 4.6 8.7 9.3 5.5 5.3 4.3 2194 write_nonlocal 7.3 10.5 11.1 5.6 5.5 4.7 2195 write_global 15.9 19.7 21.2 18.0 18.0 15.8 2196 write_classvar 81.9 92.9 96.0 104.6 102.1 39.2 2197 write_instancevar 36.4 44.6 45.8 40.0 38.9 35.5 2198 write_instancevar_slots 28.7 35.6 36.1 27.3 26.6 25.7 2199 2200 Data structure read access: 2201 read_list 19.2 24.2 24.5 20.8 20.8 19.0 2202 read_deque 19.9 24.7 25.5 20.2 20.6 19.8 2203 read_dict 19.7 24.3 25.7 22.3 23.0 21.0 2204 read_strdict 17.9 22.6 24.3 19.5 21.2 18.9 2205 2206 Data structure write access: 2207 write_list 21.2 27.1 28.5 22.5 21.6 20.0 2208 write_deque 23.8 28.7 30.1 22.7 21.8 23.5 2209 write_dict 25.9 31.4 33.3 29.3 29.2 24.7 2210 write_strdict 22.9 28.4 29.9 27.5 25.2 23.1 2211 2212 Stack (or queue) operations: 2213 list_append_pop 144.2 93.4 112.7 75.4 74.2 50.8 2214 deque_append_pop 30.4 43.5 57.0 49.4 49.2 42.5 2215 deque_append_popleft 30.8 43.7 57.3 49.7 49.7 42.8 2216 2217 Timing loop: 2218 loop_overhead 0.3 0.5 0.6 0.4 0.3 0.3 2219 2220The benchmarks were measured on an 2221`Intel® Core™ i7-4960HQ processor 2222<https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html>`_ 2223running the macOS 64-bit builds found at 2224`python.org <https://www.python.org/downloads/mac-osx/>`_. 2225The benchmark script displays timings in nanoseconds. 2226 2227 2228Notable changes in Python 3.8.1 2229=============================== 2230 2231Due to significant security concerns, the *reuse_address* parameter of 2232:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is 2233because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For more 2234details, see the documentation for ``loop.create_datagram_endpoint()``. 2235(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in 2236:issue:`37228`.) 2237 2238Notable changes in Python 3.8.8 2239=============================== 2240 2241Earlier Python versions allowed using both ``;`` and ``&`` as 2242query parameter separators in :func:`urllib.parse.parse_qs` and 2243:func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with 2244newer W3C recommendations, this has been changed to allow only a single 2245separator key, with ``&`` as the default. This change also affects 2246:func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected 2247functions internally. For more details, please see their respective 2248documentation. 2249(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) 2250 2251Notable changes in Python 3.8.12 2252================================ 2253 2254Starting with Python 3.8.12 the :mod:`ipaddress` module no longer accepts 2255any leading zeros in IPv4 address strings. Leading zeros are ambiguous and 2256interpreted as octal notation by some libraries. For example the legacy 2257function :func:`socket.inet_aton` treats leading zeros as octal notation. 2258glibc implementation of modern :func:`~socket.inet_pton` does not accept 2259any leading zeros. 2260 2261(Originally contributed by Christian Heimes in :issue:`36384`, and backported 2262to 3.8 by Achraf Merzouki.) 2263