mirror of
				https://github.com/bunny-lab-io/Borealis.git
				synced 2025-10-27 07:21:58 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			2695 lines
		
	
	
		
			311 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2695 lines
		
	
	
		
			311 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | ||
| 
 | ||
| <html lang="en" data-content_root="../">
 | ||
|   <head>
 | ||
|     <meta charset="utf-8" />
 | ||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
 | ||
| <meta property="og:title" content="What’s New In Python 3.7" />
 | ||
| <meta property="og:type" content="website" />
 | ||
| <meta property="og:url" content="https://docs.python.org/3/whatsnew/3.7.html" />
 | ||
| <meta property="og:site_name" content="Python documentation" />
 | ||
| <meta property="og:description" content="Editor, Elvis Pranskevichus < elvis@magic.io>,. This article explains the new features in Python 3.7, compared to 3.6. Python 3.7 was released on June 27, 2018. For full details, see the changelog...." />
 | ||
| <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
 | ||
| <meta property="og:image:alt" content="Python documentation" />
 | ||
| <meta name="description" content="Editor, Elvis Pranskevichus < elvis@magic.io>,. This article explains the new features in Python 3.7, compared to 3.6. Python 3.7 was released on June 27, 2018. For full details, see the changelog...." />
 | ||
| <meta property="og:image:width" content="200">
 | ||
| <meta property="og:image:height" content="200">
 | ||
| <meta name="theme-color" content="#3776ab">
 | ||
| 
 | ||
|     <title>What’s New In Python 3.7 — Python 3.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
 | ||
|     
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
 | ||
|     <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
 | ||
|     
 | ||
|     <script src="../_static/documentation_options.js?v=5d57ca2d"></script>
 | ||
|     <script src="../_static/doctools.js?v=9bcbadda"></script>
 | ||
|     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
 | ||
|     
 | ||
|     <script src="../_static/sidebar.js"></script>
 | ||
|     
 | ||
|     <link rel="search" type="application/opensearchdescription+xml"
 | ||
|           title="Search within Python 3.13.3 documentation"
 | ||
|           href="../_static/opensearch.xml"/>
 | ||
|     <link rel="author" title="About these documents" href="../about.html" />
 | ||
|     <link rel="index" title="Index" href="../genindex.html" />
 | ||
|     <link rel="search" title="Search" href="../search.html" />
 | ||
|     <link rel="copyright" title="Copyright" href="../copyright.html" />
 | ||
|     <link rel="next" title="What’s New In Python 3.6" href="3.6.html" />
 | ||
|     <link rel="prev" title="What’s New In Python 3.8" href="3.8.html" />
 | ||
|     
 | ||
|     <link rel="canonical" href="https://docs.python.org/3/whatsnew/3.7.html">
 | ||
|     
 | ||
|       
 | ||
|     
 | ||
| 
 | ||
|     
 | ||
|     <style>
 | ||
|       @media only screen {
 | ||
|         table.full-width-table {
 | ||
|             width: 100%;
 | ||
|         }
 | ||
|       }
 | ||
|     </style>
 | ||
| <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
 | ||
|     <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
 | ||
|             <script type="text/javascript" src="../_static/copybutton.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/menu.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/search-focus.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/themetoggle.js"></script> 
 | ||
|             <script type="text/javascript" src="../_static/rtd_switcher.js"></script>
 | ||
|             <meta name="readthedocs-addons-api-version" content="1">
 | ||
| 
 | ||
|   </head>
 | ||
| <body>
 | ||
| <div class="mobile-nav">
 | ||
|     <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
 | ||
|            aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
 | ||
|     <nav class="nav-content" role="navigation">
 | ||
|         <label for="menuToggler" class="toggler__label">
 | ||
|             <span></span>
 | ||
|         </label>
 | ||
|         <span class="nav-items-wrapper">
 | ||
|             <a href="https://www.python.org/" class="nav-logo">
 | ||
|                 <img src="../_static/py.svg" alt="Python logo"/>
 | ||
|             </a>
 | ||
|             <span class="version_switcher_placeholder"></span>
 | ||
|             <form role="search" class="search" action="../search.html" method="get">
 | ||
|                 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
 | ||
|                     <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
 | ||
|                 </svg>
 | ||
|                 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
 | ||
|                 <input type="submit" value="Go"/>
 | ||
|             </form>
 | ||
|         </span>
 | ||
|     </nav>
 | ||
|     <div class="menu-wrapper">
 | ||
|         <nav class="menu" role="navigation" aria-label="main navigation">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label>
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#">What’s New In Python 3.7</a><ul>
 | ||
| <li><a class="reference internal" href="#summary-release-highlights">Summary – Release Highlights</a></li>
 | ||
| <li><a class="reference internal" href="#new-features">New Features</a><ul>
 | ||
| <li><a class="reference internal" href="#pep-563-postponed-evaluation-of-annotations">PEP 563: Postponed Evaluation of Annotations</a></li>
 | ||
| <li><a class="reference internal" href="#pep-538-legacy-c-locale-coercion">PEP 538: Legacy C Locale Coercion</a></li>
 | ||
| <li><a class="reference internal" href="#pep-540-forced-utf-8-runtime-mode">PEP 540: Forced UTF-8 Runtime Mode</a></li>
 | ||
| <li><a class="reference internal" href="#pep-553-built-in-breakpoint">PEP 553: Built-in <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code></a></li>
 | ||
| <li><a class="reference internal" href="#pep-539-new-c-api-for-thread-local-storage">PEP 539: New C API for Thread-Local Storage</a></li>
 | ||
| <li><a class="reference internal" href="#pep-562-customization-of-access-to-module-attributes">PEP 562: Customization of Access to Module Attributes</a></li>
 | ||
| <li><a class="reference internal" href="#pep-564-new-time-functions-with-nanosecond-resolution">PEP 564: New Time Functions With Nanosecond Resolution</a></li>
 | ||
| <li><a class="reference internal" href="#pep-565-show-deprecationwarning-in-main">PEP 565: Show DeprecationWarning in <code class="docutils literal notranslate"><span class="pre">__main__</span></code></a></li>
 | ||
| <li><a class="reference internal" href="#pep-560-core-support-for-typing-module-and-generic-types">PEP 560: Core Support for <code class="docutils literal notranslate"><span class="pre">typing</span></code> module and Generic Types</a></li>
 | ||
| <li><a class="reference internal" href="#pep-552-hash-based-pyc-files">PEP 552: Hash-based .pyc Files</a></li>
 | ||
| <li><a class="reference internal" href="#pep-545-python-documentation-translations">PEP 545: Python Documentation Translations</a></li>
 | ||
| <li><a class="reference internal" href="#python-development-mode-x-dev">Python Development Mode (-X dev)</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#other-language-changes">Other Language Changes</a></li>
 | ||
| <li><a class="reference internal" href="#new-modules">New Modules</a><ul>
 | ||
| <li><a class="reference internal" href="#contextvars">contextvars</a></li>
 | ||
| <li><a class="reference internal" href="#dataclasses">dataclasses</a></li>
 | ||
| <li><a class="reference internal" href="#importlib-resources">importlib.resources</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#improved-modules">Improved Modules</a><ul>
 | ||
| <li><a class="reference internal" href="#argparse">argparse</a></li>
 | ||
| <li><a class="reference internal" href="#asyncio">asyncio</a></li>
 | ||
| <li><a class="reference internal" href="#binascii">binascii</a></li>
 | ||
| <li><a class="reference internal" href="#calendar">calendar</a></li>
 | ||
| <li><a class="reference internal" href="#collections">collections</a></li>
 | ||
| <li><a class="reference internal" href="#compileall">compileall</a></li>
 | ||
| <li><a class="reference internal" href="#concurrent-futures">concurrent.futures</a></li>
 | ||
| <li><a class="reference internal" href="#contextlib">contextlib</a></li>
 | ||
| <li><a class="reference internal" href="#cprofile">cProfile</a></li>
 | ||
| <li><a class="reference internal" href="#crypt">crypt</a></li>
 | ||
| <li><a class="reference internal" href="#datetime">datetime</a></li>
 | ||
| <li><a class="reference internal" href="#dbm">dbm</a></li>
 | ||
| <li><a class="reference internal" href="#decimal">decimal</a></li>
 | ||
| <li><a class="reference internal" href="#dis">dis</a></li>
 | ||
| <li><a class="reference internal" href="#distutils">distutils</a></li>
 | ||
| <li><a class="reference internal" href="#enum">enum</a></li>
 | ||
| <li><a class="reference internal" href="#functools">functools</a></li>
 | ||
| <li><a class="reference internal" href="#gc">gc</a></li>
 | ||
| <li><a class="reference internal" href="#hmac">hmac</a></li>
 | ||
| <li><a class="reference internal" href="#http-client">http.client</a></li>
 | ||
| <li><a class="reference internal" href="#http-server">http.server</a></li>
 | ||
| <li><a class="reference internal" href="#idlelib-and-idle">idlelib and IDLE</a></li>
 | ||
| <li><a class="reference internal" href="#importlib">importlib</a></li>
 | ||
| <li><a class="reference internal" href="#io">io</a></li>
 | ||
| <li><a class="reference internal" href="#ipaddress">ipaddress</a></li>
 | ||
| <li><a class="reference internal" href="#itertools">itertools</a></li>
 | ||
| <li><a class="reference internal" href="#locale">locale</a></li>
 | ||
| <li><a class="reference internal" href="#logging">logging</a></li>
 | ||
| <li><a class="reference internal" href="#math">math</a></li>
 | ||
| <li><a class="reference internal" href="#mimetypes">mimetypes</a></li>
 | ||
| <li><a class="reference internal" href="#msilib">msilib</a></li>
 | ||
| <li><a class="reference internal" href="#multiprocessing">multiprocessing</a></li>
 | ||
| <li><a class="reference internal" href="#os">os</a></li>
 | ||
| <li><a class="reference internal" href="#pathlib">pathlib</a></li>
 | ||
| <li><a class="reference internal" href="#pdb">pdb</a></li>
 | ||
| <li><a class="reference internal" href="#py-compile">py_compile</a></li>
 | ||
| <li><a class="reference internal" href="#pydoc">pydoc</a></li>
 | ||
| <li><a class="reference internal" href="#queue">queue</a></li>
 | ||
| <li><a class="reference internal" href="#re">re</a></li>
 | ||
| <li><a class="reference internal" href="#signal">signal</a></li>
 | ||
| <li><a class="reference internal" href="#socket">socket</a></li>
 | ||
| <li><a class="reference internal" href="#socketserver">socketserver</a></li>
 | ||
| <li><a class="reference internal" href="#sqlite3">sqlite3</a></li>
 | ||
| <li><a class="reference internal" href="#ssl">ssl</a></li>
 | ||
| <li><a class="reference internal" href="#string">string</a></li>
 | ||
| <li><a class="reference internal" href="#subprocess">subprocess</a></li>
 | ||
| <li><a class="reference internal" href="#sys">sys</a></li>
 | ||
| <li><a class="reference internal" href="#time">time</a></li>
 | ||
| <li><a class="reference internal" href="#tkinter">tkinter</a></li>
 | ||
| <li><a class="reference internal" href="#tracemalloc">tracemalloc</a></li>
 | ||
| <li><a class="reference internal" href="#types">types</a></li>
 | ||
| <li><a class="reference internal" href="#unicodedata">unicodedata</a></li>
 | ||
| <li><a class="reference internal" href="#unittest">unittest</a></li>
 | ||
| <li><a class="reference internal" href="#unittest-mock">unittest.mock</a></li>
 | ||
| <li><a class="reference internal" href="#urllib-parse">urllib.parse</a></li>
 | ||
| <li><a class="reference internal" href="#uu">uu</a></li>
 | ||
| <li><a class="reference internal" href="#uuid">uuid</a></li>
 | ||
| <li><a class="reference internal" href="#warnings">warnings</a></li>
 | ||
| <li><a class="reference internal" href="#xml">xml</a></li>
 | ||
| <li><a class="reference internal" href="#xml-etree">xml.etree</a></li>
 | ||
| <li><a class="reference internal" href="#xmlrpc-server">xmlrpc.server</a></li>
 | ||
| <li><a class="reference internal" href="#zipapp">zipapp</a></li>
 | ||
| <li><a class="reference internal" href="#zipfile">zipfile</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#c-api-changes">C API Changes</a></li>
 | ||
| <li><a class="reference internal" href="#build-changes">Build Changes</a></li>
 | ||
| <li><a class="reference internal" href="#optimizations">Optimizations</a></li>
 | ||
| <li><a class="reference internal" href="#other-cpython-implementation-changes">Other CPython Implementation Changes</a></li>
 | ||
| <li><a class="reference internal" href="#deprecated-python-behavior">Deprecated Python Behavior</a></li>
 | ||
| <li><a class="reference internal" href="#deprecated-python-modules-functions-and-methods">Deprecated Python modules, functions and methods</a><ul>
 | ||
| <li><a class="reference internal" href="#aifc">aifc</a></li>
 | ||
| <li><a class="reference internal" href="#whatsnew37-asyncio-deprecated">asyncio</a></li>
 | ||
| <li><a class="reference internal" href="#id3">collections</a></li>
 | ||
| <li><a class="reference internal" href="#id4">dbm</a></li>
 | ||
| <li><a class="reference internal" href="#id5">enum</a></li>
 | ||
| <li><a class="reference internal" href="#gettext">gettext</a></li>
 | ||
| <li><a class="reference internal" href="#id6">importlib</a></li>
 | ||
| <li><a class="reference internal" href="#id7">locale</a></li>
 | ||
| <li><a class="reference internal" href="#macpath">macpath</a></li>
 | ||
| <li><a class="reference internal" href="#threading">threading</a></li>
 | ||
| <li><a class="reference internal" href="#id8">socket</a></li>
 | ||
| <li><a class="reference internal" href="#id9">ssl</a></li>
 | ||
| <li><a class="reference internal" href="#sunau">sunau</a></li>
 | ||
| <li><a class="reference internal" href="#id10">sys</a></li>
 | ||
| <li><a class="reference internal" href="#wave">wave</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#deprecated-functions-and-types-of-the-c-api">Deprecated functions and types of the C API</a></li>
 | ||
| <li><a class="reference internal" href="#platform-support-removals">Platform Support Removals</a></li>
 | ||
| <li><a class="reference internal" href="#api-and-feature-removals">API and Feature Removals</a></li>
 | ||
| <li><a class="reference internal" href="#module-removals">Module Removals</a></li>
 | ||
| <li><a class="reference internal" href="#windows-only-changes">Windows-only Changes</a></li>
 | ||
| <li><a class="reference internal" href="#porting-to-python-3-7">Porting to Python 3.7</a><ul>
 | ||
| <li><a class="reference internal" href="#changes-in-python-behavior">Changes in Python Behavior</a></li>
 | ||
| <li><a class="reference internal" href="#changes-in-the-python-api">Changes in the Python API</a></li>
 | ||
| <li><a class="reference internal" href="#changes-in-the-c-api">Changes in the C API</a></li>
 | ||
| <li><a class="reference internal" href="#cpython-bytecode-changes">CPython bytecode changes</a></li>
 | ||
| <li><a class="reference internal" href="#id12">Windows-only Changes</a></li>
 | ||
| <li><a class="reference internal" href="#id13">Other CPython implementation changes</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-1">Notable changes in Python 3.7.1</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-2">Notable changes in Python 3.7.2</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-6">Notable changes in Python 3.7.6</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-10">Notable changes in Python 3.7.10</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-11">Notable changes in Python 3.7.11</a></li>
 | ||
| <li><a class="reference internal" href="#notable-security-feature-in-3-7-14">Notable security feature in 3.7.14</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="3.8.html"
 | ||
|                           title="previous chapter">What’s New In Python 3.8</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="3.6.html"
 | ||
|                           title="next chapter">What’s New In Python 3.6</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/whatsnew/3.7.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </nav>
 | ||
|     </div>
 | ||
| </div>
 | ||
| 
 | ||
|   
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              accesskey="I">index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="3.6.html" title="What’s New In Python 3.6"
 | ||
|              accesskey="N">next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="3.8.html" title="What’s New In Python 3.8"
 | ||
|              accesskey="P">previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">What’s New in Python</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href="">What’s New In Python 3.7</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>    
 | ||
| 
 | ||
|     <div class="document">
 | ||
|       <div class="documentwrapper">
 | ||
|         <div class="bodywrapper">
 | ||
|           <div class="body" role="main">
 | ||
|             
 | ||
|   <section id="what-s-new-in-python-3-7">
 | ||
| <h1>What’s New In Python 3.7<a class="headerlink" href="#what-s-new-in-python-3-7" title="Link to this heading">¶</a></h1>
 | ||
| <dl class="field-list simple">
 | ||
| <dt class="field-odd">Editor<span class="colon">:</span></dt>
 | ||
| <dd class="field-odd"><p>Elvis Pranskevichus <<a class="reference external" href="mailto:elvis%40magic.io">elvis<span>@</span>magic<span>.</span>io</a>></p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| <p>This article explains the new features in Python 3.7, compared to 3.6.
 | ||
| Python 3.7 was released on June 27, 2018.
 | ||
| For full details, see the <a class="reference internal" href="changelog.html#changelog"><span class="std std-ref">changelog</span></a>.</p>
 | ||
| <section id="summary-release-highlights">
 | ||
| <h2>Summary – Release Highlights<a class="headerlink" href="#summary-release-highlights" title="Link to this heading">¶</a></h2>
 | ||
| <p>New syntax features:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep563"><span class="std std-ref">PEP 563</span></a>, postponed evaluation of type annotations.</p></li>
 | ||
| </ul>
 | ||
| <p>Backwards incompatible syntax changes:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../reference/compound_stmts.html#async"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span></code></a> and <a class="reference internal" href="../reference/expressions.html#await"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">await</span></code></a> are now reserved keywords.</p></li>
 | ||
| </ul>
 | ||
| <p>New library modules:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../library/contextvars.html#module-contextvars" title="contextvars: Context Variables"><code class="xref py py-mod docutils literal notranslate"><span class="pre">contextvars</span></code></a>: <a class="reference internal" href="#whatsnew37-pep567"><span class="std std-ref">PEP 567 – Context Variables</span></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/dataclasses.html#module-dataclasses" title="dataclasses: Generate special methods on user-defined classes."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dataclasses</span></code></a>: <a class="reference internal" href="#whatsnew37-pep557"><span class="std std-ref">PEP 557 – Data Classes</span></a></p></li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-importlib-resources"><span class="std std-ref">importlib.resources</span></a></p></li>
 | ||
| </ul>
 | ||
| <p>New built-in features:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep553"><span class="std std-ref">PEP 553</span></a>, the new <a class="reference internal" href="../library/functions.html#breakpoint" title="breakpoint"><code class="xref py py-func docutils literal notranslate"><span class="pre">breakpoint()</span></code></a> function.</p></li>
 | ||
| </ul>
 | ||
| <p>Python data model improvements:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep562"><span class="std std-ref">PEP 562</span></a>, customization of access to
 | ||
| module attributes.</p></li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep560"><span class="std std-ref">PEP 560</span></a>, core support for typing module and
 | ||
| generic types.</p></li>
 | ||
| <li><p>the insertion-order preservation nature of <a class="reference internal" href="../library/stdtypes.html#typesmapping"><span class="std std-ref">dict</span></a>
 | ||
| objects <a class="reference external" href="https://mail.python.org/pipermail/python-dev/2017-December/151283.html">has been declared</a> to be an official
 | ||
| part of the Python language spec.</p></li>
 | ||
| </ul>
 | ||
| <p>Significant improvements in the standard library:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>The <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> module has received new features, significant
 | ||
| <a class="reference internal" href="#whatsnew37-asyncio"><span class="std std-ref">usability and performance improvements</span></a>.</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">time</span></code></a> module gained support for
 | ||
| <a class="reference internal" href="#whatsnew37-pep564"><span class="std std-ref">functions with nanosecond resolution</span></a>.</p></li>
 | ||
| </ul>
 | ||
| <p>CPython implementation improvements:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>Avoiding the use of ASCII as a default text encoding:</p>
 | ||
| <ul>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep538"><span class="std std-ref">PEP 538</span></a>, legacy C locale coercion</p></li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep540"><span class="std std-ref">PEP 540</span></a>, forced UTF-8 runtime mode</p></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep552"><span class="std std-ref">PEP 552</span></a>, deterministic .pycs</p></li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-devmode"><span class="std std-ref">New Python Development Mode</span></a></p></li>
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep565"><span class="std std-ref">PEP 565</span></a>, improved <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a>
 | ||
| handling</p></li>
 | ||
| </ul>
 | ||
| <p>C API improvements:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep539"><span class="std std-ref">PEP 539</span></a>, new C API for thread-local storage</p></li>
 | ||
| </ul>
 | ||
| <p>Documentation improvements:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="#whatsnew37-pep545"><span class="std std-ref">PEP 545</span></a>, Python documentation translations</p></li>
 | ||
| <li><p>New documentation translations: <a class="reference external" href="https://docs.python.org/ja/">Japanese</a>,
 | ||
| <a class="reference external" href="https://docs.python.org/fr/">French</a>, and
 | ||
| <a class="reference external" href="https://docs.python.org/ko/">Korean</a>.</p></li>
 | ||
| </ul>
 | ||
| <p>This release features notable performance improvements in many areas.
 | ||
| The <a class="reference internal" href="#whatsnew37-perf"><span class="std std-ref">Optimizations</span></a> section lists them in detail.</p>
 | ||
| <p>For a list of changes that may affect compatibility with previous Python
 | ||
| releases please refer to the <a class="reference internal" href="#porting-to-python-37"><span class="std std-ref">Porting to Python 3.7</span></a> section.</p>
 | ||
| </section>
 | ||
| <section id="new-features">
 | ||
| <h2>New Features<a class="headerlink" href="#new-features" title="Link to this heading">¶</a></h2>
 | ||
| <section id="pep-563-postponed-evaluation-of-annotations">
 | ||
| <span id="whatsnew37-pep563"></span><h3>PEP 563: Postponed Evaluation of Annotations<a class="headerlink" href="#pep-563-postponed-evaluation-of-annotations" title="Link to this heading">¶</a></h3>
 | ||
| <p>The advent of type hints in Python uncovered two glaring usability issues
 | ||
| with the functionality of annotations added in <span class="target" id="index-0"></span><a class="pep reference external" href="https://peps.python.org/pep-3107/"><strong>PEP 3107</strong></a> and refined
 | ||
| further in <span class="target" id="index-1"></span><a class="pep reference external" href="https://peps.python.org/pep-0526/"><strong>PEP 526</strong></a>:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>annotations could only use names which were already available in the
 | ||
| current scope, in other words they didn’t support forward references
 | ||
| of any kind; and</p></li>
 | ||
| <li><p>annotating source code had adverse effects on startup time of Python
 | ||
| programs.</p></li>
 | ||
| </ul>
 | ||
| <p>Both of these issues are fixed by postponing the evaluation of
 | ||
| annotations.  Instead of compiling code which executes expressions in
 | ||
| annotations at their definition time, the compiler stores the annotation
 | ||
| in a string form equivalent to the AST of the expression in question.
 | ||
| If needed, annotations can be resolved at runtime using
 | ||
| <a class="reference internal" href="../library/typing.html#typing.get_type_hints" title="typing.get_type_hints"><code class="xref py py-func docutils literal notranslate"><span class="pre">typing.get_type_hints()</span></code></a>.  In the common case where this is not
 | ||
| required, the annotations are cheaper to store (since short strings
 | ||
| are interned by the interpreter) and make startup time faster.</p>
 | ||
| <p>Usability-wise, annotations now support forward references, making the
 | ||
| following syntax valid:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">C</span><span class="p">:</span>
 | ||
|     <span class="nd">@classmethod</span>
 | ||
|     <span class="k">def</span><span class="w"> </span><span class="nf">from_string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">source</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">C</span><span class="p">:</span>
 | ||
|         <span class="o">...</span>
 | ||
| 
 | ||
|     <span class="k">def</span><span class="w"> </span><span class="nf">validate_b</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">:</span> <span class="n">B</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | ||
|         <span class="o">...</span>
 | ||
| 
 | ||
| <span class="k">class</span><span class="w"> </span><span class="nc">B</span><span class="p">:</span>
 | ||
|     <span class="o">...</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Since this change breaks compatibility, the new behavior needs to be enabled
 | ||
| on a per-module basis in Python 3.7 using a <a class="reference internal" href="../library/__future__.html#module-__future__" title="__future__: Future statement definitions"><code class="xref py py-mod docutils literal notranslate"><span class="pre">__future__</span></code></a> import:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">__future__</span><span class="w"> </span><span class="kn">import</span> <span class="n">annotations</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>It will become the default in Python 3.10.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-2"></span><a class="pep reference external" href="https://peps.python.org/pep-0563/"><strong>PEP 563</strong></a> – Postponed evaluation of annotations</dt><dd><p>PEP written and implemented by Łukasz Langa.</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-538-legacy-c-locale-coercion">
 | ||
| <span id="whatsnew37-pep538"></span><h3>PEP 538: Legacy C Locale Coercion<a class="headerlink" href="#pep-538-legacy-c-locale-coercion" title="Link to this heading">¶</a></h3>
 | ||
| <p>An ongoing challenge within the Python 3 series has been determining a sensible
 | ||
| default strategy for handling the “7-bit ASCII” text encoding assumption
 | ||
| currently implied by the use of the default C or POSIX locale on non-Windows
 | ||
| platforms.</p>
 | ||
| <p><span class="target" id="index-3"></span><a class="pep reference external" href="https://peps.python.org/pep-0538/"><strong>PEP 538</strong></a> updates the default interpreter command line interface to
 | ||
| automatically coerce that locale to an available UTF-8 based locale as
 | ||
| described in the documentation of the new <span class="target" id="index-4"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONCOERCECLOCALE"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONCOERCECLOCALE</span></code></a>
 | ||
| environment variable. Automatically setting <code class="docutils literal notranslate"><span class="pre">LC_CTYPE</span></code> this way means that
 | ||
| both the core interpreter and locale-aware C extensions (such as
 | ||
| <a class="reference internal" href="../library/readline.html#module-readline" title="readline: GNU readline support for Python. (Unix)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">readline</span></code></a>) will assume the use of UTF-8 as the default text encoding,
 | ||
| rather than ASCII.</p>
 | ||
| <p>The platform support definition in <span class="target" id="index-5"></span><a class="pep reference external" href="https://peps.python.org/pep-0011/"><strong>PEP 11</strong></a> has also been updated to limit
 | ||
| full text handling support to suitably configured non-ASCII based locales.</p>
 | ||
| <p>As part of this change, the default error handler for <a class="reference internal" href="../library/sys.html#sys.stdin" title="sys.stdin"><code class="xref py py-data docutils literal notranslate"><span class="pre">stdin</span></code></a> and
 | ||
| <a class="reference internal" href="../library/sys.html#sys.stdout" title="sys.stdout"><code class="xref py py-data docutils literal notranslate"><span class="pre">stdout</span></code></a> is now <code class="docutils literal notranslate"><span class="pre">surrogateescape</span></code> (rather than <code class="docutils literal notranslate"><span class="pre">strict</span></code>) when
 | ||
| using any of the defined coercion target locales (currently <code class="docutils literal notranslate"><span class="pre">C.UTF-8</span></code>,
 | ||
| <code class="docutils literal notranslate"><span class="pre">C.utf8</span></code>, and <code class="docutils literal notranslate"><span class="pre">UTF-8</span></code>).  The default error handler for <a class="reference internal" href="../library/sys.html#sys.stderr" title="sys.stderr"><code class="xref py py-data docutils literal notranslate"><span class="pre">stderr</span></code></a>
 | ||
| continues to be <code class="docutils literal notranslate"><span class="pre">backslashreplace</span></code>, regardless of locale.</p>
 | ||
| <p>Locale coercion is silent by default, but to assist in debugging potentially
 | ||
| locale related integration problems, explicit warnings (emitted directly on
 | ||
| <a class="reference internal" href="../library/sys.html#sys.stderr" title="sys.stderr"><code class="xref py py-data docutils literal notranslate"><span class="pre">stderr</span></code></a>) can be requested by setting <code class="docutils literal notranslate"><span class="pre">PYTHONCOERCECLOCALE=warn</span></code>.
 | ||
| This setting will also cause the Python runtime to emit a warning if the
 | ||
| legacy C locale remains active when the core interpreter is initialized.</p>
 | ||
| <p>While <span class="target" id="index-6"></span><a class="pep reference external" href="https://peps.python.org/pep-0538/"><strong>PEP 538</strong></a>’s locale coercion has the benefit of also affecting extension
 | ||
| modules (such as GNU <code class="docutils literal notranslate"><span class="pre">readline</span></code>), as well as child processes (including those
 | ||
| running non-Python applications and older versions of Python), it has the
 | ||
| downside of requiring that a suitable target locale be present on the running
 | ||
| system. To better handle the case where no suitable target locale is available
 | ||
| (as occurs on RHEL/CentOS 7, for example), Python 3.7 also implements
 | ||
| <a class="reference internal" href="#whatsnew37-pep540"><span class="std std-ref">PEP 540: Forced UTF-8 Runtime Mode</span></a>.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-7"></span><a class="pep reference external" href="https://peps.python.org/pep-0538/"><strong>PEP 538</strong></a> – Coercing the legacy C locale to a UTF-8 based locale</dt><dd><p>PEP written and implemented by Nick Coghlan.</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-540-forced-utf-8-runtime-mode">
 | ||
| <span id="whatsnew37-pep540"></span><h3>PEP 540: Forced UTF-8 Runtime Mode<a class="headerlink" href="#pep-540-forced-utf-8-runtime-mode" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../using/cmdline.html#cmdoption-X"><code class="xref std std-option docutils literal notranslate"><span class="pre">-X</span></code></a> <code class="docutils literal notranslate"><span class="pre">utf8</span></code> command line option and <span class="target" id="index-8"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONUTF8"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONUTF8</span></code></a>
 | ||
| environment variable can be used to enable the <a class="reference internal" href="../library/os.html#utf8-mode"><span class="std std-ref">Python UTF-8 Mode</span></a>.</p>
 | ||
| <p>When in UTF-8 mode, CPython ignores the locale settings, and uses the
 | ||
| UTF-8 encoding by default.  The error handlers for <a class="reference internal" href="../library/sys.html#sys.stdin" title="sys.stdin"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.stdin</span></code></a> and
 | ||
| <a class="reference internal" href="../library/sys.html#sys.stdout" title="sys.stdout"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.stdout</span></code></a> streams are set to <code class="docutils literal notranslate"><span class="pre">surrogateescape</span></code>.</p>
 | ||
| <p>The forced UTF-8 mode can be used to change the text handling behavior in
 | ||
| an embedded Python interpreter without changing the locale settings of
 | ||
| an embedding application.</p>
 | ||
| <p>While <span class="target" id="index-9"></span><a class="pep reference external" href="https://peps.python.org/pep-0540/"><strong>PEP 540</strong></a>’s UTF-8 mode has the benefit of working regardless of which
 | ||
| locales are available on the running system, it has the downside of having no
 | ||
| effect on extension modules (such as GNU <code class="docutils literal notranslate"><span class="pre">readline</span></code>), child processes running
 | ||
| non-Python applications, and child processes running older versions of Python.
 | ||
| To reduce the risk of corrupting text data when communicating with such
 | ||
| components, Python 3.7 also implements <a class="reference internal" href="#whatsnew37-pep540"><span class="std std-ref">PEP 540: Forced UTF-8 Runtime Mode</span></a>).</p>
 | ||
| <p>The UTF-8 mode is enabled by default when the locale is <code class="docutils literal notranslate"><span class="pre">C</span></code> or <code class="docutils literal notranslate"><span class="pre">POSIX</span></code>, and
 | ||
| the <span class="target" id="index-10"></span><a class="pep reference external" href="https://peps.python.org/pep-0538/"><strong>PEP 538</strong></a> locale coercion feature fails to change it to a UTF-8 based
 | ||
| alternative (whether that failure is due to <code class="docutils literal notranslate"><span class="pre">PYTHONCOERCECLOCALE=0</span></code> being set,
 | ||
| <code class="docutils literal notranslate"><span class="pre">LC_ALL</span></code> being set, or the lack of a suitable target locale).</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-11"></span><a class="pep reference external" href="https://peps.python.org/pep-0540/"><strong>PEP 540</strong></a> – Add a new UTF-8 mode</dt><dd><p>PEP written and implemented by Victor Stinner</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-553-built-in-breakpoint">
 | ||
| <span id="whatsnew37-pep553"></span><h3>PEP 553: Built-in <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code><a class="headerlink" href="#pep-553-built-in-breakpoint" title="Link to this heading">¶</a></h3>
 | ||
| <p>Python 3.7 includes the new built-in <a class="reference internal" href="../library/functions.html#breakpoint" title="breakpoint"><code class="xref py py-func docutils literal notranslate"><span class="pre">breakpoint()</span></code></a> function as
 | ||
| an easy and consistent way to enter the Python debugger.</p>
 | ||
| <p>Built-in <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code> calls <a class="reference internal" href="../library/sys.html#sys.breakpointhook" title="sys.breakpointhook"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.breakpointhook()</span></code></a>.  By default, the
 | ||
| latter imports <a class="reference internal" href="../library/pdb.html#module-pdb" title="pdb: The Python debugger for interactive interpreters."><code class="xref py py-mod docutils literal notranslate"><span class="pre">pdb</span></code></a> and then calls <code class="docutils literal notranslate"><span class="pre">pdb.set_trace()</span></code>, but by binding
 | ||
| <code class="docutils literal notranslate"><span class="pre">sys.breakpointhook()</span></code> to the function of your choosing, <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code> can
 | ||
| enter any debugger. Additionally, the environment variable
 | ||
| <span class="target" id="index-12"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONBREAKPOINT"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONBREAKPOINT</span></code></a> can be set to the callable of your debugger of
 | ||
| choice.  Set <code class="docutils literal notranslate"><span class="pre">PYTHONBREAKPOINT=0</span></code> to completely disable built-in
 | ||
| <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code>.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-13"></span><a class="pep reference external" href="https://peps.python.org/pep-0553/"><strong>PEP 553</strong></a> – Built-in breakpoint()</dt><dd><p>PEP written and implemented by Barry Warsaw</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-539-new-c-api-for-thread-local-storage">
 | ||
| <span id="whatsnew37-pep539"></span><h3>PEP 539: New C API for Thread-Local Storage<a class="headerlink" href="#pep-539-new-c-api-for-thread-local-storage" title="Link to this heading">¶</a></h3>
 | ||
| <p>While Python provides a C API for thread-local storage support; the existing
 | ||
| <a class="reference internal" href="../c-api/init.html#thread-local-storage-api"><span class="std std-ref">Thread Local Storage (TLS) API</span></a> has used
 | ||
| <span class="c-expr sig sig-inline c"><span class="kt">int</span></span> to represent TLS keys across all platforms.  This has not
 | ||
| generally been a problem for officially support platforms, but that is neither
 | ||
| POSIX-compliant, nor portable in any practical sense.</p>
 | ||
| <p><span class="target" id="index-14"></span><a class="pep reference external" href="https://peps.python.org/pep-0539/"><strong>PEP 539</strong></a> changes this by providing a new <a class="reference internal" href="../c-api/init.html#thread-specific-storage-api"><span class="std std-ref">Thread Specific Storage (TSS)
 | ||
| API</span></a> to CPython which supersedes use of the
 | ||
| existing TLS API within the CPython interpreter, while deprecating the existing
 | ||
| API.  The TSS API uses a new type <a class="reference internal" href="../c-api/init.html#c.Py_tss_t" title="Py_tss_t"><code class="xref c c-type docutils literal notranslate"><span class="pre">Py_tss_t</span></code></a> instead of <span class="c-expr sig sig-inline c"><span class="kt">int</span></span>
 | ||
| to represent TSS keys–an opaque type the definition of which may depend on
 | ||
| the underlying TLS implementation.  Therefore, this will allow to build CPython
 | ||
| on platforms where the native TLS key is defined in a way that cannot be safely
 | ||
| cast to <span class="c-expr sig sig-inline c"><span class="kt">int</span></span>.</p>
 | ||
| <p>Note that on platforms where the native TLS key is defined in a way that cannot
 | ||
| be safely cast to <span class="c-expr sig sig-inline c"><span class="kt">int</span></span>, all functions of the existing TLS API will be
 | ||
| no-op and immediately return failure. This indicates clearly that the old API
 | ||
| is not supported on platforms where it cannot be used reliably, and that no
 | ||
| effort will be made to add such support.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-15"></span><a class="pep reference external" href="https://peps.python.org/pep-0539/"><strong>PEP 539</strong></a> – A New C-API for Thread-Local Storage in CPython</dt><dd><p>PEP written by Erik M. Bray; implementation by Masayuki Yamamoto.</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-562-customization-of-access-to-module-attributes">
 | ||
| <span id="whatsnew37-pep562"></span><h3>PEP 562: Customization of Access to Module Attributes<a class="headerlink" href="#pep-562-customization-of-access-to-module-attributes" title="Link to this heading">¶</a></h3>
 | ||
| <p>Python 3.7 allows defining <code class="xref py py-meth docutils literal notranslate"><span class="pre">__getattr__()</span></code> on modules and will call
 | ||
| it whenever a module attribute is otherwise not found.  Defining
 | ||
| <code class="xref py py-meth docutils literal notranslate"><span class="pre">__dir__()</span></code> on modules is now also allowed.</p>
 | ||
| <p>A typical example of where this may be useful is module attribute deprecation
 | ||
| and lazy loading.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-16"></span><a class="pep reference external" href="https://peps.python.org/pep-0562/"><strong>PEP 562</strong></a> – Module <code class="docutils literal notranslate"><span class="pre">__getattr__</span></code> and <code class="docutils literal notranslate"><span class="pre">__dir__</span></code></dt><dd><p>PEP written and implemented by Ivan Levkivskyi</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-564-new-time-functions-with-nanosecond-resolution">
 | ||
| <span id="whatsnew37-pep564"></span><h3>PEP 564: New Time Functions With Nanosecond Resolution<a class="headerlink" href="#pep-564-new-time-functions-with-nanosecond-resolution" title="Link to this heading">¶</a></h3>
 | ||
| <p>The resolution of clocks in modern systems can exceed the limited precision
 | ||
| of a floating-point number returned by the <a class="reference internal" href="../library/time.html#time.time" title="time.time"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.time()</span></code></a> function
 | ||
| and its variants.  To avoid loss of precision, <span class="target" id="index-17"></span><a class="pep reference external" href="https://peps.python.org/pep-0564/"><strong>PEP 564</strong></a> adds six new
 | ||
| “nanosecond” variants of the existing timer functions to the <a class="reference internal" href="../library/time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">time</span></code></a>
 | ||
| module:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.clock_gettime_ns" title="time.clock_gettime_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.clock_gettime_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.clock_settime_ns" title="time.clock_settime_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.clock_settime_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.monotonic_ns" title="time.monotonic_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.monotonic_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.perf_counter_ns" title="time.perf_counter_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.perf_counter_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.process_time_ns" title="time.process_time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.process_time_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.time_ns" title="time.time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.time_ns()</span></code></a></p></li>
 | ||
| </ul>
 | ||
| <p>The new functions return the number of nanoseconds as an integer value.</p>
 | ||
| <p><span class="target" id="index-18"></span><a class="pep reference external" href="https://peps.python.org/pep-0564/#annex-clocks-resolution-in-python"><strong>Measurements</strong></a>
 | ||
| show that on Linux and Windows the resolution of <a class="reference internal" href="../library/time.html#time.time_ns" title="time.time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.time_ns()</span></code></a> is
 | ||
| approximately 3 times better than that of <a class="reference internal" href="../library/time.html#time.time" title="time.time"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.time()</span></code></a>.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-19"></span><a class="pep reference external" href="https://peps.python.org/pep-0564/"><strong>PEP 564</strong></a> – Add new time functions with nanosecond resolution</dt><dd><p>PEP written and implemented by Victor Stinner</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-565-show-deprecationwarning-in-main">
 | ||
| <span id="whatsnew37-pep565"></span><h3>PEP 565: Show DeprecationWarning in <code class="docutils literal notranslate"><span class="pre">__main__</span></code><a class="headerlink" href="#pep-565-show-deprecationwarning-in-main" title="Link to this heading">¶</a></h3>
 | ||
| <p>The default handling of <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a> has been changed such that
 | ||
| these warnings are once more shown by default, but only when the code
 | ||
| triggering them is running directly in the <a class="reference internal" href="../library/__main__.html#module-__main__" title="__main__: The environment where top-level code is run. Covers command-line interfaces, import-time behavior, and ``__name__ == '__main__'``."><code class="xref py py-mod docutils literal notranslate"><span class="pre">__main__</span></code></a> module.  As a result,
 | ||
| developers of single file scripts and those using Python interactively should
 | ||
| once again start seeing deprecation warnings for the APIs they use, but
 | ||
| deprecation warnings triggered by imported application, library and framework
 | ||
| modules will continue to be hidden by default.</p>
 | ||
| <p>As a result of this change, the standard library now allows developers to choose
 | ||
| between three different deprecation warning behaviours:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../library/exceptions.html#FutureWarning" title="FutureWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FutureWarning</span></code></a>: always displayed by default, recommended for warnings
 | ||
| intended to be seen by application end users (e.g. for deprecated application
 | ||
| configuration settings).</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a>: displayed by default only in <a class="reference internal" href="../library/__main__.html#module-__main__" title="__main__: The environment where top-level code is run. Covers command-line interfaces, import-time behavior, and ``__name__ == '__main__'``."><code class="xref py py-mod docutils literal notranslate"><span class="pre">__main__</span></code></a> and when
 | ||
| running tests, recommended for warnings intended to be seen by other Python
 | ||
| developers where a version upgrade may result in changed behaviour or an
 | ||
| error.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/exceptions.html#PendingDeprecationWarning" title="PendingDeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">PendingDeprecationWarning</span></code></a>: displayed by default only when running
 | ||
| tests, intended for cases where a future version upgrade will change the
 | ||
| warning category to <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a> or <a class="reference internal" href="../library/exceptions.html#FutureWarning" title="FutureWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FutureWarning</span></code></a>.</p></li>
 | ||
| </ul>
 | ||
| <p>Previously both <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a> and <a class="reference internal" href="../library/exceptions.html#PendingDeprecationWarning" title="PendingDeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">PendingDeprecationWarning</span></code></a>
 | ||
| were only visible when running tests, which meant that developers primarily
 | ||
| writing single file scripts or using Python interactively could be surprised
 | ||
| by breaking changes in the APIs they used.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-20"></span><a class="pep reference external" href="https://peps.python.org/pep-0565/"><strong>PEP 565</strong></a> – Show DeprecationWarning in <code class="docutils literal notranslate"><span class="pre">__main__</span></code></dt><dd><p>PEP written and implemented by Nick Coghlan</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-560-core-support-for-typing-module-and-generic-types">
 | ||
| <span id="whatsnew37-pep560"></span><h3>PEP 560: Core Support for <code class="docutils literal notranslate"><span class="pre">typing</span></code> module and Generic Types<a class="headerlink" href="#pep-560-core-support-for-typing-module-and-generic-types" title="Link to this heading">¶</a></h3>
 | ||
| <p>Initially <span class="target" id="index-21"></span><a class="pep reference external" href="https://peps.python.org/pep-0484/"><strong>PEP 484</strong></a> was designed in such way that it would not introduce <em>any</em>
 | ||
| changes to the core CPython interpreter. Now type hints and the <a class="reference internal" href="../library/typing.html#module-typing" title="typing: Support for type hints (see :pep:`484`)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">typing</span></code></a>
 | ||
| module are extensively used by the community, so this restriction is removed.
 | ||
| The PEP introduces two special methods <code class="xref py py-meth docutils literal notranslate"><span class="pre">__class_getitem__()</span></code> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">__mro_entries__</span></code>, these methods are now used by most classes and special
 | ||
| constructs in <a class="reference internal" href="../library/typing.html#module-typing" title="typing: Support for type hints (see :pep:`484`)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">typing</span></code></a>. As a result, the speed of various operations
 | ||
| with types increased up to 7 times, the generic types can be used without
 | ||
| metaclass conflicts, and several long standing bugs in <a class="reference internal" href="../library/typing.html#module-typing" title="typing: Support for type hints (see :pep:`484`)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">typing</span></code></a> module are
 | ||
| fixed.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-22"></span><a class="pep reference external" href="https://peps.python.org/pep-0560/"><strong>PEP 560</strong></a> – Core support for typing module and generic types</dt><dd><p>PEP written and implemented by Ivan Levkivskyi</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-552-hash-based-pyc-files">
 | ||
| <span id="whatsnew37-pep552"></span><h3>PEP 552: Hash-based .pyc Files<a class="headerlink" href="#pep-552-hash-based-pyc-files" title="Link to this heading">¶</a></h3>
 | ||
| <p>Python has traditionally checked the up-to-dateness of bytecode cache files
 | ||
| (i.e., <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files) by comparing the source metadata (last-modified timestamp
 | ||
| and size) with source metadata saved in the cache file header when it was
 | ||
| generated. While effective, this invalidation method has its drawbacks.  When
 | ||
| filesystem timestamps are too coarse, Python can miss source updates, leading to
 | ||
| user confusion. Additionally, having a timestamp in the cache file is
 | ||
| problematic for <a class="reference external" href="https://reproducible-builds.org/">build reproducibility</a> and
 | ||
| content-based build systems.</p>
 | ||
| <p><span class="target" id="index-23"></span><a class="pep reference external" href="https://peps.python.org/pep-0552/"><strong>PEP 552</strong></a> extends the pyc format to allow the hash of the source file to be
 | ||
| used for invalidation instead of the source timestamp. Such <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files are
 | ||
| called “hash-based”. By default, Python still uses timestamp-based invalidation
 | ||
| and does not generate hash-based <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files at runtime. Hash-based <code class="docutils literal notranslate"><span class="pre">.pyc</span></code>
 | ||
| files may be generated with <a class="reference internal" href="../library/py_compile.html#module-py_compile" title="py_compile: Generate byte-code files from Python source files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">py_compile</span></code></a> or <a class="reference internal" href="../library/compileall.html#module-compileall" title="compileall: Tools for byte-compiling all Python source files in a directory tree."><code class="xref py py-mod docutils literal notranslate"><span class="pre">compileall</span></code></a>.</p>
 | ||
| <p>Hash-based <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files come in two variants: checked and unchecked. Python
 | ||
| validates checked hash-based <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files against the corresponding source
 | ||
| files at runtime but doesn’t do so for unchecked hash-based pycs. Unchecked
 | ||
| hash-based <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files are a useful performance optimization for environments
 | ||
| where a system external to Python (e.g., the build system) is responsible for
 | ||
| keeping <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files up-to-date.</p>
 | ||
| <p>See <a class="reference internal" href="../reference/import.html#pyc-invalidation"><span class="std std-ref">Cached bytecode invalidation</span></a> for more information.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-24"></span><a class="pep reference external" href="https://peps.python.org/pep-0552/"><strong>PEP 552</strong></a> – Deterministic pycs</dt><dd><p>PEP written and implemented by Benjamin Peterson</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="pep-545-python-documentation-translations">
 | ||
| <span id="whatsnew37-pep545"></span><h3>PEP 545: Python Documentation Translations<a class="headerlink" href="#pep-545-python-documentation-translations" title="Link to this heading">¶</a></h3>
 | ||
| <p><span class="target" id="index-25"></span><a class="pep reference external" href="https://peps.python.org/pep-0545/"><strong>PEP 545</strong></a> describes the process of creating and maintaining Python
 | ||
| documentation translations.</p>
 | ||
| <p>Three new translations have been added:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>Japanese: <a class="reference external" href="https://docs.python.org/ja/">https://docs.python.org/ja/</a></p></li>
 | ||
| <li><p>French: <a class="reference external" href="https://docs.python.org/fr/">https://docs.python.org/fr/</a></p></li>
 | ||
| <li><p>Korean: <a class="reference external" href="https://docs.python.org/ko/">https://docs.python.org/ko/</a></p></li>
 | ||
| </ul>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-26"></span><a class="pep reference external" href="https://peps.python.org/pep-0545/"><strong>PEP 545</strong></a> – Python Documentation Translations</dt><dd><p>PEP written and implemented by Julien Palard, Inada Naoki, and
 | ||
| Victor Stinner.</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="python-development-mode-x-dev">
 | ||
| <span id="whatsnew37-devmode"></span><h3>Python Development Mode (-X dev)<a class="headerlink" href="#python-development-mode-x-dev" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../using/cmdline.html#cmdoption-X"><code class="xref std std-option docutils literal notranslate"><span class="pre">-X</span></code></a> <code class="docutils literal notranslate"><span class="pre">dev</span></code> command line option or the new
 | ||
| <span class="target" id="index-27"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONDEVMODE"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONDEVMODE</span></code></a> environment variable can be used to enable
 | ||
| <a class="reference internal" href="../library/devmode.html#devmode"><span class="std std-ref">Python Development Mode</span></a>.  When in development mode, Python performs
 | ||
| additional runtime checks that are too expensive to be enabled by default.
 | ||
| See <a class="reference internal" href="../library/devmode.html#devmode"><span class="std std-ref">Python Development Mode</span></a> documentation for the full
 | ||
| description.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="other-language-changes">
 | ||
| <h2>Other Language Changes<a class="headerlink" href="#other-language-changes" title="Link to this heading">¶</a></h2>
 | ||
| <ul class="simple">
 | ||
| <li><p>An <a class="reference internal" href="../reference/expressions.html#await"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">await</span></code></a> expression and comprehensions containing an
 | ||
| <a class="reference internal" href="../reference/compound_stmts.html#async-for"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">for</span></code></a> clause were illegal in the expressions in
 | ||
| <a class="reference internal" href="../reference/lexical_analysis.html#f-strings"><span class="std std-ref">formatted string literals</span></a> due to a problem with the
 | ||
| implementation.  In Python 3.7 this restriction was lifted.</p></li>
 | ||
| <li><p>More than 255 arguments can now be passed to a function, and a function can
 | ||
| now have more than 255 parameters. (Contributed by Serhiy Storchaka in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=12844">bpo-12844</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=18896">bpo-18896</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/stdtypes.html#bytes.fromhex" title="bytes.fromhex"><code class="xref py py-meth docutils literal notranslate"><span class="pre">bytes.fromhex()</span></code></a> and <a class="reference internal" href="../library/stdtypes.html#bytearray.fromhex" title="bytearray.fromhex"><code class="xref py py-meth docutils literal notranslate"><span class="pre">bytearray.fromhex()</span></code></a> now ignore all ASCII
 | ||
| whitespace, not only spaces. (Contributed by Robert Xiao in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28927">bpo-28927</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, <a class="reference internal" href="../library/stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a>, and <a class="reference internal" href="../library/stdtypes.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytearray</span></code></a> gained support for
 | ||
| the new <a class="reference internal" href="../library/stdtypes.html#str.isascii" title="str.isascii"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isascii()</span></code></a> method, which can be used to
 | ||
| test if a string or bytes contain only the ASCII characters.
 | ||
| (Contributed by INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32677">bpo-32677</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/exceptions.html#ImportError" title="ImportError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ImportError</span></code></a> now displays module name and module <code class="docutils literal notranslate"><span class="pre">__file__</span></code> path when
 | ||
| <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">...</span> <span class="pre">import</span> <span class="pre">...</span></code> fails. (Contributed by Matthias Bussonnier in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29546">bpo-29546</a>.)</p></li>
 | ||
| <li><p>Circular imports involving absolute imports with binding a submodule to
 | ||
| a name are now supported.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30024">bpo-30024</a>.)</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">object.__format__(x,</span> <span class="pre">'')</span></code> is now equivalent to <code class="docutils literal notranslate"><span class="pre">str(x)</span></code> rather than
 | ||
| <code class="docutils literal notranslate"><span class="pre">format(str(self),</span> <span class="pre">'')</span></code>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28974">bpo-28974</a>.)</p></li>
 | ||
| <li><p>In order to better support dynamic creation of stack traces,
 | ||
| <a class="reference internal" href="../library/types.html#types.TracebackType" title="types.TracebackType"><code class="xref py py-class docutils literal notranslate"><span class="pre">types.TracebackType</span></code></a> can now be instantiated from Python code, and
 | ||
| the <a class="reference internal" href="../reference/datamodel.html#traceback.tb_next" title="traceback.tb_next"><code class="xref py py-attr docutils literal notranslate"><span class="pre">tb_next</span></code></a> attribute on
 | ||
| <a class="reference internal" href="../reference/datamodel.html#traceback-objects"><span class="std std-ref">tracebacks</span></a> is now writable.
 | ||
| (Contributed by Nathaniel J. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30579">bpo-30579</a>.)</p></li>
 | ||
| <li><p>When using the <a class="reference internal" href="../using/cmdline.html#cmdoption-m"><code class="xref std std-option docutils literal notranslate"><span class="pre">-m</span></code></a> switch, <code class="docutils literal notranslate"><span class="pre">sys.path[0]</span></code> is now eagerly expanded
 | ||
| to the full starting directory path, rather than being left as the empty
 | ||
| directory (which allows imports from the <em>current</em> working directory at the
 | ||
| time when an import occurs)
 | ||
| (Contributed by Nick Coghlan in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33053">bpo-33053</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../using/cmdline.html#cmdoption-X"><code class="xref std std-option docutils literal notranslate"><span class="pre">-X</span></code></a> <code class="docutils literal notranslate"><span class="pre">importtime</span></code> option or the
 | ||
| <span class="target" id="index-28"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPROFILEIMPORTTIME</span></code></a> environment variable can be used to show
 | ||
| the timing of each module import.
 | ||
| (Contributed by Inada Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31415">bpo-31415</a>.)</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="new-modules">
 | ||
| <h2>New Modules<a class="headerlink" href="#new-modules" title="Link to this heading">¶</a></h2>
 | ||
| <section id="contextvars">
 | ||
| <span id="whatsnew37-pep567"></span><h3>contextvars<a class="headerlink" href="#contextvars" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/contextvars.html#module-contextvars" title="contextvars: Context Variables"><code class="xref py py-mod docutils literal notranslate"><span class="pre">contextvars</span></code></a> module and a set of
 | ||
| <a class="reference internal" href="../c-api/contextvars.html#contextvarsobjects"><span class="std std-ref">new C APIs</span></a> introduce
 | ||
| support for <em>context variables</em>.  Context variables are conceptually
 | ||
| similar to thread-local variables.  Unlike TLS, context variables
 | ||
| support asynchronous code correctly.</p>
 | ||
| <p>The <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> and <a class="reference internal" href="../library/decimal.html#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> modules have been updated to use
 | ||
| and support context variables out of the box.  Particularly the active
 | ||
| decimal context is now stored in a context variable, which allows
 | ||
| decimal operations to work with the correct context in asynchronous code.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-29"></span><a class="pep reference external" href="https://peps.python.org/pep-0567/"><strong>PEP 567</strong></a> – Context Variables</dt><dd><p>PEP written and implemented by Yury Selivanov</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="dataclasses">
 | ||
| <span id="whatsnew37-pep557"></span><h3>dataclasses<a class="headerlink" href="#dataclasses" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/dataclasses.html#dataclasses.dataclass" title="dataclasses.dataclass"><code class="xref py py-func docutils literal notranslate"><span class="pre">dataclass()</span></code></a> decorator provides a way to declare
 | ||
| <em>data classes</em>.  A data class describes its attributes using class variable
 | ||
| annotations.  Its constructor and other magic methods, such as
 | ||
| <a class="reference internal" href="../reference/datamodel.html#object.__repr__" title="object.__repr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__repr__()</span></code></a>, <a class="reference internal" href="../reference/datamodel.html#object.__eq__" title="object.__eq__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__eq__()</span></code></a>, and
 | ||
| <a class="reference internal" href="../reference/datamodel.html#object.__hash__" title="object.__hash__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__hash__()</span></code></a> are generated automatically.</p>
 | ||
| <p>Example:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="nd">@dataclass</span>
 | ||
| <span class="k">class</span><span class="w"> </span><span class="nc">Point</span><span class="p">:</span>
 | ||
|     <span class="n">x</span><span class="p">:</span> <span class="nb">float</span>
 | ||
|     <span class="n">y</span><span class="p">:</span> <span class="nb">float</span>
 | ||
|     <span class="n">z</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.0</span>
 | ||
| 
 | ||
| <span class="n">p</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="mf">1.5</span><span class="p">,</span> <span class="mf">2.5</span><span class="p">)</span>
 | ||
| <span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>   <span class="c1"># produces "Point(x=1.5, y=2.5, z=0.0)"</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <dl class="simple">
 | ||
| <dt><span class="target" id="index-30"></span><a class="pep reference external" href="https://peps.python.org/pep-0557/"><strong>PEP 557</strong></a> – Data Classes</dt><dd><p>PEP written and implemented by Eric V. Smith</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="importlib-resources">
 | ||
| <span id="whatsnew37-importlib-resources"></span><h3>importlib.resources<a class="headerlink" href="#importlib-resources" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/importlib.resources.html#module-importlib.resources" title="importlib.resources: Package resource reading, opening, and access"><code class="xref py py-mod docutils literal notranslate"><span class="pre">importlib.resources</span></code></a> module provides several new APIs and one
 | ||
| new ABC for access to, opening, and reading <em>resources</em> inside packages.
 | ||
| Resources are roughly similar to files inside packages, but they needn’t
 | ||
| be actual files on the physical file system.  Module loaders can provide a
 | ||
| <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_resource_reader()</span></code> function which returns
 | ||
| a <a class="reference internal" href="../library/importlib.html#importlib.abc.ResourceReader" title="importlib.abc.ResourceReader"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.abc.ResourceReader</span></code></a> instance to support this
 | ||
| new API.  Built-in file path loaders and zip file loaders both support this.</p>
 | ||
| <p>Contributed by Barry Warsaw and Brett Cannon in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32248">bpo-32248</a>.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <p><a class="reference external" href="https://importlib-resources.readthedocs.io/en/latest/">importlib_resources</a>
 | ||
| – a PyPI backport for earlier Python versions.</p>
 | ||
| </div>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="improved-modules">
 | ||
| <h2>Improved Modules<a class="headerlink" href="#improved-modules" title="Link to this heading">¶</a></h2>
 | ||
| <section id="argparse">
 | ||
| <h3>argparse<a class="headerlink" href="#argparse" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/argparse.html#argparse.ArgumentParser.parse_intermixed_args" title="argparse.ArgumentParser.parse_intermixed_args"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ArgumentParser.parse_intermixed_args()</span></code></a>
 | ||
| method allows intermixing options and positional arguments.
 | ||
| (Contributed by paul.j3 in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=14191">bpo-14191</a>.)</p>
 | ||
| </section>
 | ||
| <section id="asyncio">
 | ||
| <span id="whatsnew37-asyncio"></span><h3>asyncio<a class="headerlink" href="#asyncio" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> module has received many new features, usability and
 | ||
| <a class="reference internal" href="#whatsnew37-asyncio-perf"><span class="std std-ref">performance improvements</span></a>.  Notable changes
 | ||
| include:</p>
 | ||
| <ul>
 | ||
| <li><p>The new <a class="reference internal" href="../glossary.html#term-provisional-API"><span class="xref std std-term">provisional</span></a> <a class="reference internal" href="../library/asyncio-runner.html#asyncio.run" title="asyncio.run"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.run()</span></code></a> function can
 | ||
| be used to run a coroutine from synchronous code by automatically creating and
 | ||
| destroying the event loop.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32314">bpo-32314</a>.)</p></li>
 | ||
| <li><p>asyncio gained support for <a class="reference internal" href="../library/contextvars.html#module-contextvars" title="contextvars: Context Variables"><code class="xref py py-mod docutils literal notranslate"><span class="pre">contextvars</span></code></a>.
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.call_soon" title="asyncio.loop.call_soon"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.call_soon()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.call_soon_threadsafe" title="asyncio.loop.call_soon_threadsafe"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.call_soon_threadsafe()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.call_later" title="asyncio.loop.call_later"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.call_later()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.call_at" title="asyncio.loop.call_at"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.call_at()</span></code></a>, and
 | ||
| <a class="reference internal" href="../library/asyncio-future.html#asyncio.Future.add_done_callback" title="asyncio.Future.add_done_callback"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Future.add_done_callback()</span></code></a>
 | ||
| have a new optional keyword-only <em>context</em> parameter.
 | ||
| <a class="reference internal" href="../library/asyncio-task.html#asyncio.Task" title="asyncio.Task"><code class="xref py py-class docutils literal notranslate"><span class="pre">Tasks</span></code></a> now track their context automatically.
 | ||
| See <span class="target" id="index-31"></span><a class="pep reference external" href="https://peps.python.org/pep-0567/"><strong>PEP 567</strong></a> for more details.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32436">bpo-32436</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-task.html#asyncio.create_task" title="asyncio.create_task"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.create_task()</span></code></a> function has been added as a shortcut
 | ||
| to <code class="docutils literal notranslate"><span class="pre">asyncio.get_event_loop().create_task()</span></code>.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32311">bpo-32311</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.start_tls" title="asyncio.loop.start_tls"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.start_tls()</span></code></a>
 | ||
| method can be used to upgrade an existing connection to TLS.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=23749">bpo-23749</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.sock_recv_into" title="asyncio.loop.sock_recv_into"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.sock_recv_into()</span></code></a>
 | ||
| method allows reading data from a socket directly into a provided buffer making
 | ||
| it possible to reduce data copies.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31819">bpo-31819</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-task.html#asyncio.current_task" title="asyncio.current_task"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.current_task()</span></code></a> function returns the currently running
 | ||
| <a class="reference internal" href="../library/asyncio-task.html#asyncio.Task" title="asyncio.Task"><code class="xref py py-class docutils literal notranslate"><span class="pre">Task</span></code></a> instance, and the new <a class="reference internal" href="../library/asyncio-task.html#asyncio.all_tasks" title="asyncio.all_tasks"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.all_tasks()</span></code></a>
 | ||
| function returns a set of all existing <code class="docutils literal notranslate"><span class="pre">Task</span></code> instances in a given loop.
 | ||
| The <code class="xref py py-meth docutils literal notranslate"><span class="pre">Task.current_task()</span></code> and
 | ||
| <code class="xref py py-meth docutils literal notranslate"><span class="pre">Task.all_tasks()</span></code> methods have been deprecated.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32250">bpo-32250</a>.)</p></li>
 | ||
| <li><p>The new <em>provisional</em> <a class="reference internal" href="../library/asyncio-protocol.html#asyncio.BufferedProtocol" title="asyncio.BufferedProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">BufferedProtocol</span></code></a> class allows
 | ||
| implementing streaming protocols with manual control over the receive buffer.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32251">bpo-32251</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.get_running_loop" title="asyncio.get_running_loop"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.get_running_loop()</span></code></a> function returns the currently
 | ||
| running loop, and raises a <a class="reference internal" href="../library/exceptions.html#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">RuntimeError</span></code></a> if no loop is running.
 | ||
| This is in contrast with <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.get_event_loop" title="asyncio.get_event_loop"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.get_event_loop()</span></code></a>, which will <em>create</em>
 | ||
| a new event loop if none is running.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32269">bpo-32269</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-stream.html#asyncio.StreamWriter.wait_closed" title="asyncio.StreamWriter.wait_closed"><code class="xref py py-meth docutils literal notranslate"><span class="pre">StreamWriter.wait_closed()</span></code></a>
 | ||
| coroutine method allows waiting until the stream writer is closed.  The new
 | ||
| <a class="reference internal" href="../library/asyncio-stream.html#asyncio.StreamWriter.is_closing" title="asyncio.StreamWriter.is_closing"><code class="xref py py-meth docutils literal notranslate"><span class="pre">StreamWriter.is_closing()</span></code></a> method
 | ||
| can be used to determine if the writer is closing.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32391">bpo-32391</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.sock_sendfile" title="asyncio.loop.sock_sendfile"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.sock_sendfile()</span></code></a>
 | ||
| coroutine method allows sending files using <a class="reference internal" href="../library/os.html#os.sendfile" title="os.sendfile"><code class="xref py py-mod docutils literal notranslate"><span class="pre">os.sendfile</span></code></a> when possible.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32410">bpo-32410</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-future.html#asyncio.Future.get_loop" title="asyncio.Future.get_loop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Future.get_loop()</span></code></a> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">Task.get_loop()</span></code> methods return the instance of the loop on which a task or
 | ||
| a future were created.
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server.get_loop" title="asyncio.Server.get_loop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Server.get_loop()</span></code></a> allows doing the same for
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server" title="asyncio.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Server</span></code></a> objects.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32415">bpo-32415</a> and
 | ||
| Srinivas Reddy Thatiparthy in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32418">bpo-32418</a>.)</p></li>
 | ||
| <li><p>It is now possible to control how instances of <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server" title="asyncio.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Server</span></code></a> begin
 | ||
| serving.  Previously, the server would start serving immediately when created.
 | ||
| The new <em>start_serving</em> keyword argument to
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_server" title="asyncio.loop.create_server"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_server()</span></code></a> and
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_unix_server" title="asyncio.loop.create_unix_server"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_unix_server()</span></code></a>,
 | ||
| as well as <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server.start_serving" title="asyncio.Server.start_serving"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Server.start_serving()</span></code></a>, and
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server.serve_forever" title="asyncio.Server.serve_forever"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Server.serve_forever()</span></code></a>
 | ||
| can be used to decouple server instantiation and serving.  The new
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server.is_serving" title="asyncio.Server.is_serving"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Server.is_serving()</span></code></a> method returns <code class="docutils literal notranslate"><span class="pre">True</span></code>
 | ||
| if the server is serving.  <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server" title="asyncio.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a> objects are now
 | ||
| asynchronous context managers:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">srv</span> <span class="o">=</span> <span class="k">await</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_server</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
 | ||
| 
 | ||
| <span class="k">async</span> <span class="k">with</span> <span class="n">srv</span><span class="p">:</span>
 | ||
|     <span class="c1"># some code</span>
 | ||
| 
 | ||
| <span class="c1"># At this point, srv is closed and no longer accepts new connections.</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>(Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32662">bpo-32662</a>.)</p>
 | ||
| </li>
 | ||
| <li><p>Callback objects returned by
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.call_later" title="asyncio.loop.call_later"><code class="xref py py-func docutils literal notranslate"><span class="pre">loop.call_later()</span></code></a>
 | ||
| gained the new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.TimerHandle.when" title="asyncio.TimerHandle.when"><code class="xref py py-meth docutils literal notranslate"><span class="pre">when()</span></code></a> method which
 | ||
| returns an absolute scheduled callback timestamp.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32741">bpo-32741</a>.)</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint" title="asyncio.loop.create_datagram_endpoint"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_datagram_endpoint()</span> </code></a> method
 | ||
| gained support for Unix sockets.
 | ||
| (Contributed by Quentin Dawans in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31245">bpo-31245</a>.)</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/asyncio-stream.html#asyncio.open_connection" title="asyncio.open_connection"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.open_connection()</span></code></a>, <a class="reference internal" href="../library/asyncio-stream.html#asyncio.start_server" title="asyncio.start_server"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.start_server()</span></code></a> functions,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_connection" title="asyncio.loop.create_connection"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_connection()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_server" title="asyncio.loop.create_server"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_server()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.connect_accepted_socket" title="asyncio.loop.connect_accepted_socket"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.create_accepted_socket()</span></code></a>
 | ||
| methods and their corresponding UNIX socket variants now accept the
 | ||
| <em>ssl_handshake_timeout</em> keyword argument.
 | ||
| (Contributed by Neil Aspinall in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29970">bpo-29970</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Handle.cancelled" title="asyncio.Handle.cancelled"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Handle.cancelled()</span></code></a> method returns
 | ||
| <code class="docutils literal notranslate"><span class="pre">True</span></code> if the callback was cancelled.
 | ||
| (Contributed by Marat Sharafutdinov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31943">bpo-31943</a>.)</p></li>
 | ||
| <li><p>The asyncio source has been converted to use the
 | ||
| <a class="reference internal" href="../reference/compound_stmts.html#async"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span></code></a>/<a class="reference internal" href="../reference/expressions.html#await"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">await</span></code></a> syntax.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32193">bpo-32193</a>.)</p></li>
 | ||
| <li><p>The new <a class="reference internal" href="../library/asyncio-protocol.html#asyncio.ReadTransport.is_reading" title="asyncio.ReadTransport.is_reading"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ReadTransport.is_reading()</span></code></a>
 | ||
| method can be used to determine the reading state of the transport.
 | ||
| Additionally, calls to
 | ||
| <a class="reference internal" href="../library/asyncio-protocol.html#asyncio.ReadTransport.resume_reading" title="asyncio.ReadTransport.resume_reading"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ReadTransport.resume_reading()</span></code></a>
 | ||
| and <a class="reference internal" href="../library/asyncio-protocol.html#asyncio.ReadTransport.pause_reading" title="asyncio.ReadTransport.pause_reading"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ReadTransport.pause_reading()</span></code></a>
 | ||
| are now idempotent.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32356">bpo-32356</a>.)</p></li>
 | ||
| <li><p>Loop methods which accept socket paths now support passing
 | ||
| <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like objects</span></a>.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32066">bpo-32066</a>.)</p></li>
 | ||
| <li><p>In <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> TCP sockets on Linux are now created with <code class="docutils literal notranslate"><span class="pre">TCP_NODELAY</span></code>
 | ||
| flag set by default.
 | ||
| (Contributed by Yury Selivanov and Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27456">bpo-27456</a>.)</p></li>
 | ||
| <li><p>Exceptions occurring in cancelled tasks are no longer logged.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30508">bpo-30508</a>.)</p></li>
 | ||
| <li><p>New <code class="docutils literal notranslate"><span class="pre">WindowsSelectorEventLoopPolicy</span></code> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">WindowsProactorEventLoopPolicy</span></code> classes.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33792">bpo-33792</a>.)</p></li>
 | ||
| </ul>
 | ||
| <p>Several <code class="docutils literal notranslate"><span class="pre">asyncio</span></code> APIs have been
 | ||
| <a class="reference internal" href="#whatsnew37-asyncio-deprecated"><span class="std std-ref">deprecated</span></a>.</p>
 | ||
| </section>
 | ||
| <section id="binascii">
 | ||
| <h3>binascii<a class="headerlink" href="#binascii" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/binascii.html#binascii.b2a_uu" title="binascii.b2a_uu"><code class="xref py py-func docutils literal notranslate"><span class="pre">b2a_uu()</span></code></a> function now accepts an optional <em>backtick</em>
 | ||
| keyword argument.  When it’s true, zeros are represented by <code class="docutils literal notranslate"><span class="pre">'`'</span></code>
 | ||
| instead of spaces.  (Contributed by Xiang Zhang in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30103">bpo-30103</a>.)</p>
 | ||
| </section>
 | ||
| <section id="calendar">
 | ||
| <h3>calendar<a class="headerlink" href="#calendar" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/calendar.html#calendar.HTMLCalendar" title="calendar.HTMLCalendar"><code class="xref py py-class docutils literal notranslate"><span class="pre">HTMLCalendar</span></code></a> class has new class attributes which ease
 | ||
| the customization of CSS classes in the produced HTML calendar.
 | ||
| (Contributed by Oz Tiram in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30095">bpo-30095</a>.)</p>
 | ||
| </section>
 | ||
| <section id="collections">
 | ||
| <h3>collections<a class="headerlink" href="#collections" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="docutils literal notranslate"><span class="pre">collections.namedtuple()</span></code> now supports default values.
 | ||
| (Contributed by Raymond Hettinger in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32320">bpo-32320</a>.)</p>
 | ||
| </section>
 | ||
| <section id="compileall">
 | ||
| <h3>compileall<a class="headerlink" href="#compileall" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/compileall.html#compileall.compile_dir" title="compileall.compile_dir"><code class="xref py py-func docutils literal notranslate"><span class="pre">compileall.compile_dir()</span></code></a> learned the new <em>invalidation_mode</em> parameter,
 | ||
| which can be used to enable
 | ||
| <a class="reference internal" href="#whatsnew37-pep552"><span class="std std-ref">hash-based .pyc invalidation</span></a>.  The invalidation
 | ||
| mode can also be specified on the command line using the new
 | ||
| <code class="docutils literal notranslate"><span class="pre">--invalidation-mode</span></code> argument.
 | ||
| (Contributed by Benjamin Peterson in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31650">bpo-31650</a>.)</p>
 | ||
| </section>
 | ||
| <section id="concurrent-futures">
 | ||
| <h3>concurrent.futures<a class="headerlink" href="#concurrent-futures" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor" title="concurrent.futures.ProcessPoolExecutor"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProcessPoolExecutor</span></code></a> and
 | ||
| <a class="reference internal" href="../library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor" title="concurrent.futures.ThreadPoolExecutor"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThreadPoolExecutor</span></code></a> now
 | ||
| support the new <em>initializer</em> and <em>initargs</em> constructor arguments.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=21423">bpo-21423</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor" title="concurrent.futures.ProcessPoolExecutor"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProcessPoolExecutor</span></code></a>
 | ||
| can now take the multiprocessing context via the new <em>mp_context</em> argument.
 | ||
| (Contributed by Thomas Moreau in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31540">bpo-31540</a>.)</p>
 | ||
| </section>
 | ||
| <section id="contextlib">
 | ||
| <h3>contextlib<a class="headerlink" href="#contextlib" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/contextlib.html#contextlib.nullcontext" title="contextlib.nullcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">nullcontext()</span></code></a> is a simpler and faster no-op
 | ||
| context manager than <a class="reference internal" href="../library/contextlib.html#contextlib.ExitStack" title="contextlib.ExitStack"><code class="xref py py-class docutils literal notranslate"><span class="pre">ExitStack</span></code></a>.
 | ||
| (Contributed by Jesse-Bakker in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10049">bpo-10049</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/contextlib.html#contextlib.asynccontextmanager" title="contextlib.asynccontextmanager"><code class="xref py py-func docutils literal notranslate"><span class="pre">asynccontextmanager()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/contextlib.html#contextlib.AbstractAsyncContextManager" title="contextlib.AbstractAsyncContextManager"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractAsyncContextManager</span></code></a>, and
 | ||
| <a class="reference internal" href="../library/contextlib.html#contextlib.AsyncExitStack" title="contextlib.AsyncExitStack"><code class="xref py py-class docutils literal notranslate"><span class="pre">AsyncExitStack</span></code></a> have been added to
 | ||
| complement their synchronous counterparts.  (Contributed
 | ||
| by Jelle Zijlstra in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29679">bpo-29679</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30241">bpo-30241</a>,
 | ||
| and by Alexander Mohr and Ilya Kulakov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29302">bpo-29302</a>.)</p>
 | ||
| </section>
 | ||
| <section id="cprofile">
 | ||
| <h3>cProfile<a class="headerlink" href="#cprofile" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/profile.html#module-cProfile" title="cProfile"><code class="xref py py-mod docutils literal notranslate"><span class="pre">cProfile</span></code></a> command line now accepts <code class="docutils literal notranslate"><span class="pre">-m</span> <span class="pre">module_name</span></code> as an
 | ||
| alternative to script path.  (Contributed by Sanyam Khurana in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=21862">bpo-21862</a>.)</p>
 | ||
| </section>
 | ||
| <section id="crypt">
 | ||
| <h3>crypt<a class="headerlink" href="#crypt" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <code class="xref py py-mod docutils literal notranslate"><span class="pre">crypt</span></code> module now supports the Blowfish hashing method.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31664">bpo-31664</a>.)</p>
 | ||
| <p>The <code class="xref py py-func docutils literal notranslate"><span class="pre">mksalt()</span></code> function now allows specifying the number of rounds
 | ||
| for hashing.  (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31702">bpo-31702</a>.)</p>
 | ||
| </section>
 | ||
| <section id="datetime">
 | ||
| <h3>datetime<a class="headerlink" href="#datetime" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/datetime.html#datetime.datetime.fromisoformat" title="datetime.datetime.fromisoformat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">datetime.fromisoformat()</span></code></a>
 | ||
| method constructs a <a class="reference internal" href="../library/datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime</span></code></a> object from a string
 | ||
| in one of the formats output by
 | ||
| <a class="reference internal" href="../library/datetime.html#datetime.datetime.isoformat" title="datetime.datetime.isoformat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">datetime.isoformat()</span></code></a>.
 | ||
| (Contributed by Paul Ganssle in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=15873">bpo-15873</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/datetime.html#datetime.tzinfo" title="datetime.tzinfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">tzinfo</span></code></a> class now supports sub-minute offsets.
 | ||
| (Contributed by Alexander Belopolsky in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=5288">bpo-5288</a>.)</p>
 | ||
| </section>
 | ||
| <section id="dbm">
 | ||
| <h3>dbm<a class="headerlink" href="#dbm" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/dbm.html#module-dbm.dumb" title="dbm.dumb: Portable implementation of the simple DBM interface."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dbm.dumb</span></code></a> now supports reading read-only files and no longer writes the
 | ||
| index file when it is not changed.</p>
 | ||
| </section>
 | ||
| <section id="decimal">
 | ||
| <h3>decimal<a class="headerlink" href="#decimal" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/decimal.html#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> module now uses <a class="reference internal" href="#whatsnew37-pep567"><span class="std std-ref">context variables</span></a>
 | ||
| to store the decimal context.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32630">bpo-32630</a>.)</p>
 | ||
| </section>
 | ||
| <section id="dis">
 | ||
| <h3>dis<a class="headerlink" href="#dis" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/dis.html#dis.dis" title="dis.dis"><code class="xref py py-func docutils literal notranslate"><span class="pre">dis()</span></code></a> function is now able to
 | ||
| disassemble nested code objects (the code of comprehensions, generator
 | ||
| expressions and nested functions, and the code used for building nested
 | ||
| classes).  The maximum depth of disassembly recursion is controlled by
 | ||
| the new <em>depth</em> parameter.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=11822">bpo-11822</a>.)</p>
 | ||
| </section>
 | ||
| <section id="distutils">
 | ||
| <h3>distutils<a class="headerlink" href="#distutils" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="docutils literal notranslate"><span class="pre">README.rst</span></code> is now included in the list of distutils standard READMEs and
 | ||
| therefore included in source distributions.
 | ||
| (Contributed by Ryan Gonzalez in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=11913">bpo-11913</a>.)</p>
 | ||
| </section>
 | ||
| <section id="enum">
 | ||
| <h3>enum<a class="headerlink" href="#enum" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/enum.html#enum.Enum" title="enum.Enum"><code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></a> learned the new <code class="docutils literal notranslate"><span class="pre">_ignore_</span></code> class property,
 | ||
| which allows listing the names of properties which should not become
 | ||
| enum members.
 | ||
| (Contributed by Ethan Furman in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31801">bpo-31801</a>.)</p>
 | ||
| <p>In Python 3.8, attempting to check for non-Enum objects in <code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code>
 | ||
| classes will raise a <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> (e.g. <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">in</span> <span class="pre">Color</span></code>); similarly,
 | ||
| attempting to check for non-Flag objects in a <code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code> member will
 | ||
| raise <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> (e.g. <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">in</span> <span class="pre">Perm.RW</span></code>); currently, both operations
 | ||
| return <a class="reference internal" href="../library/constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> instead and are deprecated.
 | ||
| (Contributed by Ethan Furman in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33217">bpo-33217</a>.)</p>
 | ||
| </section>
 | ||
| <section id="functools">
 | ||
| <h3>functools<a class="headerlink" href="#functools" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/functools.html#functools.singledispatch" title="functools.singledispatch"><code class="xref py py-func docutils literal notranslate"><span class="pre">functools.singledispatch()</span></code></a> now supports registering implementations
 | ||
| using type annotations.
 | ||
| (Contributed by Łukasz Langa in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32227">bpo-32227</a>.)</p>
 | ||
| </section>
 | ||
| <section id="gc">
 | ||
| <h3>gc<a class="headerlink" href="#gc" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/gc.html#gc.freeze" title="gc.freeze"><code class="xref py py-func docutils literal notranslate"><span class="pre">gc.freeze()</span></code></a> function allows freezing all objects tracked
 | ||
| by the garbage collector and excluding them from future collections.
 | ||
| This can be used before a POSIX <code class="docutils literal notranslate"><span class="pre">fork()</span></code> call to make the GC copy-on-write
 | ||
| friendly or to speed up collection.  The new <a class="reference internal" href="../library/gc.html#gc.unfreeze" title="gc.unfreeze"><code class="xref py py-func docutils literal notranslate"><span class="pre">gc.unfreeze()</span></code></a> functions
 | ||
| reverses this operation.  Additionally, <a class="reference internal" href="../library/gc.html#gc.get_freeze_count" title="gc.get_freeze_count"><code class="xref py py-func docutils literal notranslate"><span class="pre">gc.get_freeze_count()</span></code></a> can
 | ||
| be used to obtain the number of frozen objects.
 | ||
| (Contributed by Li Zekun in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31558">bpo-31558</a>.)</p>
 | ||
| </section>
 | ||
| <section id="hmac">
 | ||
| <h3>hmac<a class="headerlink" href="#hmac" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/hmac.html#module-hmac" title="hmac: Keyed-Hashing for Message Authentication (HMAC) implementation"><code class="xref py py-mod docutils literal notranslate"><span class="pre">hmac</span></code></a> module now has an optimized one-shot <a class="reference internal" href="../library/hmac.html#hmac.digest" title="hmac.digest"><code class="xref py py-func docutils literal notranslate"><span class="pre">digest()</span></code></a>
 | ||
| function, which is up to three times faster than <code class="xref py py-func docutils literal notranslate"><span class="pre">HMAC()</span></code>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32433">bpo-32433</a>.)</p>
 | ||
| </section>
 | ||
| <section id="http-client">
 | ||
| <h3>http.client<a class="headerlink" href="#http-client" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/http.client.html#http.client.HTTPConnection" title="http.client.HTTPConnection"><code class="xref py py-class docutils literal notranslate"><span class="pre">HTTPConnection</span></code></a> and <a class="reference internal" href="../library/http.client.html#http.client.HTTPSConnection" title="http.client.HTTPSConnection"><code class="xref py py-class docutils literal notranslate"><span class="pre">HTTPSConnection</span></code></a>
 | ||
| now support the new <em>blocksize</em> argument for improved upload throughput.
 | ||
| (Contributed by Nir Soffer in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31945">bpo-31945</a>.)</p>
 | ||
| </section>
 | ||
| <section id="http-server">
 | ||
| <h3>http.server<a class="headerlink" href="#http-server" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/http.server.html#http.server.SimpleHTTPRequestHandler" title="http.server.SimpleHTTPRequestHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">SimpleHTTPRequestHandler</span></code></a> now supports the HTTP
 | ||
| <code class="docutils literal notranslate"><span class="pre">If-Modified-Since</span></code> header.  The server returns the 304 response status if
 | ||
| the target file was not modified after the time specified in the header.
 | ||
| (Contributed by Pierre Quentel in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29654">bpo-29654</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/http.server.html#http.server.SimpleHTTPRequestHandler" title="http.server.SimpleHTTPRequestHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">SimpleHTTPRequestHandler</span></code></a> accepts the new <em>directory</em>
 | ||
| argument, in addition to the new <code class="docutils literal notranslate"><span class="pre">--directory</span></code> command line argument.
 | ||
| With this parameter, the server serves the specified directory, by default it
 | ||
| uses the current working directory.
 | ||
| (Contributed by Stéphane Wirtel and Julien Palard in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28707">bpo-28707</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/http.server.html#http.server.ThreadingHTTPServer" title="http.server.ThreadingHTTPServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThreadingHTTPServer</span></code></a> class
 | ||
| uses threads to handle requests using <code class="xref py py-class docutils literal notranslate"><span class="pre">ThreadingMixin</span></code>.
 | ||
| It is used when <code class="docutils literal notranslate"><span class="pre">http.server</span></code> is run with <code class="docutils literal notranslate"><span class="pre">-m</span></code>.
 | ||
| (Contributed by Julien Palard in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31639">bpo-31639</a>.)</p>
 | ||
| </section>
 | ||
| <section id="idlelib-and-idle">
 | ||
| <h3>idlelib and IDLE<a class="headerlink" href="#idlelib-and-idle" title="Link to this heading">¶</a></h3>
 | ||
| <p>Multiple fixes for autocompletion. (Contributed by Louie Lu in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=15786">bpo-15786</a>.)</p>
 | ||
| <p>Module Browser (on the File menu, formerly called Class Browser),
 | ||
| now displays nested functions and classes in addition to top-level
 | ||
| functions and classes.
 | ||
| (Contributed by Guilherme Polo, Cheryl Sabella, and Terry Jan Reedy
 | ||
| in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=1612262">bpo-1612262</a>.)</p>
 | ||
| <p>The Settings dialog (Options, Configure IDLE) has been partly rewritten
 | ||
| to improve both appearance and function.
 | ||
| (Contributed by Cheryl Sabella and Terry Jan Reedy in multiple issues.)</p>
 | ||
| <p>The font sample now includes a selection of non-Latin characters so that
 | ||
| users can better see the effect of selecting a particular font.
 | ||
| (Contributed by Terry Jan Reedy in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=13802">bpo-13802</a>.)
 | ||
| The sample can be edited to include other characters.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31860">bpo-31860</a>.)</p>
 | ||
| <p>The IDLE features formerly implemented as extensions have been reimplemented
 | ||
| as normal features.  Their settings have been moved from the Extensions tab
 | ||
| to other dialog tabs.
 | ||
| (Contributed by Charles Wohlganger and Terry Jan Reedy in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27099">bpo-27099</a>.)</p>
 | ||
| <p>Editor code context option revised.  Box displays all context lines up to
 | ||
| maxlines.  Clicking on a context line jumps the editor to that line.  Context
 | ||
| colors for custom themes is added to Highlights tab of Settings dialog.
 | ||
| (Contributed by Cheryl Sabella and Terry Jan Reedy in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33642">bpo-33642</a>,
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33768">bpo-33768</a>, and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33679">bpo-33679</a>.)</p>
 | ||
| <p>On Windows, a new API call tells Windows that tk scales for DPI. On Windows
 | ||
| 8.1+ or 10, with DPI compatibility properties of the Python binary
 | ||
| unchanged, and a monitor resolution greater than 96 DPI, this should
 | ||
| make text and lines sharper.  It should otherwise have no effect.
 | ||
| (Contributed by Terry Jan Reedy in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33656">bpo-33656</a>.)</p>
 | ||
| <p>New in 3.7.1:</p>
 | ||
| <p>Output over N lines (50 by default) is squeezed down to a button.
 | ||
| N can be changed in the PyShell section of the General page of the
 | ||
| Settings dialog.  Fewer, but possibly extra long, lines can be squeezed by
 | ||
| right clicking on the output.  Squeezed output can be expanded in place
 | ||
| by double-clicking the button or into the clipboard or a separate window
 | ||
| by right-clicking the button.  (Contributed by Tal Einat in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=1529353">bpo-1529353</a>.)</p>
 | ||
| <p>The changes above have been backported to 3.6 maintenance releases.</p>
 | ||
| <p>NEW in 3.7.4:</p>
 | ||
| <p>Add “Run Customized” to the Run menu to run a module with customized
 | ||
| settings. Any command line arguments entered are added to sys.argv.
 | ||
| They re-appear in the box for the next customized run.  One can also
 | ||
| suppress the normal Shell main module restart.  (Contributed by Cheryl
 | ||
| Sabella, Terry Jan Reedy, and others in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=5680">bpo-5680</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=37627">bpo-37627</a>.)</p>
 | ||
| <p>New in 3.7.5:</p>
 | ||
| <p>Add optional line numbers for IDLE editor windows. Windows
 | ||
| open without line numbers unless set otherwise in the General
 | ||
| tab of the configuration dialog.  Line numbers for an existing
 | ||
| window are shown and hidden in the Options menu.
 | ||
| (Contributed by Tal Einat and Saimadhav Heblikar in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=17535">bpo-17535</a>.)</p>
 | ||
| </section>
 | ||
| <section id="importlib">
 | ||
| <h3>importlib<a class="headerlink" href="#importlib" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/importlib.html#importlib.abc.ResourceReader" title="importlib.abc.ResourceReader"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.abc.ResourceReader</span></code></a> ABC was introduced to
 | ||
| support the loading of resources from packages.  See also
 | ||
| <a class="reference internal" href="#whatsnew37-importlib-resources"><span class="std std-ref">importlib.resources</span></a>.
 | ||
| (Contributed by Barry Warsaw, Brett Cannon in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32248">bpo-32248</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/importlib.html#importlib.reload" title="importlib.reload"><code class="xref py py-func docutils literal notranslate"><span class="pre">importlib.reload()</span></code></a> now raises <a class="reference internal" href="../library/exceptions.html#ModuleNotFoundError" title="ModuleNotFoundError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ModuleNotFoundError</span></code></a> if the module
 | ||
| lacks a spec.
 | ||
| (Contributed by Garvit Khatri in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29851">bpo-29851</a>.)</p>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">importlib.find_spec()</span></code> now raises <a class="reference internal" href="../library/exceptions.html#ModuleNotFoundError" title="ModuleNotFoundError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ModuleNotFoundError</span></code></a> instead of
 | ||
| <a class="reference internal" href="../library/exceptions.html#AttributeError" title="AttributeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">AttributeError</span></code></a> if the specified parent module is not a package (i.e.
 | ||
| lacks a <code class="docutils literal notranslate"><span class="pre">__path__</span></code> attribute).
 | ||
| (Contributed by Milan Oberkirch in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30436">bpo-30436</a>.)</p>
 | ||
| <p>The new <code class="xref py py-func docutils literal notranslate"><span class="pre">importlib.source_hash()</span></code> can be used to compute the hash of
 | ||
| the passed source.  A <a class="reference internal" href="#whatsnew37-pep552"><span class="std std-ref">hash-based .pyc file</span></a>
 | ||
| embeds the value returned by this function.</p>
 | ||
| </section>
 | ||
| <section id="io">
 | ||
| <h3>io<a class="headerlink" href="#io" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/io.html#io.TextIOWrapper.reconfigure" title="io.TextIOWrapper.reconfigure"><code class="xref py py-meth docutils literal notranslate"><span class="pre">TextIOWrapper.reconfigure()</span></code></a>
 | ||
| method can be used to reconfigure the text stream with the new settings.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30526">bpo-30526</a> and
 | ||
| INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=15216">bpo-15216</a>.)</p>
 | ||
| </section>
 | ||
| <section id="ipaddress">
 | ||
| <h3>ipaddress<a class="headerlink" href="#ipaddress" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <code class="docutils literal notranslate"><span class="pre">subnet_of()</span></code> and <code class="docutils literal notranslate"><span class="pre">supernet_of()</span></code> methods of
 | ||
| <a class="reference internal" href="../library/ipaddress.html#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal notranslate"><span class="pre">ipaddress.IPv6Network</span></code></a> and <a class="reference internal" href="../library/ipaddress.html#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal notranslate"><span class="pre">ipaddress.IPv4Network</span></code></a> can
 | ||
| be used for network containment tests.
 | ||
| (Contributed by Michel Albert and Cheryl Sabella in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=20825">bpo-20825</a>.)</p>
 | ||
| </section>
 | ||
| <section id="itertools">
 | ||
| <h3>itertools<a class="headerlink" href="#itertools" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/itertools.html#itertools.islice" title="itertools.islice"><code class="xref py py-func docutils literal notranslate"><span class="pre">itertools.islice()</span></code></a> now accepts
 | ||
| <a class="reference internal" href="../reference/datamodel.html#object.__index__" title="object.__index__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">integer-like</span> <span class="pre">objects</span></code></a> as start, stop,
 | ||
| and slice arguments.
 | ||
| (Contributed by Will Roberts in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30537">bpo-30537</a>.)</p>
 | ||
| </section>
 | ||
| <section id="locale">
 | ||
| <h3>locale<a class="headerlink" href="#locale" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <em>monetary</em> argument to <a class="reference internal" href="../library/locale.html#locale.format_string" title="locale.format_string"><code class="xref py py-func docutils literal notranslate"><span class="pre">locale.format_string()</span></code></a> can be used
 | ||
| to make the conversion use monetary thousands separators and
 | ||
| grouping strings.  (Contributed by Garvit in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10379">bpo-10379</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/locale.html#locale.getpreferredencoding" title="locale.getpreferredencoding"><code class="xref py py-func docutils literal notranslate"><span class="pre">locale.getpreferredencoding()</span></code></a> function now always returns <code class="docutils literal notranslate"><span class="pre">'UTF-8'</span></code>
 | ||
| on Android or when in the <a class="reference internal" href="#whatsnew37-pep540"><span class="std std-ref">forced UTF-8 mode</span></a>.</p>
 | ||
| </section>
 | ||
| <section id="logging">
 | ||
| <h3>logging<a class="headerlink" href="#logging" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/logging.html#logging.Logger" title="logging.Logger"><code class="xref py py-class docutils literal notranslate"><span class="pre">Logger</span></code></a> instances can now be pickled.
 | ||
| (Contributed by Vinay Sajip in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30520">bpo-30520</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/logging.handlers.html#logging.StreamHandler.setStream" title="logging.StreamHandler.setStream"><code class="xref py py-meth docutils literal notranslate"><span class="pre">StreamHandler.setStream()</span></code></a>
 | ||
| method can be used to replace the logger stream after handler creation.
 | ||
| (Contributed by Vinay Sajip in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30522">bpo-30522</a>.)</p>
 | ||
| <p>It is now possible to specify keyword arguments to handler constructors in
 | ||
| configuration passed to <a class="reference internal" href="../library/logging.config.html#logging.config.fileConfig" title="logging.config.fileConfig"><code class="xref py py-func docutils literal notranslate"><span class="pre">logging.config.fileConfig()</span></code></a>.
 | ||
| (Contributed by Preston Landers in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31080">bpo-31080</a>.)</p>
 | ||
| </section>
 | ||
| <section id="math">
 | ||
| <h3>math<a class="headerlink" href="#math" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/math.html#math.remainder" title="math.remainder"><code class="xref py py-func docutils literal notranslate"><span class="pre">math.remainder()</span></code></a> function implements the IEEE 754-style remainder
 | ||
| operation.  (Contributed by Mark Dickinson in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29962">bpo-29962</a>.)</p>
 | ||
| </section>
 | ||
| <section id="mimetypes">
 | ||
| <h3>mimetypes<a class="headerlink" href="#mimetypes" title="Link to this heading">¶</a></h3>
 | ||
| <p>The MIME type of .bmp has been changed from <code class="docutils literal notranslate"><span class="pre">'image/x-ms-bmp'</span></code> to
 | ||
| <code class="docutils literal notranslate"><span class="pre">'image/bmp'</span></code>.
 | ||
| (Contributed by Nitish Chandra in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=22589">bpo-22589</a>.)</p>
 | ||
| </section>
 | ||
| <section id="msilib">
 | ||
| <h3>msilib<a class="headerlink" href="#msilib" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <code class="xref py py-meth docutils literal notranslate"><span class="pre">Database.Close()</span></code> method can be used
 | ||
| to close the <abbr>MSI</abbr> database.
 | ||
| (Contributed by Berker Peksag in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=20486">bpo-20486</a>.)</p>
 | ||
| </section>
 | ||
| <section id="multiprocessing">
 | ||
| <h3>multiprocessing<a class="headerlink" href="#multiprocessing" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/multiprocessing.html#multiprocessing.Process.close" title="multiprocessing.Process.close"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Process.close()</span></code></a> method
 | ||
| explicitly closes the process object and releases all resources associated
 | ||
| with it.  <a class="reference internal" href="../library/exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised if the underlying process is still
 | ||
| running.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30596">bpo-30596</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/multiprocessing.html#multiprocessing.Process.kill" title="multiprocessing.Process.kill"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Process.kill()</span></code></a> method can
 | ||
| be used to terminate the process using the <code class="xref py py-data docutils literal notranslate"><span class="pre">SIGKILL</span></code> signal on Unix.
 | ||
| (Contributed by Vitor Pereira in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30794">bpo-30794</a>.)</p>
 | ||
| <p>Non-daemonic threads created by <a class="reference internal" href="../library/multiprocessing.html#multiprocessing.Process" title="multiprocessing.Process"><code class="xref py py-class docutils literal notranslate"><span class="pre">Process</span></code></a> are now
 | ||
| joined on process exit.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=18966">bpo-18966</a>.)</p>
 | ||
| </section>
 | ||
| <section id="os">
 | ||
| <h3>os<a class="headerlink" href="#os" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/os.html#os.fwalk" title="os.fwalk"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.fwalk()</span></code></a> now accepts the <em>path</em> argument as <a class="reference internal" href="../library/stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28682">bpo-28682</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/os.html#os.scandir" title="os.scandir"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.scandir()</span></code></a> gained support for <a class="reference internal" href="../library/os.html#path-fd"><span class="std std-ref">file descriptors</span></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25996">bpo-25996</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/os.html#os.register_at_fork" title="os.register_at_fork"><code class="xref py py-func docutils literal notranslate"><span class="pre">register_at_fork()</span></code></a> function allows registering Python
 | ||
| callbacks to be executed at process fork.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=16500">bpo-16500</a>.)</p>
 | ||
| <p>Added <a class="reference internal" href="../library/os.html#os.preadv" title="os.preadv"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.preadv()</span></code></a> (combine the functionality of <a class="reference internal" href="../library/os.html#os.readv" title="os.readv"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.readv()</span></code></a> and
 | ||
| <a class="reference internal" href="../library/os.html#os.pread" title="os.pread"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.pread()</span></code></a>) and <a class="reference internal" href="../library/os.html#os.pwritev" title="os.pwritev"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.pwritev()</span></code></a> functions (combine the functionality
 | ||
| of <a class="reference internal" href="../library/os.html#os.writev" title="os.writev"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.writev()</span></code></a> and <a class="reference internal" href="../library/os.html#os.pwrite" title="os.pwrite"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.pwrite()</span></code></a>). (Contributed by Pablo Galindo in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31368">bpo-31368</a>.)</p>
 | ||
| <p>The mode argument of <a class="reference internal" href="../library/os.html#os.makedirs" title="os.makedirs"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.makedirs()</span></code></a> no longer affects the file
 | ||
| permission bits of newly created intermediate-level directories.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=19930">bpo-19930</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/os.html#os.dup2" title="os.dup2"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.dup2()</span></code></a> now returns the new file descriptor.  Previously, <code class="docutils literal notranslate"><span class="pre">None</span></code>
 | ||
| was always returned.
 | ||
| (Contributed by Benjamin Peterson in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32441">bpo-32441</a>.)</p>
 | ||
| <p>The structure returned by <a class="reference internal" href="../library/os.html#os.stat" title="os.stat"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.stat()</span></code></a> now contains the
 | ||
| <a class="reference internal" href="../library/os.html#os.stat_result.st_fstype" title="os.stat_result.st_fstype"><code class="xref py py-attr docutils literal notranslate"><span class="pre">st_fstype</span></code></a> attribute on Solaris and its derivatives.
 | ||
| (Contributed by Jesús Cea Avión in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32659">bpo-32659</a>.)</p>
 | ||
| </section>
 | ||
| <section id="pathlib">
 | ||
| <h3>pathlib<a class="headerlink" href="#pathlib" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/pathlib.html#pathlib.Path.is_mount" title="pathlib.Path.is_mount"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Path.is_mount()</span></code></a> method is now available
 | ||
| on POSIX systems and can be used to determine whether a path is a mount point.
 | ||
| (Contributed by Cooper Ry Lees in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30897">bpo-30897</a>.)</p>
 | ||
| </section>
 | ||
| <section id="pdb">
 | ||
| <h3>pdb<a class="headerlink" href="#pdb" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/pdb.html#pdb.set_trace" title="pdb.set_trace"><code class="xref py py-func docutils literal notranslate"><span class="pre">pdb.set_trace()</span></code></a> now takes an optional <em>header</em> keyword-only
 | ||
| argument.  If given, it is printed to the console just before debugging
 | ||
| begins.  (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31389">bpo-31389</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/pdb.html#module-pdb" title="pdb: The Python debugger for interactive interpreters."><code class="xref py py-mod docutils literal notranslate"><span class="pre">pdb</span></code></a> command line now accepts <code class="docutils literal notranslate"><span class="pre">-m</span> <span class="pre">module_name</span></code> as an alternative to
 | ||
| script file.  (Contributed by Mario Corchero in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32206">bpo-32206</a>.)</p>
 | ||
| </section>
 | ||
| <section id="py-compile">
 | ||
| <h3>py_compile<a class="headerlink" href="#py-compile" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/py_compile.html#py_compile.compile" title="py_compile.compile"><code class="xref py py-func docutils literal notranslate"><span class="pre">py_compile.compile()</span></code></a> – and by extension, <a class="reference internal" href="../library/compileall.html#module-compileall" title="compileall: Tools for byte-compiling all Python source files in a directory tree."><code class="xref py py-mod docutils literal notranslate"><span class="pre">compileall</span></code></a> – now
 | ||
| respects the <span class="target" id="index-32"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">SOURCE_DATE_EPOCH</span></code> environment variable by
 | ||
| unconditionally creating <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files for hash-based validation.
 | ||
| This allows for guaranteeing
 | ||
| <a class="reference external" href="https://reproducible-builds.org/">reproducible builds</a> of <code class="docutils literal notranslate"><span class="pre">.pyc</span></code>
 | ||
| files when they are created eagerly. (Contributed by Bernhard M. Wiedemann
 | ||
| in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29708">bpo-29708</a>.)</p>
 | ||
| </section>
 | ||
| <section id="pydoc">
 | ||
| <h3>pydoc<a class="headerlink" href="#pydoc" title="Link to this heading">¶</a></h3>
 | ||
| <p>The pydoc server can now bind to an arbitrary hostname specified by the
 | ||
| new <code class="docutils literal notranslate"><span class="pre">-n</span></code> command-line argument.
 | ||
| (Contributed by Feanil Patel in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31128">bpo-31128</a>.)</p>
 | ||
| </section>
 | ||
| <section id="queue">
 | ||
| <h3>queue<a class="headerlink" href="#queue" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/queue.html#queue.SimpleQueue" title="queue.SimpleQueue"><code class="xref py py-class docutils literal notranslate"><span class="pre">SimpleQueue</span></code></a> class is an unbounded <abbr>FIFO</abbr> queue.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=14976">bpo-14976</a>.)</p>
 | ||
| </section>
 | ||
| <section id="re">
 | ||
| <h3>re<a class="headerlink" href="#re" title="Link to this heading">¶</a></h3>
 | ||
| <p>The flags <a class="reference internal" href="../library/re.html#re.ASCII" title="re.ASCII"><code class="xref py py-const docutils literal notranslate"><span class="pre">re.ASCII</span></code></a>, <a class="reference internal" href="../library/re.html#re.LOCALE" title="re.LOCALE"><code class="xref py py-const docutils literal notranslate"><span class="pre">re.LOCALE</span></code></a> and <a class="reference internal" href="../library/re.html#re.UNICODE" title="re.UNICODE"><code class="xref py py-const docutils literal notranslate"><span class="pre">re.UNICODE</span></code></a>
 | ||
| can be set within the scope of a group.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31690">bpo-31690</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/re.html#re.split" title="re.split"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.split()</span></code></a> now supports splitting on a pattern like <code class="docutils literal notranslate"><span class="pre">r'\b'</span></code>,
 | ||
| <code class="docutils literal notranslate"><span class="pre">'^$'</span></code> or <code class="docutils literal notranslate"><span class="pre">(?=-)</span></code> that matches an empty string.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25054">bpo-25054</a>.)</p>
 | ||
| <p>Regular expressions compiled with the <a class="reference internal" href="../library/re.html#re.LOCALE" title="re.LOCALE"><code class="xref py py-const docutils literal notranslate"><span class="pre">re.LOCALE</span></code></a> flag no longer
 | ||
| depend on the locale at compile time.  Locale settings are applied only
 | ||
| when the compiled regular expression is used.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30215">bpo-30215</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/exceptions.html#FutureWarning" title="FutureWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FutureWarning</span></code></a> is now emitted if a regular expression contains
 | ||
| character set constructs that will change semantically in the future,
 | ||
| such as nested sets and set operations.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30349">bpo-30349</a>.)</p>
 | ||
| <p>Compiled regular expression and match objects can now be copied
 | ||
| using <a class="reference internal" href="../library/copy.html#copy.copy" title="copy.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy.copy()</span></code></a> and <a class="reference internal" href="../library/copy.html#copy.deepcopy" title="copy.deepcopy"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy.deepcopy()</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10076">bpo-10076</a>.)</p>
 | ||
| </section>
 | ||
| <section id="signal">
 | ||
| <h3>signal<a class="headerlink" href="#signal" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <em>warn_on_full_buffer</em> argument to the <a class="reference internal" href="../library/signal.html#signal.set_wakeup_fd" title="signal.set_wakeup_fd"><code class="xref py py-func docutils literal notranslate"><span class="pre">signal.set_wakeup_fd()</span></code></a>
 | ||
| function makes it possible to specify whether Python prints a warning on
 | ||
| stderr when the wakeup buffer overflows.
 | ||
| (Contributed by Nathaniel J. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30050">bpo-30050</a>.)</p>
 | ||
| </section>
 | ||
| <section id="socket">
 | ||
| <h3>socket<a class="headerlink" href="#socket" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/socket.html#socket.socket.getblocking" title="socket.socket.getblocking"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.getblocking()</span></code></a> method
 | ||
| returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if the socket is in blocking mode and <code class="docutils literal notranslate"><span class="pre">False</span></code> otherwise.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32373">bpo-32373</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/socket.html#socket.close" title="socket.close"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.close()</span></code></a> function closes the passed socket file descriptor.
 | ||
| This function should be used instead of <a class="reference internal" href="../library/os.html#os.close" title="os.close"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.close()</span></code></a> for better
 | ||
| compatibility across platforms.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32454">bpo-32454</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/socket.html#module-socket" title="socket: Low-level networking interface."><code class="xref py py-mod docutils literal notranslate"><span class="pre">socket</span></code></a> module now exposes the <code class="xref py py-const docutils literal notranslate"><span class="pre">socket.TCP_CONGESTION</span></code>
 | ||
| (Linux 2.6.13), <code class="xref py py-const docutils literal notranslate"><span class="pre">socket.TCP_USER_TIMEOUT</span></code> (Linux 2.6.37), and
 | ||
| <code class="xref py py-const docutils literal notranslate"><span class="pre">socket.TCP_NOTSENT_LOWAT</span></code> (Linux 3.12) constants.
 | ||
| (Contributed by Omar Sandoval in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=26273">bpo-26273</a> and
 | ||
| Nathaniel J. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29728">bpo-29728</a>.)</p>
 | ||
| <p>Support for <a class="reference internal" href="../library/socket.html#socket.AF_VSOCK" title="socket.AF_VSOCK"><code class="xref py py-const docutils literal notranslate"><span class="pre">socket.AF_VSOCK</span></code></a> sockets has been added to allow
 | ||
| communication between virtual machines and their hosts.
 | ||
| (Contributed by Cathy Avery in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27584">bpo-27584</a>.)</p>
 | ||
| <p>Sockets now auto-detect family, type and protocol from file descriptor
 | ||
| by default.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28134">bpo-28134</a>.)</p>
 | ||
| </section>
 | ||
| <section id="socketserver">
 | ||
| <h3>socketserver<a class="headerlink" href="#socketserver" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-meth docutils literal notranslate"><span class="pre">socketserver.ThreadingMixIn.server_close()</span></code> now waits until all non-daemon
 | ||
| threads complete. <code class="xref py py-meth docutils literal notranslate"><span class="pre">socketserver.ForkingMixIn.server_close()</span></code> now waits
 | ||
| until all child processes complete.</p>
 | ||
| <p>Add a new <code class="xref py py-attr docutils literal notranslate"><span class="pre">socketserver.ForkingMixIn.block_on_close</span></code> class attribute to
 | ||
| <a class="reference internal" href="../library/socketserver.html#socketserver.ForkingMixIn" title="socketserver.ForkingMixIn"><code class="xref py py-class docutils literal notranslate"><span class="pre">socketserver.ForkingMixIn</span></code></a> and <a class="reference internal" href="../library/socketserver.html#socketserver.ThreadingMixIn" title="socketserver.ThreadingMixIn"><code class="xref py py-class docutils literal notranslate"><span class="pre">socketserver.ThreadingMixIn</span></code></a>
 | ||
| classes. Set the class attribute to <code class="docutils literal notranslate"><span class="pre">False</span></code> to get the pre-3.7 behaviour.</p>
 | ||
| </section>
 | ||
| <section id="sqlite3">
 | ||
| <h3>sqlite3<a class="headerlink" href="#sqlite3" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/sqlite3.html#sqlite3.Connection" title="sqlite3.Connection"><code class="xref py py-class docutils literal notranslate"><span class="pre">sqlite3.Connection</span></code></a> now exposes the <a class="reference internal" href="../library/sqlite3.html#sqlite3.Connection.backup" title="sqlite3.Connection.backup"><code class="xref py py-meth docutils literal notranslate"><span class="pre">backup()</span></code></a>
 | ||
| method when the underlying SQLite library is at version 3.6.11 or higher.
 | ||
| (Contributed by Lele Gaifax in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27645">bpo-27645</a>.)</p>
 | ||
| <p>The <em>database</em> argument of <a class="reference internal" href="../library/sqlite3.html#sqlite3.connect" title="sqlite3.connect"><code class="xref py py-func docutils literal notranslate"><span class="pre">sqlite3.connect()</span></code></a> now accepts any
 | ||
| <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>, instead of just a string.
 | ||
| (Contributed by Anders Lorentsen in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31843">bpo-31843</a>.)</p>
 | ||
| </section>
 | ||
| <section id="ssl">
 | ||
| <h3>ssl<a class="headerlink" href="#ssl" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/ssl.html#module-ssl" title="ssl: TLS/SSL wrapper for socket objects"><code class="xref py py-mod docutils literal notranslate"><span class="pre">ssl</span></code></a> module now uses OpenSSL’s builtin API instead of
 | ||
| <code class="xref py py-func docutils literal notranslate"><span class="pre">match_hostname()</span></code> to check a host name or an IP address.  Values
 | ||
| are validated during TLS handshake.  Any certificate validation error
 | ||
| including failing the host name check now raises
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLCertVerificationError" title="ssl.SSLCertVerificationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SSLCertVerificationError</span></code></a> and aborts the handshake with a proper
 | ||
| TLS Alert message.  The new exception contains additional information.
 | ||
| Host name validation can be customized with
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.hostname_checks_common_name" title="ssl.SSLContext.hostname_checks_common_name"><code class="xref py py-attr docutils literal notranslate"><span class="pre">SSLContext.hostname_checks_common_name</span></code></a>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31399">bpo-31399</a>.)</p>
 | ||
| <div class="admonition note">
 | ||
| <p class="admonition-title">Note</p>
 | ||
| <p>The improved host name check requires a <em>libssl</em> implementation compatible
 | ||
| with OpenSSL 1.0.2 or 1.1.  Consequently, OpenSSL 0.9.8 and 1.0.1 are no
 | ||
| longer supported (see <a class="reference internal" href="#platform-support-removals"><span class="std std-ref">Platform Support Removals</span></a> for more details).
 | ||
| The ssl module is mostly compatible with LibreSSL 2.7.2 and newer.</p>
 | ||
| </div>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">ssl</span></code> module no longer sends IP addresses in SNI TLS extension.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32185">bpo-32185</a>.)</p>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">match_hostname()</span></code> no longer supports partial wildcards like
 | ||
| <code class="docutils literal notranslate"><span class="pre">www*.example.org</span></code>.
 | ||
| (Contributed by Mandeep Singh in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=23033">bpo-23033</a> and Christian Heimes in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31399">bpo-31399</a>.)</p>
 | ||
| <p>The default cipher suite selection of the <code class="docutils literal notranslate"><span class="pre">ssl</span></code> module now uses a blacklist
 | ||
| approach rather than a hard-coded whitelist.  Python no longer re-enables
 | ||
| ciphers that have been blocked by OpenSSL security updates.  Default cipher
 | ||
| suite selection can be configured at compile time.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31429">bpo-31429</a>.)</p>
 | ||
| <p>Validation of server certificates containing internationalized domain names
 | ||
| (IDNs) is now supported.  As part of this change, the
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLSocket.server_hostname" title="ssl.SSLSocket.server_hostname"><code class="xref py py-attr docutils literal notranslate"><span class="pre">SSLSocket.server_hostname</span></code></a> attribute
 | ||
| now stores the expected hostname in A-label form (<code class="docutils literal notranslate"><span class="pre">"xn--pythn-mua.org"</span></code>),
 | ||
| rather than the U-label form (<code class="docutils literal notranslate"><span class="pre">"pythön.org"</span></code>).  (Contributed by
 | ||
| Nathaniel J. Smith and Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28414">bpo-28414</a>.)</p>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">ssl</span></code> module has preliminary and experimental support for TLS 1.3 and
 | ||
| OpenSSL 1.1.1.  At the time of Python 3.7.0 release, OpenSSL 1.1.1 is still
 | ||
| under development and TLS 1.3 hasn’t been finalized yet.  The TLS 1.3
 | ||
| handshake and protocol behaves slightly differently than TLS 1.2 and earlier,
 | ||
| see <a class="reference internal" href="../library/ssl.html#ssl-tlsv1-3"><span class="std std-ref">TLS 1.3</span></a>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32947">bpo-32947</a>, <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=20995">bpo-20995</a>,
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29136">bpo-29136</a>, <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30622">bpo-30622</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33618">bpo-33618</a>)</p>
 | ||
| <p><a class="reference internal" href="../library/ssl.html#ssl.SSLSocket" title="ssl.SSLSocket"><code class="xref py py-class docutils literal notranslate"><span class="pre">SSLSocket</span></code></a> and <a class="reference internal" href="../library/ssl.html#ssl.SSLObject" title="ssl.SSLObject"><code class="xref py py-class docutils literal notranslate"><span class="pre">SSLObject</span></code></a> no longer have a public
 | ||
| constructor.  Direct instantiation was never a documented and supported
 | ||
| feature.  Instances must be created with <a class="reference internal" href="../library/ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">SSLContext</span></code></a> methods
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.wrap_socket" title="ssl.SSLContext.wrap_socket"><code class="xref py py-meth docutils literal notranslate"><span class="pre">wrap_socket()</span></code></a> and <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.wrap_bio" title="ssl.SSLContext.wrap_bio"><code class="xref py py-meth docutils literal notranslate"><span class="pre">wrap_bio()</span></code></a>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32951">bpo-32951</a>)</p>
 | ||
| <p>OpenSSL 1.1 APIs for setting the minimum and maximum TLS protocol version are
 | ||
| available as <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.minimum_version" title="ssl.SSLContext.minimum_version"><code class="xref py py-attr docutils literal notranslate"><span class="pre">SSLContext.minimum_version</span></code></a>
 | ||
| and <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.maximum_version" title="ssl.SSLContext.maximum_version"><code class="xref py py-attr docutils literal notranslate"><span class="pre">SSLContext.maximum_version</span></code></a>.
 | ||
| Supported protocols are indicated by several new flags, such as
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.HAS_TLSv1_1" title="ssl.HAS_TLSv1_1"><code class="xref py py-data docutils literal notranslate"><span class="pre">HAS_TLSv1_1</span></code></a>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32609">bpo-32609</a>.)</p>
 | ||
| <p>Added <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.post_handshake_auth" title="ssl.SSLContext.post_handshake_auth"><code class="xref py py-attr docutils literal notranslate"><span class="pre">ssl.SSLContext.post_handshake_auth</span></code></a> to enable and
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLSocket.verify_client_post_handshake" title="ssl.SSLSocket.verify_client_post_handshake"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ssl.SSLSocket.verify_client_post_handshake()</span></code></a> to initiate TLS 1.3
 | ||
| post-handshake authentication.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://github.com/python/cpython/issues/78851">gh-78851</a>.)</p>
 | ||
| </section>
 | ||
| <section id="string">
 | ||
| <h3>string<a class="headerlink" href="#string" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/string.html#string.Template" title="string.Template"><code class="xref py py-class docutils literal notranslate"><span class="pre">string.Template</span></code></a> now lets you to optionally modify the regular
 | ||
| expression pattern for braced placeholders and non-braced placeholders
 | ||
| separately.  (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=1198569">bpo-1198569</a>.)</p>
 | ||
| </section>
 | ||
| <section id="subprocess">
 | ||
| <h3>subprocess<a class="headerlink" href="#subprocess" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/subprocess.html#subprocess.run" title="subprocess.run"><code class="xref py py-func docutils literal notranslate"><span class="pre">subprocess.run()</span></code></a> function accepts the new <em>capture_output</em>
 | ||
| keyword argument.  When true, stdout and stderr will be captured.
 | ||
| This is equivalent to passing <a class="reference internal" href="../library/subprocess.html#subprocess.PIPE" title="subprocess.PIPE"><code class="xref py py-const docutils literal notranslate"><span class="pre">subprocess.PIPE</span></code></a> as <em>stdout</em> and
 | ||
| <em>stderr</em> arguments.
 | ||
| (Contributed by Bo Bayles in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32102">bpo-32102</a>.)</p>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">subprocess.run</span></code> function and the <a class="reference internal" href="../library/subprocess.html#subprocess.Popen" title="subprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">subprocess.Popen</span></code></a> constructor
 | ||
| now accept the <em>text</em> keyword argument as an alias
 | ||
| to <em>universal_newlines</em>.
 | ||
| (Contributed by Andrew Clegg in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31756">bpo-31756</a>.)</p>
 | ||
| <p>On Windows the default for <em>close_fds</em> was changed from <code class="docutils literal notranslate"><span class="pre">False</span></code> to
 | ||
| <code class="docutils literal notranslate"><span class="pre">True</span></code> when redirecting the standard handles.  It’s now possible to set
 | ||
| <em>close_fds</em> to true when redirecting the standard handles.  See
 | ||
| <a class="reference internal" href="../library/subprocess.html#subprocess.Popen" title="subprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">subprocess.Popen</span></code></a>.  This means that <em>close_fds</em> now defaults to
 | ||
| <code class="docutils literal notranslate"><span class="pre">True</span></code> on all supported platforms.
 | ||
| (Contributed by Segev Finer in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=19764">bpo-19764</a>.)</p>
 | ||
| <p>The subprocess module is now more graceful when handling
 | ||
| <a class="reference internal" href="../library/exceptions.html#KeyboardInterrupt" title="KeyboardInterrupt"><code class="xref py py-exc docutils literal notranslate"><span class="pre">KeyboardInterrupt</span></code></a> during <a class="reference internal" href="../library/subprocess.html#subprocess.call" title="subprocess.call"><code class="xref py py-func docutils literal notranslate"><span class="pre">subprocess.call()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/subprocess.html#subprocess.run" title="subprocess.run"><code class="xref py py-func docutils literal notranslate"><span class="pre">subprocess.run()</span></code></a>, or in a <a class="reference internal" href="../library/subprocess.html#subprocess.Popen" title="subprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">Popen</span></code></a>
 | ||
| context manager.  It now waits a short amount of time for the child
 | ||
| to exit, before continuing the handling of the <code class="docutils literal notranslate"><span class="pre">KeyboardInterrupt</span></code>
 | ||
| exception.
 | ||
| (Contributed by Gregory P. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25942">bpo-25942</a>.)</p>
 | ||
| </section>
 | ||
| <section id="sys">
 | ||
| <h3>sys<a class="headerlink" href="#sys" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/sys.html#sys.breakpointhook" title="sys.breakpointhook"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.breakpointhook()</span></code></a> hook function is called by the
 | ||
| built-in <a class="reference internal" href="../library/functions.html#breakpoint" title="breakpoint"><code class="xref py py-func docutils literal notranslate"><span class="pre">breakpoint()</span></code></a>.
 | ||
| (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31353">bpo-31353</a>.)</p>
 | ||
| <p>On Android, the new <a class="reference internal" href="../library/sys.html#sys.getandroidapilevel" title="sys.getandroidapilevel"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.getandroidapilevel()</span></code></a> returns the build-time
 | ||
| Android API version.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28740">bpo-28740</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/sys.html#sys.get_coroutine_origin_tracking_depth" title="sys.get_coroutine_origin_tracking_depth"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.get_coroutine_origin_tracking_depth()</span></code></a> function returns
 | ||
| the current coroutine origin tracking depth, as set by
 | ||
| the new <a class="reference internal" href="../library/sys.html#sys.set_coroutine_origin_tracking_depth" title="sys.set_coroutine_origin_tracking_depth"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.set_coroutine_origin_tracking_depth()</span></code></a>.  <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a>
 | ||
| has been converted to use this new API instead of
 | ||
| the deprecated <code class="xref py py-func docutils literal notranslate"><span class="pre">sys.set_coroutine_wrapper()</span></code>.
 | ||
| (Contributed by Nathaniel J. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32591">bpo-32591</a>.)</p>
 | ||
| </section>
 | ||
| <section id="time">
 | ||
| <h3>time<a class="headerlink" href="#time" title="Link to this heading">¶</a></h3>
 | ||
| <p><span class="target" id="index-33"></span><a class="pep reference external" href="https://peps.python.org/pep-0564/"><strong>PEP 564</strong></a> adds six new functions with nanosecond resolution to the
 | ||
| <a class="reference internal" href="../library/time.html#module-time" title="time: Time access and conversions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">time</span></code></a> module:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.clock_gettime_ns" title="time.clock_gettime_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.clock_gettime_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.clock_settime_ns" title="time.clock_settime_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.clock_settime_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.monotonic_ns" title="time.monotonic_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.monotonic_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.perf_counter_ns" title="time.perf_counter_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.perf_counter_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.process_time_ns" title="time.process_time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.process_time_ns()</span></code></a></p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.time_ns" title="time.time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.time_ns()</span></code></a></p></li>
 | ||
| </ul>
 | ||
| <p>New clock identifiers have been added:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.CLOCK_BOOTTIME" title="time.CLOCK_BOOTTIME"><code class="xref py py-const docutils literal notranslate"><span class="pre">time.CLOCK_BOOTTIME</span></code></a> (Linux): Identical to
 | ||
| <a class="reference internal" href="../library/time.html#time.CLOCK_MONOTONIC" title="time.CLOCK_MONOTONIC"><code class="xref py py-const docutils literal notranslate"><span class="pre">time.CLOCK_MONOTONIC</span></code></a>, except it also includes any time that the
 | ||
| system is suspended.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.CLOCK_PROF" title="time.CLOCK_PROF"><code class="xref py py-const docutils literal notranslate"><span class="pre">time.CLOCK_PROF</span></code></a> (FreeBSD, NetBSD and OpenBSD): High-resolution
 | ||
| per-process CPU timer.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/time.html#time.CLOCK_UPTIME" title="time.CLOCK_UPTIME"><code class="xref py py-const docutils literal notranslate"><span class="pre">time.CLOCK_UPTIME</span></code></a> (FreeBSD, OpenBSD): Time whose absolute value is
 | ||
| the time the system has been running and not suspended, providing accurate
 | ||
| uptime measurement.</p></li>
 | ||
| </ul>
 | ||
| <p>The new <a class="reference internal" href="../library/time.html#time.thread_time" title="time.thread_time"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.thread_time()</span></code></a> and <a class="reference internal" href="../library/time.html#time.thread_time_ns" title="time.thread_time_ns"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.thread_time_ns()</span></code></a> functions
 | ||
| can be used to get per-thread CPU time measurements.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32025">bpo-32025</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/time.html#time.pthread_getcpuclockid" title="time.pthread_getcpuclockid"><code class="xref py py-func docutils literal notranslate"><span class="pre">time.pthread_getcpuclockid()</span></code></a> function returns the clock ID
 | ||
| of the thread-specific CPU-time clock.</p>
 | ||
| </section>
 | ||
| <section id="tkinter">
 | ||
| <h3>tkinter<a class="headerlink" href="#tkinter" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/tkinter.ttk.html#tkinter.ttk.Spinbox" title="tkinter.ttk.Spinbox"><code class="xref py py-class docutils literal notranslate"><span class="pre">tkinter.ttk.Spinbox</span></code></a> class is now available.
 | ||
| (Contributed by Alan Moore in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32585">bpo-32585</a>.)</p>
 | ||
| </section>
 | ||
| <section id="tracemalloc">
 | ||
| <h3>tracemalloc<a class="headerlink" href="#tracemalloc" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/tracemalloc.html#tracemalloc.Traceback" title="tracemalloc.Traceback"><code class="xref py py-class docutils literal notranslate"><span class="pre">tracemalloc.Traceback</span></code></a> behaves more like regular tracebacks,
 | ||
| sorting the frames from oldest to most recent.
 | ||
| <a class="reference internal" href="../library/tracemalloc.html#tracemalloc.Traceback.format" title="tracemalloc.Traceback.format"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Traceback.format()</span></code></a>
 | ||
| now accepts negative <em>limit</em>, truncating the result to the
 | ||
| <code class="docutils literal notranslate"><span class="pre">abs(limit)</span></code> oldest frames.  To get the old behaviour, use
 | ||
| the new <em>most_recent_first</em> argument to <code class="docutils literal notranslate"><span class="pre">Traceback.format()</span></code>.
 | ||
| (Contributed by Jesse Bakker in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32121">bpo-32121</a>.)</p>
 | ||
| </section>
 | ||
| <section id="types">
 | ||
| <h3>types<a class="headerlink" href="#types" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/types.html#types.WrapperDescriptorType" title="types.WrapperDescriptorType"><code class="xref py py-class docutils literal notranslate"><span class="pre">WrapperDescriptorType</span></code></a>,
 | ||
| <a class="reference internal" href="../library/types.html#types.MethodWrapperType" title="types.MethodWrapperType"><code class="xref py py-class docutils literal notranslate"><span class="pre">MethodWrapperType</span></code></a>, <a class="reference internal" href="../library/types.html#types.MethodDescriptorType" title="types.MethodDescriptorType"><code class="xref py py-class docutils literal notranslate"><span class="pre">MethodDescriptorType</span></code></a>,
 | ||
| and <a class="reference internal" href="../library/types.html#types.ClassMethodDescriptorType" title="types.ClassMethodDescriptorType"><code class="xref py py-class docutils literal notranslate"><span class="pre">ClassMethodDescriptorType</span></code></a> classes are now available.
 | ||
| (Contributed by Manuel Krebber and Guido van Rossum in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29377">bpo-29377</a>,
 | ||
| and Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32265">bpo-32265</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/types.html#types.resolve_bases" title="types.resolve_bases"><code class="xref py py-func docutils literal notranslate"><span class="pre">types.resolve_bases()</span></code></a> function resolves MRO entries
 | ||
| dynamically as specified by <span class="target" id="index-34"></span><a class="pep reference external" href="https://peps.python.org/pep-0560/"><strong>PEP 560</strong></a>.
 | ||
| (Contributed by Ivan Levkivskyi in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32717">bpo-32717</a>.)</p>
 | ||
| </section>
 | ||
| <section id="unicodedata">
 | ||
| <h3>unicodedata<a class="headerlink" href="#unicodedata" title="Link to this heading">¶</a></h3>
 | ||
| <p>The internal <a class="reference internal" href="../library/unicodedata.html#module-unicodedata" title="unicodedata: Access the Unicode Database."><code class="xref py py-mod docutils literal notranslate"><span class="pre">unicodedata</span></code></a> database has been upgraded to use <a class="reference external" href="https://www.unicode.org/versions/Unicode11.0.0/">Unicode 11</a>. (Contributed by Benjamin
 | ||
| Peterson.)</p>
 | ||
| </section>
 | ||
| <section id="unittest">
 | ||
| <h3>unittest<a class="headerlink" href="#unittest" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <code class="docutils literal notranslate"><span class="pre">-k</span></code> command-line option allows filtering tests by a name
 | ||
| substring or a Unix shell-like pattern.
 | ||
| For example, <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-m</span> <span class="pre">unittest</span> <span class="pre">-k</span> <span class="pre">foo</span></code> runs
 | ||
| <code class="docutils literal notranslate"><span class="pre">foo_tests.SomeTest.test_something</span></code>, <code class="docutils literal notranslate"><span class="pre">bar_tests.SomeTest.test_foo</span></code>,
 | ||
| but not <code class="docutils literal notranslate"><span class="pre">bar_tests.FooTest.test_something</span></code>.
 | ||
| (Contributed by Jonas Haag in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32071">bpo-32071</a>.)</p>
 | ||
| </section>
 | ||
| <section id="unittest-mock">
 | ||
| <h3>unittest.mock<a class="headerlink" href="#unittest-mock" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="../library/unittest.mock.html#unittest.mock.sentinel" title="unittest.mock.sentinel"><code class="xref py py-const docutils literal notranslate"><span class="pre">sentinel</span></code></a> attributes now preserve their identity
 | ||
| when they are <a class="reference internal" href="../library/copy.html#module-copy" title="copy: Shallow and deep copy operations."><code class="xref py py-mod docutils literal notranslate"><span class="pre">copied</span></code></a> or <a class="reference internal" href="../library/pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal notranslate"><span class="pre">pickled</span></code></a>. (Contributed by
 | ||
| Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=20804">bpo-20804</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../library/unittest.mock.html#unittest.mock.seal" title="unittest.mock.seal"><code class="xref py py-func docutils literal notranslate"><span class="pre">seal()</span></code></a> function allows sealing
 | ||
| <a class="reference internal" href="../library/unittest.mock.html#unittest.mock.Mock" title="unittest.mock.Mock"><code class="xref py py-class docutils literal notranslate"><span class="pre">Mock</span></code></a> instances, which will disallow further creation
 | ||
| of attribute mocks.  The seal is applied recursively to all attributes that
 | ||
| are themselves mocks.
 | ||
| (Contributed by Mario Corchero in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30541">bpo-30541</a>.)</p>
 | ||
| </section>
 | ||
| <section id="urllib-parse">
 | ||
| <h3>urllib.parse<a class="headerlink" href="#urllib-parse" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/urllib.parse.html#urllib.parse.quote" title="urllib.parse.quote"><code class="xref py py-func docutils literal notranslate"><span class="pre">urllib.parse.quote()</span></code></a> has been updated from <span class="target" id="index-35"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2396.html"><strong>RFC 2396</strong></a> to <span class="target" id="index-36"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc3986.html"><strong>RFC 3986</strong></a>,
 | ||
| adding <code class="docutils literal notranslate"><span class="pre">~</span></code> to the set of characters that are never quoted by default.
 | ||
| (Contributed by Christian Theune and Ratnadeep Debnath in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=16285">bpo-16285</a>.)</p>
 | ||
| </section>
 | ||
| <section id="uu">
 | ||
| <h3>uu<a class="headerlink" href="#uu" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <code class="xref py py-func docutils literal notranslate"><span class="pre">uu.encode()</span></code> function now accepts an optional <em>backtick</em>
 | ||
| keyword argument.  When it’s true, zeros are represented by <code class="docutils literal notranslate"><span class="pre">'`'</span></code>
 | ||
| instead of spaces.  (Contributed by Xiang Zhang in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30103">bpo-30103</a>.)</p>
 | ||
| </section>
 | ||
| <section id="uuid">
 | ||
| <h3>uuid<a class="headerlink" href="#uuid" title="Link to this heading">¶</a></h3>
 | ||
| <p>The new <a class="reference internal" href="../library/uuid.html#uuid.UUID.is_safe" title="uuid.UUID.is_safe"><code class="xref py py-attr docutils literal notranslate"><span class="pre">UUID.is_safe</span></code></a> attribute relays information
 | ||
| from the platform about whether generated UUIDs are generated with a
 | ||
| multiprocessing-safe method.
 | ||
| (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=22807">bpo-22807</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/uuid.html#uuid.getnode" title="uuid.getnode"><code class="xref py py-func docutils literal notranslate"><span class="pre">uuid.getnode()</span></code></a> now prefers universally administered
 | ||
| MAC addresses over locally administered MAC addresses.
 | ||
| This makes a better guarantee for global uniqueness of UUIDs returned
 | ||
| from <a class="reference internal" href="../library/uuid.html#uuid.uuid1" title="uuid.uuid1"><code class="xref py py-func docutils literal notranslate"><span class="pre">uuid.uuid1()</span></code></a>.  If only locally administered MAC addresses are
 | ||
| available, the first such one found is returned.
 | ||
| (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32107">bpo-32107</a>.)</p>
 | ||
| </section>
 | ||
| <section id="warnings">
 | ||
| <h3>warnings<a class="headerlink" href="#warnings" title="Link to this heading">¶</a></h3>
 | ||
| <p>The initialization of the default warnings filters has changed as follows:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>warnings enabled via command line options (including those for <a class="reference internal" href="../using/cmdline.html#cmdoption-b"><code class="xref std std-option docutils literal notranslate"><span class="pre">-b</span></code></a>
 | ||
| and the new CPython-specific <a class="reference internal" href="../using/cmdline.html#cmdoption-X"><code class="xref std std-option docutils literal notranslate"><span class="pre">-X</span></code></a> <code class="docutils literal notranslate"><span class="pre">dev</span></code> option) are always passed
 | ||
| to the warnings machinery via the <a class="reference internal" href="../library/sys.html#sys.warnoptions" title="sys.warnoptions"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.warnoptions</span></code></a> attribute.</p></li>
 | ||
| <li><p>warnings filters enabled via the command line or the environment now have the
 | ||
| following order of precedence:</p>
 | ||
| <ul>
 | ||
| <li><p>the <code class="docutils literal notranslate"><span class="pre">BytesWarning</span></code> filter for <a class="reference internal" href="../using/cmdline.html#cmdoption-b"><code class="xref std std-option docutils literal notranslate"><span class="pre">-b</span></code></a> (or <code class="docutils literal notranslate"><span class="pre">-bb</span></code>)</p></li>
 | ||
| <li><p>any filters specified with the <a class="reference internal" href="../using/cmdline.html#cmdoption-W"><code class="xref std std-option docutils literal notranslate"><span class="pre">-W</span></code></a> option</p></li>
 | ||
| <li><p>any filters specified with the <span class="target" id="index-37"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONWARNINGS"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONWARNINGS</span></code></a> environment
 | ||
| variable</p></li>
 | ||
| <li><p>any other CPython specific filters (e.g. the <code class="docutils literal notranslate"><span class="pre">default</span></code> filter added
 | ||
| for the new <code class="docutils literal notranslate"><span class="pre">-X</span> <span class="pre">dev</span></code> mode)</p></li>
 | ||
| <li><p>any implicit filters defined directly by the warnings machinery</p></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><p>in <a class="reference internal" href="../using/configure.html#debug-build"><span class="std std-ref">CPython debug builds</span></a>, all warnings are now displayed
 | ||
| by default (the implicit filter list is empty)</p></li>
 | ||
| </ul>
 | ||
| <p>(Contributed by Nick Coghlan and Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=20361">bpo-20361</a>,
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32043">bpo-32043</a>, and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32230">bpo-32230</a>.)</p>
 | ||
| <p>Deprecation warnings are once again shown by default in single-file scripts and
 | ||
| at the interactive prompt.  See <a class="reference internal" href="#whatsnew37-pep565"><span class="std std-ref">PEP 565: Show DeprecationWarning in __main__</span></a> for details.
 | ||
| (Contributed by Nick Coghlan in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31975">bpo-31975</a>.)</p>
 | ||
| </section>
 | ||
| <section id="xml">
 | ||
| <h3>xml<a class="headerlink" href="#xml" title="Link to this heading">¶</a></h3>
 | ||
| <p>As mitigation against DTD and external entity retrieval, the
 | ||
| <a class="reference internal" href="../library/xml.dom.minidom.html#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> and <a class="reference internal" href="../library/xml.sax.html#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.sax</span></code></a> modules no longer process
 | ||
| external entities by default.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://github.com/python/cpython/issues/61441">gh-61441</a>.)</p>
 | ||
| </section>
 | ||
| <section id="xml-etree">
 | ||
| <h3>xml.etree<a class="headerlink" href="#xml-etree" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/xml.etree.elementtree.html#elementtree-xpath"><span class="std std-ref">ElementPath</span></a> predicates in the <code class="xref py py-meth docutils literal notranslate"><span class="pre">find()</span></code>
 | ||
| methods can now compare text of the current node with <code class="docutils literal notranslate"><span class="pre">[.</span> <span class="pre">=</span> <span class="pre">"text"]</span></code>,
 | ||
| not only text in children.  Predicates also allow adding spaces for
 | ||
| better readability.  (Contributed by Stefan Behnel in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31648">bpo-31648</a>.)</p>
 | ||
| </section>
 | ||
| <section id="xmlrpc-server">
 | ||
| <h3>xmlrpc.server<a class="headerlink" href="#xmlrpc-server" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-meth docutils literal notranslate"><span class="pre">SimpleXMLRPCDispatcher.register_function</span></code>
 | ||
| can now be used as a decorator.  (Contributed by Xiang Zhang in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=7769">bpo-7769</a>.)</p>
 | ||
| </section>
 | ||
| <section id="zipapp">
 | ||
| <h3>zipapp<a class="headerlink" href="#zipapp" title="Link to this heading">¶</a></h3>
 | ||
| <p>Function <a class="reference internal" href="../library/zipapp.html#zipapp.create_archive" title="zipapp.create_archive"><code class="xref py py-func docutils literal notranslate"><span class="pre">create_archive()</span></code></a> now accepts an optional <em>filter</em>
 | ||
| argument to allow the user to select which files should be included in the
 | ||
| archive.  (Contributed by Irmen de Jong in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31072">bpo-31072</a>.)</p>
 | ||
| <p>Function <a class="reference internal" href="../library/zipapp.html#zipapp.create_archive" title="zipapp.create_archive"><code class="xref py py-func docutils literal notranslate"><span class="pre">create_archive()</span></code></a> now accepts an optional <em>compressed</em>
 | ||
| argument to generate a compressed archive.  A command line option
 | ||
| <code class="docutils literal notranslate"><span class="pre">--compress</span></code> has also been added to support compression.
 | ||
| (Contributed by Zhiming Wang in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31638">bpo-31638</a>.)</p>
 | ||
| </section>
 | ||
| <section id="zipfile">
 | ||
| <h3>zipfile<a class="headerlink" href="#zipfile" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/zipfile.html#zipfile.ZipFile" title="zipfile.ZipFile"><code class="xref py py-class docutils literal notranslate"><span class="pre">ZipFile</span></code></a> now accepts the new <em>compresslevel</em> parameter to
 | ||
| control the compression level.
 | ||
| (Contributed by Bo Bayles in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=21417">bpo-21417</a>.)</p>
 | ||
| <p>Subdirectories in archives created by <code class="docutils literal notranslate"><span class="pre">ZipFile</span></code> are now stored in
 | ||
| alphabetical order.
 | ||
| (Contributed by Bernhard M. Wiedemann in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30693">bpo-30693</a>.)</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="c-api-changes">
 | ||
| <h2>C API Changes<a class="headerlink" href="#c-api-changes" title="Link to this heading">¶</a></h2>
 | ||
| <p>A new API for thread-local storage has been implemented.  See
 | ||
| <a class="reference internal" href="#whatsnew37-pep539"><span class="std std-ref">PEP 539: New C API for Thread-Local Storage</span></a> for an overview and
 | ||
| <a class="reference internal" href="../c-api/init.html#thread-specific-storage-api"><span class="std std-ref">Thread Specific Storage (TSS) API</span></a> for a complete reference.
 | ||
| (Contributed by Masayuki Yamamoto in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25658">bpo-25658</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="#whatsnew37-pep567"><span class="std std-ref">context variables</span></a> functionality
 | ||
| exposes a number of <a class="reference internal" href="../c-api/contextvars.html#contextvarsobjects"><span class="std std-ref">new C APIs</span></a>.</p>
 | ||
| <p>The new <a class="reference internal" href="../c-api/import.html#c.PyImport_GetModule" title="PyImport_GetModule"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyImport_GetModule()</span></code></a> function returns the previously
 | ||
| imported module with the given name.
 | ||
| (Contributed by Eric Snow in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28411">bpo-28411</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../c-api/typeobj.html#c.Py_RETURN_RICHCOMPARE" title="Py_RETURN_RICHCOMPARE"><code class="xref c c-macro docutils literal notranslate"><span class="pre">Py_RETURN_RICHCOMPARE</span></code></a> macro eases writing rich
 | ||
| comparison functions.
 | ||
| (Contributed by Petr Victorin in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=23699">bpo-23699</a>.)</p>
 | ||
| <p>The new <a class="reference internal" href="../c-api/intro.html#c.Py_UNREACHABLE" title="Py_UNREACHABLE"><code class="xref c c-macro docutils literal notranslate"><span class="pre">Py_UNREACHABLE</span></code></a> macro can be used to mark unreachable
 | ||
| code paths.
 | ||
| (Contributed by Barry Warsaw in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31338">bpo-31338</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/tracemalloc.html#module-tracemalloc" title="tracemalloc: Trace memory allocations."><code class="xref py py-mod docutils literal notranslate"><span class="pre">tracemalloc</span></code></a> now exposes a C API through the new
 | ||
| <a class="reference internal" href="../c-api/memory.html#c.PyTraceMalloc_Track" title="PyTraceMalloc_Track"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyTraceMalloc_Track()</span></code></a> and <a class="reference internal" href="../c-api/memory.html#c.PyTraceMalloc_Untrack" title="PyTraceMalloc_Untrack"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyTraceMalloc_Untrack()</span></code></a>
 | ||
| functions.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30054">bpo-30054</a>.)</p>
 | ||
| <p>The new <code class="xref c c-func docutils literal notranslate"><span class="pre">import__find__load__start()</span></code> and
 | ||
| <code class="xref c c-func docutils literal notranslate"><span class="pre">import__find__load__done()</span></code> static markers can be used to trace
 | ||
| module imports.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31574">bpo-31574</a>.)</p>
 | ||
| <p>The fields <code class="xref c c-member docutils literal notranslate"><span class="pre">name</span></code> and <code class="xref c c-member docutils literal notranslate"><span class="pre">doc</span></code> of structures
 | ||
| <a class="reference internal" href="../c-api/structures.html#c.PyMemberDef" title="PyMemberDef"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyMemberDef</span></code></a>, <a class="reference internal" href="../c-api/structures.html#c.PyGetSetDef" title="PyGetSetDef"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyGetSetDef</span></code></a>,
 | ||
| <a class="reference internal" href="../c-api/tuple.html#c.PyStructSequence_Field" title="PyStructSequence_Field"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyStructSequence_Field</span></code></a>, <a class="reference internal" href="../c-api/tuple.html#c.PyStructSequence_Desc" title="PyStructSequence_Desc"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyStructSequence_Desc</span></code></a>,
 | ||
| and <code class="xref c c-struct docutils literal notranslate"><span class="pre">wrapperbase</span></code> are now of type <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> rather of
 | ||
| <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>.  (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28761">bpo-28761</a>.)</p>
 | ||
| <p>The result of <a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_AsUTF8AndSize" title="PyUnicode_AsUTF8AndSize"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_AsUTF8AndSize()</span></code></a> and <a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_AsUTF8" title="PyUnicode_AsUTF8"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_AsUTF8()</span></code></a>
 | ||
| is now of type <code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></code> rather of <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">*</span></code>. (Contributed by Serhiy
 | ||
| Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28769">bpo-28769</a>.)</p>
 | ||
| <p>The result of <a class="reference internal" href="../c-api/mapping.html#c.PyMapping_Keys" title="PyMapping_Keys"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyMapping_Keys()</span></code></a>, <a class="reference internal" href="../c-api/mapping.html#c.PyMapping_Values" title="PyMapping_Values"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyMapping_Values()</span></code></a> and
 | ||
| <a class="reference internal" href="../c-api/mapping.html#c.PyMapping_Items" title="PyMapping_Items"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyMapping_Items()</span></code></a> is now always a list, rather than a list or a
 | ||
| tuple. (Contributed by Oren Milman in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28280">bpo-28280</a>.)</p>
 | ||
| <p>Added functions <a class="reference internal" href="../c-api/slice.html#c.PySlice_Unpack" title="PySlice_Unpack"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_Unpack()</span></code></a> and <a class="reference internal" href="../c-api/slice.html#c.PySlice_AdjustIndices" title="PySlice_AdjustIndices"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_AdjustIndices()</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27867">bpo-27867</a>.)</p>
 | ||
| <p><a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork" title="PyOS_AfterFork"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork()</span></code></a> is deprecated in favour of the new functions
 | ||
| <a class="reference internal" href="../c-api/sys.html#c.PyOS_BeforeFork" title="PyOS_BeforeFork"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_BeforeFork()</span></code></a>, <a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork_Parent" title="PyOS_AfterFork_Parent"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork_Parent()</span></code></a> and
 | ||
| <a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork_Child" title="PyOS_AfterFork_Child"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork_Child()</span></code></a>.  (Contributed by Antoine Pitrou in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=16500">bpo-16500</a>.)</p>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">PyExc_RecursionErrorInst</span></code> singleton that was part of the public API
 | ||
| has been removed as its members being never cleared may cause a segfault
 | ||
| during finalization of the interpreter. Contributed by Xavier de Gaye in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=22898">bpo-22898</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30697">bpo-30697</a>.</p>
 | ||
| <p>Added C API support for timezones with timezone constructors
 | ||
| <a class="reference internal" href="../c-api/datetime.html#c.PyTimeZone_FromOffset" title="PyTimeZone_FromOffset"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyTimeZone_FromOffset()</span></code></a> and <a class="reference internal" href="../c-api/datetime.html#c.PyTimeZone_FromOffsetAndName" title="PyTimeZone_FromOffsetAndName"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyTimeZone_FromOffsetAndName()</span></code></a>,
 | ||
| and access to the UTC singleton with <a class="reference internal" href="../c-api/datetime.html#c.PyDateTime_TimeZone_UTC" title="PyDateTime_TimeZone_UTC"><code class="xref c c-data docutils literal notranslate"><span class="pre">PyDateTime_TimeZone_UTC</span></code></a>.
 | ||
| Contributed by Paul Ganssle in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10381">bpo-10381</a>.</p>
 | ||
| <p>The type of results of <code class="xref c c-func docutils literal notranslate"><span class="pre">PyThread_start_new_thread()</span></code> and
 | ||
| <code class="xref c c-func docutils literal notranslate"><span class="pre">PyThread_get_thread_ident()</span></code>, and the <em>id</em> parameter of
 | ||
| <a class="reference internal" href="../c-api/init.html#c.PyThreadState_SetAsyncExc" title="PyThreadState_SetAsyncExc"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyThreadState_SetAsyncExc()</span></code></a> changed from <span class="c-expr sig sig-inline c"><span class="kt">long</span></span> to
 | ||
| <span class="c-expr sig sig-inline c"><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span></span>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=6532">bpo-6532</a>.)</p>
 | ||
| <p><a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_AsWideCharString" title="PyUnicode_AsWideCharString"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_AsWideCharString()</span></code></a> now raises a <a class="reference internal" href="../library/exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if the
 | ||
| second argument is <code class="docutils literal notranslate"><span class="pre">NULL</span></code> and the <span class="c-expr sig sig-inline c"><span class="n">wchar_t</span><span class="p">*</span></span> string contains null
 | ||
| characters.  (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30708">bpo-30708</a>.)</p>
 | ||
| <p>Changes to the startup sequence and the management of dynamic memory
 | ||
| allocators mean that the long documented requirement to call
 | ||
| <a class="reference internal" href="../c-api/init.html#c.Py_Initialize" title="Py_Initialize"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Initialize()</span></code></a> before calling most C API functions is now
 | ||
| relied on more heavily, and failing to abide by it may lead to segfaults in
 | ||
| embedding applications. See the <a class="reference internal" href="#porting-to-python-37"><span class="std std-ref">Porting to Python 3.7</span></a> section in this
 | ||
| document and the <a class="reference internal" href="../c-api/init.html#pre-init-safe"><span class="std std-ref">Before Python Initialization</span></a> section in the C API documentation
 | ||
| for more details.</p>
 | ||
| <p>The new <a class="reference internal" href="../c-api/init.html#c.PyInterpreterState_GetID" title="PyInterpreterState_GetID"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyInterpreterState_GetID()</span></code></a> returns the unique ID for a
 | ||
| given interpreter.
 | ||
| (Contributed by Eric Snow in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29102">bpo-29102</a>.)</p>
 | ||
| <p><a class="reference internal" href="../c-api/sys.html#c.Py_DecodeLocale" title="Py_DecodeLocale"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_DecodeLocale()</span></code></a>, <a class="reference internal" href="../c-api/sys.html#c.Py_EncodeLocale" title="Py_EncodeLocale"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_EncodeLocale()</span></code></a> now use the UTF-8
 | ||
| encoding when the <a class="reference internal" href="#whatsnew37-pep540"><span class="std std-ref">UTF-8 mode</span></a> is enabled.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29240">bpo-29240</a>.)</p>
 | ||
| <p><a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_DecodeLocaleAndSize" title="PyUnicode_DecodeLocaleAndSize"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_DecodeLocaleAndSize()</span></code></a> and <a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_EncodeLocale" title="PyUnicode_EncodeLocale"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_EncodeLocale()</span></code></a>
 | ||
| now use the current locale encoding for <code class="docutils literal notranslate"><span class="pre">surrogateescape</span></code> error handler.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29240">bpo-29240</a>.)</p>
 | ||
| <p>The <em>start</em> and <em>end</em> parameters of <a class="reference internal" href="../c-api/unicode.html#c.PyUnicode_FindChar" title="PyUnicode_FindChar"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyUnicode_FindChar()</span></code></a> are
 | ||
| now adjusted to behave like string slices.
 | ||
| (Contributed by Xiang Zhang in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28822">bpo-28822</a>.)</p>
 | ||
| </section>
 | ||
| <section id="build-changes">
 | ||
| <h2>Build Changes<a class="headerlink" href="#build-changes" title="Link to this heading">¶</a></h2>
 | ||
| <p>Support for building <code class="docutils literal notranslate"><span class="pre">--without-threads</span></code> has been removed.  The
 | ||
| <a class="reference internal" href="../library/threading.html#module-threading" title="threading: Thread-based parallelism."><code class="xref py py-mod docutils literal notranslate"><span class="pre">threading</span></code></a> module is now always available.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31370">bpo-31370</a>.).</p>
 | ||
| <p>A full copy of libffi is no longer bundled for use when building the
 | ||
| <a class="reference internal" href="../library/ctypes.html#module-ctypes" title="ctypes: A foreign function library for Python."><code class="xref py py-mod docutils literal notranslate"><span class="pre">_ctypes</span></code></a> module on non-OSX UNIX platforms.  An installed copy
 | ||
| of libffi is now required when building <code class="docutils literal notranslate"><span class="pre">_ctypes</span></code> on such platforms.
 | ||
| (Contributed by Zachary Ware in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27979">bpo-27979</a>.)</p>
 | ||
| <p>The Windows build process no longer depends on Subversion to pull in external
 | ||
| sources, a Python script is used to download zipfiles from GitHub instead.
 | ||
| If Python 3.6 is not found on the system (via <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-3.6</span></code>), NuGet is used to
 | ||
| download a copy of 32-bit Python for this purpose.  (Contributed by Zachary
 | ||
| Ware in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30450">bpo-30450</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/ssl.html#module-ssl" title="ssl: TLS/SSL wrapper for socket objects"><code class="xref py py-mod docutils literal notranslate"><span class="pre">ssl</span></code></a> module requires OpenSSL 1.0.2 or 1.1 compatible libssl.
 | ||
| OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer
 | ||
| supported. LibreSSL is temporarily not supported as well. LibreSSL releases
 | ||
| up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs.</p>
 | ||
| </section>
 | ||
| <section id="optimizations">
 | ||
| <span id="whatsnew37-perf"></span><h2>Optimizations<a class="headerlink" href="#optimizations" title="Link to this heading">¶</a></h2>
 | ||
| <p>The overhead of calling many methods of various standard library classes
 | ||
| implemented in C has been significantly reduced by porting more code
 | ||
| to use the <code class="docutils literal notranslate"><span class="pre">METH_FASTCALL</span></code> convention.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29300">bpo-29300</a>, <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29507">bpo-29507</a>,
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29452">bpo-29452</a>, and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29286">bpo-29286</a>.)</p>
 | ||
| <p>Various optimizations have reduced Python startup time by 10% on Linux and
 | ||
| up to 30% on macOS.
 | ||
| (Contributed by Victor Stinner, INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29585">bpo-29585</a>, and
 | ||
| Ivan Levkivskyi in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31333">bpo-31333</a>.)</p>
 | ||
| <p>Method calls are now up to 20% faster due to the bytecode changes which
 | ||
| avoid creating bound method instances.
 | ||
| (Contributed by Yury Selivanov and INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=26110">bpo-26110</a>.)</p>
 | ||
| <p id="whatsnew37-asyncio-perf">The <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> module received a number of notable optimizations for
 | ||
| commonly used functions:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>The <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.get_event_loop" title="asyncio.get_event_loop"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.get_event_loop()</span></code></a> function has been reimplemented in C to
 | ||
| make it up to 15 times faster.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32296">bpo-32296</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/asyncio-future.html#asyncio.Future" title="asyncio.Future"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Future</span></code></a> callback management has been optimized.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32348">bpo-32348</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/asyncio-task.html#asyncio.gather" title="asyncio.gather"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.gather()</span></code></a> is now up to 15% faster.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32355">bpo-32355</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/asyncio-task.html#asyncio.sleep" title="asyncio.sleep"><code class="xref py py-func docutils literal notranslate"><span class="pre">asyncio.sleep()</span></code></a> is now up to 2 times faster when the <em>delay</em>
 | ||
| argument is zero or negative.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32351">bpo-32351</a>.)</p></li>
 | ||
| <li><p>The performance overhead of asyncio debug mode has been reduced.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31970">bpo-31970</a>.)</p></li>
 | ||
| </ul>
 | ||
| <p>As a result of <a class="reference internal" href="#whatsnew37-pep560"><span class="std std-ref">PEP 560 work</span></a>, the import time
 | ||
| of <a class="reference internal" href="../library/typing.html#module-typing" title="typing: Support for type hints (see :pep:`484`)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">typing</span></code></a> has been reduced by a factor of 7, and many typing operations
 | ||
| are now faster.
 | ||
| (Contributed by Ivan Levkivskyi in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32226">bpo-32226</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/functions.html#sorted" title="sorted"><code class="xref py py-func docutils literal notranslate"><span class="pre">sorted()</span></code></a> and <a class="reference internal" href="../library/stdtypes.html#list.sort" title="list.sort"><code class="xref py py-meth docutils literal notranslate"><span class="pre">list.sort()</span></code></a> have been optimized for common cases
 | ||
| to be up to 40-75% faster.
 | ||
| (Contributed by Elliot Gorokhovsky in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28685">bpo-28685</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/stdtypes.html#dict.copy" title="dict.copy"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dict.copy()</span></code></a> is now up to 5.5 times faster.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31179">bpo-31179</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/functions.html#hasattr" title="hasattr"><code class="xref py py-func docutils literal notranslate"><span class="pre">hasattr()</span></code></a> and <a class="reference internal" href="../library/functions.html#getattr" title="getattr"><code class="xref py py-func docutils literal notranslate"><span class="pre">getattr()</span></code></a> are now about 4 times faster when
 | ||
| <em>name</em> is not found and <em>obj</em> does not override <a class="reference internal" href="../reference/datamodel.html#object.__getattr__" title="object.__getattr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__getattr__()</span></code></a>
 | ||
| or <a class="reference internal" href="../reference/datamodel.html#object.__getattribute__" title="object.__getattribute__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__getattribute__()</span></code></a>.
 | ||
| (Contributed by INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32544">bpo-32544</a>.)</p>
 | ||
| <p>Searching for certain Unicode characters (like Ukrainian capital “Є”)
 | ||
| in a string was up to 25 times slower than searching for other characters.
 | ||
| It is now only 3 times slower in the worst case.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=24821">bpo-24821</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/collections.html#collections.namedtuple" title="collections.namedtuple"><code class="xref py py-func docutils literal notranslate"><span class="pre">collections.namedtuple()</span></code></a> factory has been reimplemented to
 | ||
| make the creation of named tuples 4 to 6 times faster.
 | ||
| (Contributed by Jelle Zijlstra with further improvements by INADA Naoki,
 | ||
| Serhiy Storchaka, and Raymond Hettinger in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28638">bpo-28638</a>.)</p>
 | ||
| <p><code class="xref py py-meth docutils literal notranslate"><span class="pre">date.fromordinal()</span></code> and <code class="xref py py-meth docutils literal notranslate"><span class="pre">date.fromtimestamp()</span></code> are now up to
 | ||
| 30% faster in the common case.
 | ||
| (Contributed by Paul Ganssle in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32403">bpo-32403</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/os.html#os.fwalk" title="os.fwalk"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.fwalk()</span></code></a> function is now up to 2 times faster thanks to
 | ||
| the use of <a class="reference internal" href="../library/os.html#os.scandir" title="os.scandir"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.scandir()</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25996">bpo-25996</a>.)</p>
 | ||
| <p>The speed of the <a class="reference internal" href="../library/shutil.html#shutil.rmtree" title="shutil.rmtree"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.rmtree()</span></code></a> function has been improved by
 | ||
| 20–40% thanks to the use of the <a class="reference internal" href="../library/os.html#os.scandir" title="os.scandir"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.scandir()</span></code></a> function.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28564">bpo-28564</a>.)</p>
 | ||
| <p>Optimized case-insensitive matching and searching of <a class="reference internal" href="../library/re.html#module-re" title="re: Regular expression operations."><code class="xref py py-mod docutils literal notranslate"><span class="pre">regular</span>
 | ||
| <span class="pre">expressions</span></code></a>.  Searching some patterns can now be up to 20 times faster.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30285">bpo-30285</a>.)</p>
 | ||
| <p><a class="reference internal" href="../library/re.html#re.compile" title="re.compile"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.compile()</span></code></a> now converts <code class="docutils literal notranslate"><span class="pre">flags</span></code> parameter to int object if
 | ||
| it is <code class="docutils literal notranslate"><span class="pre">RegexFlag</span></code>.  It is now as fast as Python 3.5, and faster than
 | ||
| Python 3.6 by about 10% depending on the pattern.
 | ||
| (Contributed by INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31671">bpo-31671</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/selectors.html#selectors.BaseSelector.modify" title="selectors.BaseSelector.modify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">modify()</span></code></a> methods of classes
 | ||
| <a class="reference internal" href="../library/selectors.html#selectors.EpollSelector" title="selectors.EpollSelector"><code class="xref py py-class docutils literal notranslate"><span class="pre">selectors.EpollSelector</span></code></a>, <a class="reference internal" href="../library/selectors.html#selectors.PollSelector" title="selectors.PollSelector"><code class="xref py py-class docutils literal notranslate"><span class="pre">selectors.PollSelector</span></code></a>
 | ||
| and <a class="reference internal" href="../library/selectors.html#selectors.DevpollSelector" title="selectors.DevpollSelector"><code class="xref py py-class docutils literal notranslate"><span class="pre">selectors.DevpollSelector</span></code></a> may be around 10% faster under
 | ||
| heavy loads.  (Contributed by Giampaolo Rodola’ in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30014">bpo-30014</a>)</p>
 | ||
| <p>Constant folding has been moved from the peephole optimizer to the new AST
 | ||
| optimizer, which is able perform optimizations more consistently.
 | ||
| (Contributed by Eugene Toder and INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29469">bpo-29469</a> and
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=11549">bpo-11549</a>.)</p>
 | ||
| <p>Most functions and methods in <a class="reference internal" href="../library/abc.html#module-abc" title="abc: Abstract base classes according to :pep:`3119`."><code class="xref py py-mod docutils literal notranslate"><span class="pre">abc</span></code></a> have been rewritten in C.
 | ||
| This makes creation of abstract base classes, and calling <a class="reference internal" href="../library/functions.html#isinstance" title="isinstance"><code class="xref py py-func docutils literal notranslate"><span class="pre">isinstance()</span></code></a>
 | ||
| and <a class="reference internal" href="../library/functions.html#issubclass" title="issubclass"><code class="xref py py-func docutils literal notranslate"><span class="pre">issubclass()</span></code></a> on them 1.5x faster.  This also reduces Python
 | ||
| start-up time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki
 | ||
| in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31333">bpo-31333</a>)</p>
 | ||
| <p>Significant speed improvements to alternate constructors for
 | ||
| <a class="reference internal" href="../library/datetime.html#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.date</span></code></a> and <a class="reference internal" href="../library/datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a> by using fast-path
 | ||
| constructors when not constructing subclasses. (Contributed by Paul Ganssle
 | ||
| in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32403">bpo-32403</a>)</p>
 | ||
| <p>The speed of comparison of <a class="reference internal" href="../library/array.html#array.array" title="array.array"><code class="xref py py-class docutils literal notranslate"><span class="pre">array.array</span></code></a> instances has been
 | ||
| improved considerably in certain cases.  It is now from 10x to 70x faster
 | ||
| when comparing arrays holding values of the same integer type.
 | ||
| (Contributed by Adrian Wielgosik in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=24700">bpo-24700</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/math.html#math.erf" title="math.erf"><code class="xref py py-func docutils literal notranslate"><span class="pre">math.erf()</span></code></a> and <a class="reference internal" href="../library/math.html#math.erfc" title="math.erfc"><code class="xref py py-func docutils literal notranslate"><span class="pre">math.erfc()</span></code></a> functions now use the (faster)
 | ||
| C library implementation on most platforms.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=26121">bpo-26121</a>.)</p>
 | ||
| </section>
 | ||
| <section id="other-cpython-implementation-changes">
 | ||
| <h2>Other CPython Implementation Changes<a class="headerlink" href="#other-cpython-implementation-changes" title="Link to this heading">¶</a></h2>
 | ||
| <ul class="simple">
 | ||
| <li><p>Trace hooks may now opt out of receiving the <code class="docutils literal notranslate"><span class="pre">line</span></code> and opt into receiving
 | ||
| the <code class="docutils literal notranslate"><span class="pre">opcode</span></code> events from the interpreter by setting the corresponding new
 | ||
| <a class="reference internal" href="../reference/datamodel.html#frame.f_trace_lines" title="frame.f_trace_lines"><code class="xref py py-attr docutils literal notranslate"><span class="pre">f_trace_lines</span></code></a> and <a class="reference internal" href="../reference/datamodel.html#frame.f_trace_opcodes" title="frame.f_trace_opcodes"><code class="xref py py-attr docutils literal notranslate"><span class="pre">f_trace_opcodes</span></code></a> attributes on the
 | ||
| frame being traced. (Contributed by Nick Coghlan in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31344">bpo-31344</a>.)</p></li>
 | ||
| <li><p>Fixed some consistency problems with namespace package module attributes.
 | ||
| Namespace module objects now have an <code class="docutils literal notranslate"><span class="pre">__file__</span></code> that is set to <code class="docutils literal notranslate"><span class="pre">None</span></code>
 | ||
| (previously unset), and their <code class="docutils literal notranslate"><span class="pre">__spec__.origin</span></code> is also set to <code class="docutils literal notranslate"><span class="pre">None</span></code>
 | ||
| (previously the string <code class="docutils literal notranslate"><span class="pre">"namespace"</span></code>).  See <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32305">bpo-32305</a>.  Also, the
 | ||
| namespace module object’s <code class="docutils literal notranslate"><span class="pre">__spec__.loader</span></code> is set to the same value as
 | ||
| <code class="docutils literal notranslate"><span class="pre">__loader__</span></code> (previously, the former was set to <code class="docutils literal notranslate"><span class="pre">None</span></code>).  See
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32303">bpo-32303</a>.</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/functions.html#locals" title="locals"><code class="xref py py-func docutils literal notranslate"><span class="pre">locals()</span></code></a> dictionary now displays in the lexical order that
 | ||
| variables were defined.  Previously, the order was undefined.
 | ||
| (Contributed by Raymond Hettinger in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32690">bpo-32690</a>.)</p></li>
 | ||
| <li><p>The <code class="docutils literal notranslate"><span class="pre">distutils</span></code> <code class="docutils literal notranslate"><span class="pre">upload</span></code> command no longer tries to change CR
 | ||
| end-of-line characters to CRLF.  This fixes a corruption issue with sdists
 | ||
| that ended with a byte equivalent to CR.
 | ||
| (Contributed by Bo Bayles in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32304">bpo-32304</a>.)</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="deprecated-python-behavior">
 | ||
| <h2>Deprecated Python Behavior<a class="headerlink" href="#deprecated-python-behavior" title="Link to this heading">¶</a></h2>
 | ||
| <p>Yield expressions (both <code class="docutils literal notranslate"><span class="pre">yield</span></code> and <code class="docutils literal notranslate"><span class="pre">yield</span> <span class="pre">from</span></code> clauses) are now deprecated
 | ||
| in comprehensions and generator expressions (aside from the iterable expression
 | ||
| in the leftmost <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> clause). This ensures that comprehensions
 | ||
| always immediately return a container of the appropriate type (rather than
 | ||
| potentially returning a <a class="reference internal" href="../glossary.html#term-generator-iterator"><span class="xref std std-term">generator iterator</span></a> object), while generator
 | ||
| expressions won’t attempt to interleave their implicit output with the output
 | ||
| from any explicit yield expressions.  In Python 3.7, such expressions emit
 | ||
| <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a> when compiled, in Python 3.8 this will be a
 | ||
| <a class="reference internal" href="../library/exceptions.html#SyntaxError" title="SyntaxError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SyntaxError</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10544">bpo-10544</a>.)</p>
 | ||
| <p>Returning a subclass of <a class="reference internal" href="../library/functions.html#complex" title="complex"><code class="xref py py-class docutils literal notranslate"><span class="pre">complex</span></code></a> from <a class="reference internal" href="../reference/datamodel.html#object.__complex__" title="object.__complex__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__complex__()</span></code></a> is
 | ||
| deprecated and will be an error in future Python versions.  This makes
 | ||
| <code class="docutils literal notranslate"><span class="pre">__complex__()</span></code> consistent with <a class="reference internal" href="../reference/datamodel.html#object.__int__" title="object.__int__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__int__()</span></code></a> and
 | ||
| <a class="reference internal" href="../reference/datamodel.html#object.__float__" title="object.__float__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__float__()</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28894">bpo-28894</a>.)</p>
 | ||
| </section>
 | ||
| <section id="deprecated-python-modules-functions-and-methods">
 | ||
| <h2>Deprecated Python modules, functions and methods<a class="headerlink" href="#deprecated-python-modules-functions-and-methods" title="Link to this heading">¶</a></h2>
 | ||
| <section id="aifc">
 | ||
| <h3>aifc<a class="headerlink" href="#aifc" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">aifc.openfp()</span></code> has been deprecated and will be removed in Python 3.9.
 | ||
| Use <code class="xref py py-func docutils literal notranslate"><span class="pre">aifc.open()</span></code> instead.
 | ||
| (Contributed by Brian Curtin in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31985">bpo-31985</a>.)</p>
 | ||
| </section>
 | ||
| <section id="whatsnew37-asyncio-deprecated">
 | ||
| <span id="id2"></span><h3>asyncio<a class="headerlink" href="#whatsnew37-asyncio-deprecated" title="Link to this heading">¶</a></h3>
 | ||
| <p>Support for directly <code class="docutils literal notranslate"><span class="pre">await</span></code>-ing instances of <a class="reference internal" href="../library/asyncio-sync.html#asyncio.Lock" title="asyncio.Lock"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Lock</span></code></a> and
 | ||
| other asyncio synchronization primitives has been deprecated.  An
 | ||
| asynchronous context manager must be used in order to acquire and release
 | ||
| the synchronization resource.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32253">bpo-32253</a>.)</p>
 | ||
| <p>The <code class="xref py py-meth docutils literal notranslate"><span class="pre">asyncio.Task.current_task()</span></code> and <code class="xref py py-meth docutils literal notranslate"><span class="pre">asyncio.Task.all_tasks()</span></code>
 | ||
| methods have been deprecated.
 | ||
| (Contributed by Andrew Svetlov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32250">bpo-32250</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id3">
 | ||
| <h3>collections<a class="headerlink" href="#id3" title="Link to this heading">¶</a></h3>
 | ||
| <p>In Python 3.8, the abstract base classes in <a class="reference internal" href="../library/collections.abc.html#module-collections.abc" title="collections.abc: Abstract base classes for containers"><code class="xref py py-mod docutils literal notranslate"><span class="pre">collections.abc</span></code></a> will no
 | ||
| longer be exposed in the regular <a class="reference internal" href="../library/collections.html#module-collections" title="collections: Container datatypes"><code class="xref py py-mod docutils literal notranslate"><span class="pre">collections</span></code></a> module.  This will help
 | ||
| create a clearer distinction between the concrete classes and the abstract
 | ||
| base classes.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25988">bpo-25988</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id4">
 | ||
| <h3>dbm<a class="headerlink" href="#id4" title="Link to this heading">¶</a></h3>
 | ||
| <p><a class="reference internal" href="../library/dbm.html#module-dbm.dumb" title="dbm.dumb: Portable implementation of the simple DBM interface."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dbm.dumb</span></code></a> now supports reading read-only files and no longer writes the
 | ||
| index file when it is not changed.  A deprecation warning is now emitted
 | ||
| if the index file is missing and recreated in the <code class="docutils literal notranslate"><span class="pre">'r'</span></code> and <code class="docutils literal notranslate"><span class="pre">'w'</span></code>
 | ||
| modes (this will be an error in future Python releases).
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28847">bpo-28847</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id5">
 | ||
| <h3>enum<a class="headerlink" href="#id5" title="Link to this heading">¶</a></h3>
 | ||
| <p>In Python 3.8, attempting to check for non-Enum objects in <code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code>
 | ||
| classes will raise a <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> (e.g. <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">in</span> <span class="pre">Color</span></code>); similarly,
 | ||
| attempting to check for non-Flag objects in a <code class="xref py py-class docutils literal notranslate"><span class="pre">Flag</span></code> member will
 | ||
| raise <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> (e.g. <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">in</span> <span class="pre">Perm.RW</span></code>); currently, both operations
 | ||
| return <a class="reference internal" href="../library/constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> instead.
 | ||
| (Contributed by Ethan Furman in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33217">bpo-33217</a>.)</p>
 | ||
| </section>
 | ||
| <section id="gettext">
 | ||
| <h3>gettext<a class="headerlink" href="#gettext" title="Link to this heading">¶</a></h3>
 | ||
| <p>Using non-integer value for selecting a plural form in <a class="reference internal" href="../library/gettext.html#module-gettext" title="gettext: Multilingual internationalization services."><code class="xref py py-mod docutils literal notranslate"><span class="pre">gettext</span></code></a> is
 | ||
| now deprecated.  It never correctly worked. (Contributed by Serhiy Storchaka
 | ||
| in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28692">bpo-28692</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id6">
 | ||
| <h3>importlib<a class="headerlink" href="#id6" title="Link to this heading">¶</a></h3>
 | ||
| <p>Methods
 | ||
| <code class="xref py py-meth docutils literal notranslate"><span class="pre">MetaPathFinder.find_module()</span></code>
 | ||
| (replaced by
 | ||
| <a class="reference internal" href="../library/importlib.html#importlib.abc.MetaPathFinder.find_spec" title="importlib.abc.MetaPathFinder.find_spec"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MetaPathFinder.find_spec()</span></code></a>)
 | ||
| and
 | ||
| <code class="xref py py-meth docutils literal notranslate"><span class="pre">PathEntryFinder.find_loader()</span></code>
 | ||
| (replaced by
 | ||
| <a class="reference internal" href="../library/importlib.html#importlib.abc.PathEntryFinder.find_spec" title="importlib.abc.PathEntryFinder.find_spec"><code class="xref py py-meth docutils literal notranslate"><span class="pre">PathEntryFinder.find_spec()</span></code></a>)
 | ||
| both deprecated in Python 3.4 now emit <a class="reference internal" href="../library/exceptions.html#DeprecationWarning" title="DeprecationWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DeprecationWarning</span></code></a>.
 | ||
| (Contributed by Matthias Bussonnier in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29576">bpo-29576</a>.)</p>
 | ||
| <p>The <a class="reference internal" href="../library/importlib.html#importlib.abc.ResourceLoader" title="importlib.abc.ResourceLoader"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.abc.ResourceLoader</span></code></a> ABC has been deprecated in
 | ||
| favour of <a class="reference internal" href="../library/importlib.html#importlib.abc.ResourceReader" title="importlib.abc.ResourceReader"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.abc.ResourceReader</span></code></a>.</p>
 | ||
| </section>
 | ||
| <section id="id7">
 | ||
| <h3>locale<a class="headerlink" href="#id7" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">locale.format()</span></code> has been deprecated, use <a class="reference internal" href="../library/locale.html#locale.format_string" title="locale.format_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">locale.format_string()</span></code></a>
 | ||
| instead.  (Contributed by Garvit in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=10379">bpo-10379</a>.)</p>
 | ||
| </section>
 | ||
| <section id="macpath">
 | ||
| <h3>macpath<a class="headerlink" href="#macpath" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <code class="xref py py-mod docutils literal notranslate"><span class="pre">macpath</span></code> is now deprecated and will be removed in Python 3.8.
 | ||
| (Contributed by Chi Hsuan Yen in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=9850">bpo-9850</a>.)</p>
 | ||
| </section>
 | ||
| <section id="threading">
 | ||
| <h3>threading<a class="headerlink" href="#threading" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-mod docutils literal notranslate"><span class="pre">dummy_threading</span></code> and <code class="xref py py-mod docutils literal notranslate"><span class="pre">_dummy_thread</span></code> have been deprecated.  It is
 | ||
| no longer possible to build Python with threading disabled.
 | ||
| Use <a class="reference internal" href="../library/threading.html#module-threading" title="threading: Thread-based parallelism."><code class="xref py py-mod docutils literal notranslate"><span class="pre">threading</span></code></a> instead.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31370">bpo-31370</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id8">
 | ||
| <h3>socket<a class="headerlink" href="#id8" title="Link to this heading">¶</a></h3>
 | ||
| <p>The silent argument value truncation in <a class="reference internal" href="../library/socket.html#socket.htons" title="socket.htons"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.htons()</span></code></a> and
 | ||
| <a class="reference internal" href="../library/socket.html#socket.ntohs" title="socket.ntohs"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.ntohs()</span></code></a> has been deprecated.  In future versions of Python,
 | ||
| if the passed argument is larger than 16 bits, an exception will be raised.
 | ||
| (Contributed by Oren Milman in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28332">bpo-28332</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id9">
 | ||
| <h3>ssl<a class="headerlink" href="#id9" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">ssl.wrap_socket()</span></code> is deprecated.  Use
 | ||
| <a class="reference internal" href="../library/ssl.html#ssl.SSLContext.wrap_socket" title="ssl.SSLContext.wrap_socket"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ssl.SSLContext.wrap_socket()</span></code></a> instead.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28124">bpo-28124</a>.)</p>
 | ||
| </section>
 | ||
| <section id="sunau">
 | ||
| <h3>sunau<a class="headerlink" href="#sunau" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">sunau.openfp()</span></code> has been deprecated and will be removed in Python 3.9.
 | ||
| Use <code class="xref py py-func docutils literal notranslate"><span class="pre">sunau.open()</span></code> instead.
 | ||
| (Contributed by Brian Curtin in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31985">bpo-31985</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id10">
 | ||
| <h3>sys<a class="headerlink" href="#id10" title="Link to this heading">¶</a></h3>
 | ||
| <p>Deprecated <code class="xref py py-func docutils literal notranslate"><span class="pre">sys.set_coroutine_wrapper()</span></code> and
 | ||
| <code class="xref py py-func docutils literal notranslate"><span class="pre">sys.get_coroutine_wrapper()</span></code>.</p>
 | ||
| <p>The undocumented <code class="docutils literal notranslate"><span class="pre">sys.callstats()</span></code> function has been deprecated and
 | ||
| will be removed in a future Python version.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28799">bpo-28799</a>.)</p>
 | ||
| </section>
 | ||
| <section id="wave">
 | ||
| <h3>wave<a class="headerlink" href="#wave" title="Link to this heading">¶</a></h3>
 | ||
| <p><code class="xref py py-func docutils literal notranslate"><span class="pre">wave.openfp()</span></code> has been deprecated and will be removed in Python 3.9.
 | ||
| Use <a class="reference internal" href="../library/wave.html#wave.open" title="wave.open"><code class="xref py py-func docutils literal notranslate"><span class="pre">wave.open()</span></code></a> instead.
 | ||
| (Contributed by Brian Curtin in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31985">bpo-31985</a>.)</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="deprecated-functions-and-types-of-the-c-api">
 | ||
| <h2>Deprecated functions and types of the C API<a class="headerlink" href="#deprecated-functions-and-types-of-the-c-api" title="Link to this heading">¶</a></h2>
 | ||
| <p>Function <a class="reference internal" href="../c-api/slice.html#c.PySlice_GetIndicesEx" title="PySlice_GetIndicesEx"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code></a> is deprecated and replaced with
 | ||
| a macro if <code class="docutils literal notranslate"><span class="pre">Py_LIMITED_API</span></code> is not set or set to a value in the range
 | ||
| between <code class="docutils literal notranslate"><span class="pre">0x03050400</span></code> and <code class="docutils literal notranslate"><span class="pre">0x03060000</span></code> (not inclusive), or is <code class="docutils literal notranslate"><span class="pre">0x03060100</span></code>
 | ||
| or higher.  (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27867">bpo-27867</a>.)</p>
 | ||
| <p><a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork" title="PyOS_AfterFork"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork()</span></code></a> has been deprecated.  Use <a class="reference internal" href="../c-api/sys.html#c.PyOS_BeforeFork" title="PyOS_BeforeFork"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_BeforeFork()</span></code></a>,
 | ||
| <a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork_Parent" title="PyOS_AfterFork_Parent"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork_Parent()</span></code></a> or <a class="reference internal" href="../c-api/sys.html#c.PyOS_AfterFork_Child" title="PyOS_AfterFork_Child"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyOS_AfterFork_Child()</span></code></a> instead.
 | ||
| (Contributed by Antoine Pitrou in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=16500">bpo-16500</a>.)</p>
 | ||
| </section>
 | ||
| <section id="platform-support-removals">
 | ||
| <span id="id11"></span><h2>Platform Support Removals<a class="headerlink" href="#platform-support-removals" title="Link to this heading">¶</a></h2>
 | ||
| <ul>
 | ||
| <li><p>FreeBSD 9 and older are no longer officially supported.</p></li>
 | ||
| <li><p>For full Unicode support, including within extension modules, *nix platforms
 | ||
| are now expected to provide at least one of <code class="docutils literal notranslate"><span class="pre">C.UTF-8</span></code> (full locale),
 | ||
| <code class="docutils literal notranslate"><span class="pre">C.utf8</span></code> (full locale) or <code class="docutils literal notranslate"><span class="pre">UTF-8</span></code> (<code class="docutils literal notranslate"><span class="pre">LC_CTYPE</span></code>-only locale) as an
 | ||
| alternative to the legacy <code class="docutils literal notranslate"><span class="pre">ASCII</span></code>-based <code class="docutils literal notranslate"><span class="pre">C</span></code> locale.</p></li>
 | ||
| <li><p>OpenSSL 0.9.8 and 1.0.1 are no longer supported, which means building CPython
 | ||
| 3.7 with SSL/TLS support on older platforms still using these versions
 | ||
| requires custom build options that link to a more recent version of OpenSSL.</p>
 | ||
| <p>Notably, this issue affects the Debian 8 (aka “jessie”) and Ubuntu 14.04
 | ||
| (aka “Trusty”) LTS Linux distributions, as they still use OpenSSL 1.0.1 by
 | ||
| default.</p>
 | ||
| <p>Debian 9 (“stretch”) and Ubuntu 16.04 (“xenial”), as well as recent releases
 | ||
| of other LTS Linux releases (e.g. RHEL/CentOS 7.5, SLES 12-SP3), use OpenSSL
 | ||
| 1.0.2 or later, and remain supported in the default build configuration.</p>
 | ||
| <p>CPython’s own <a class="reference external" href="https://github.com/python/cpython/blob/v3.7.13/.travis.yml">CI configuration file</a> provides an
 | ||
| example of using the SSL
 | ||
| <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Tools/ssl/multissltests.py">compatibility testing infrastructure</a> in
 | ||
| CPython’s test suite to build and link against OpenSSL 1.1.0 rather than an
 | ||
| outdated system provided OpenSSL.</p>
 | ||
| </li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="api-and-feature-removals">
 | ||
| <h2>API and Feature Removals<a class="headerlink" href="#api-and-feature-removals" title="Link to this heading">¶</a></h2>
 | ||
| <p>The following features and APIs have been removed from Python 3.7:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>The <code class="docutils literal notranslate"><span class="pre">os.stat_float_times()</span></code> function has been removed. It was introduced in
 | ||
| Python 2.3 for backward compatibility with Python 2.2, and was deprecated
 | ||
| since Python 3.1.</p></li>
 | ||
| <li><p>Unknown escapes consisting of <code class="docutils literal notranslate"><span class="pre">'\'</span></code> and an ASCII letter in replacement
 | ||
| templates for <a class="reference internal" href="../library/re.html#re.sub" title="re.sub"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.sub()</span></code></a> were deprecated in Python 3.5, and will now
 | ||
| cause an error.</p></li>
 | ||
| <li><p>Removed support of the <em>exclude</em> argument in <a class="reference internal" href="../library/tarfile.html#tarfile.TarFile.add" title="tarfile.TarFile.add"><code class="xref py py-meth docutils literal notranslate"><span class="pre">tarfile.TarFile.add()</span></code></a>.
 | ||
| It was deprecated in Python 2.7 and 3.2.  Use the <em>filter</em> argument instead.</p></li>
 | ||
| <li><p>The <code class="xref py py-func docutils literal notranslate"><span class="pre">ntpath.splitunc()</span></code> function was deprecated in
 | ||
| Python 3.1, and has now been removed.  Use <a class="reference internal" href="../library/os.path.html#os.path.splitdrive" title="os.path.splitdrive"><code class="xref py py-func docutils literal notranslate"><span class="pre">splitdrive()</span></code></a>
 | ||
| instead.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/collections.html#collections.namedtuple" title="collections.namedtuple"><code class="xref py py-func docutils literal notranslate"><span class="pre">collections.namedtuple()</span></code></a> no longer supports the <em>verbose</em> parameter
 | ||
| or <code class="docutils literal notranslate"><span class="pre">_source</span></code> attribute which showed the generated source code for the
 | ||
| named tuple class.  This was part of an optimization designed to speed-up
 | ||
| class creation.  (Contributed by Jelle Zijlstra with further improvements
 | ||
| by INADA Naoki, Serhiy Storchaka, and Raymond Hettinger in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28638">bpo-28638</a>.)</p></li>
 | ||
| <li><p>Functions <a class="reference internal" href="../library/functions.html#bool" title="bool"><code class="xref py py-func docutils literal notranslate"><span class="pre">bool()</span></code></a>, <a class="reference internal" href="../library/functions.html#float" title="float"><code class="xref py py-func docutils literal notranslate"><span class="pre">float()</span></code></a>, <a class="reference internal" href="../library/stdtypes.html#list" title="list"><code class="xref py py-func docutils literal notranslate"><span class="pre">list()</span></code></a> and <a class="reference internal" href="../library/stdtypes.html#tuple" title="tuple"><code class="xref py py-func docutils literal notranslate"><span class="pre">tuple()</span></code></a> no
 | ||
| longer take keyword arguments.  The first argument of <a class="reference internal" href="../library/functions.html#int" title="int"><code class="xref py py-func docutils literal notranslate"><span class="pre">int()</span></code></a> can now
 | ||
| be passed only as positional argument.</p></li>
 | ||
| <li><p>Removed previously deprecated in Python 2.4 classes <code class="docutils literal notranslate"><span class="pre">Plist</span></code>, <code class="docutils literal notranslate"><span class="pre">Dict</span></code> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">_InternalDict</span></code> in the <a class="reference internal" href="../library/plistlib.html#module-plistlib" title="plistlib: Generate and parse Apple plist files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">plistlib</span></code></a> module.  Dict values in the result
 | ||
| of functions <code class="xref py py-func docutils literal notranslate"><span class="pre">readPlist()</span></code> and
 | ||
| <code class="xref py py-func docutils literal notranslate"><span class="pre">readPlistFromBytes()</span></code> are now normal dicts.  You no longer
 | ||
| can use attribute access to access items of these dictionaries.</p></li>
 | ||
| <li><p>The <code class="docutils literal notranslate"><span class="pre">asyncio.windows_utils.socketpair()</span></code> function has been
 | ||
| removed.  Use the <a class="reference internal" href="../library/socket.html#socket.socketpair" title="socket.socketpair"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.socketpair()</span></code></a> function instead,
 | ||
| it is available on all platforms since Python 3.5.
 | ||
| <code class="docutils literal notranslate"><span class="pre">asyncio.windows_utils.socketpair</span></code> was just an alias to
 | ||
| <code class="docutils literal notranslate"><span class="pre">socket.socketpair</span></code> on Python 3.5 and newer.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a> no longer exports the <a class="reference internal" href="../library/selectors.html#module-selectors" title="selectors: High-level I/O multiplexing."><code class="xref py py-mod docutils literal notranslate"><span class="pre">selectors</span></code></a> and
 | ||
| <code class="xref py py-mod docutils literal notranslate"><span class="pre">_overlapped</span></code> modules as <code class="docutils literal notranslate"><span class="pre">asyncio.selectors</span></code> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">asyncio._overlapped</span></code>. Replace <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">asyncio</span> <span class="pre">import</span> <span class="pre">selectors</span></code> with
 | ||
| <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">selectors</span></code>.</p></li>
 | ||
| <li><p>Direct instantiation of <a class="reference internal" href="../library/ssl.html#ssl.SSLSocket" title="ssl.SSLSocket"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLSocket</span></code></a> and <a class="reference internal" href="../library/ssl.html#ssl.SSLObject" title="ssl.SSLObject"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLObject</span></code></a>
 | ||
| objects is now prohibited. The constructors were never documented, tested,
 | ||
| or designed as public constructors.  Users were supposed to use
 | ||
| <code class="xref py py-func docutils literal notranslate"><span class="pre">ssl.wrap_socket()</span></code> or <a class="reference internal" href="../library/ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLContext</span></code></a>.
 | ||
| (Contributed by Christian Heimes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32951">bpo-32951</a>.)</p></li>
 | ||
| <li><p>The unused <code class="docutils literal notranslate"><span class="pre">distutils</span></code> <code class="docutils literal notranslate"><span class="pre">install_misc</span></code> command has been removed.
 | ||
| (Contributed by Eric N. Vander Weele in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29218">bpo-29218</a>.)</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="module-removals">
 | ||
| <h2>Module Removals<a class="headerlink" href="#module-removals" title="Link to this heading">¶</a></h2>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">fpectl</span></code> module has been removed.  It was never enabled by
 | ||
| default, never worked correctly on x86-64, and it changed the Python
 | ||
| ABI in ways that caused unexpected breakage of C extensions.
 | ||
| (Contributed by Nathaniel J. Smith in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29137">bpo-29137</a>.)</p>
 | ||
| </section>
 | ||
| <section id="windows-only-changes">
 | ||
| <h2>Windows-only Changes<a class="headerlink" href="#windows-only-changes" title="Link to this heading">¶</a></h2>
 | ||
| <p>The python launcher, (py.exe), can accept 32 & 64 bit specifiers <strong>without</strong>
 | ||
| having to specify a minor version as well. So <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-3-32</span></code> and <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-3-64</span></code>
 | ||
| become valid as well as <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-3.7-32</span></code>, also the -<em>m</em>-64 and -<em>m.n</em>-64 forms
 | ||
| are now accepted to force 64 bit python even if 32 bit would have otherwise
 | ||
| been used. If the specified version is not available py.exe will error exit.
 | ||
| (Contributed by Steve Barnes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30291">bpo-30291</a>.)</p>
 | ||
| <p>The launcher can be run as <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-0</span></code> to produce a list of the installed pythons,
 | ||
| <em>with default marked with an asterisk</em>. Running <code class="docutils literal notranslate"><span class="pre">py</span> <span class="pre">-0p</span></code> will include the paths.
 | ||
| If py is run with a version specifier that cannot be matched it will also print
 | ||
| the <em>short form</em> list of available specifiers.
 | ||
| (Contributed by Steve Barnes in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30362">bpo-30362</a>.)</p>
 | ||
| </section>
 | ||
| <section id="porting-to-python-3-7">
 | ||
| <span id="porting-to-python-37"></span><h2>Porting to Python 3.7<a class="headerlink" href="#porting-to-python-3-7" title="Link to this heading">¶</a></h2>
 | ||
| <p>This section lists previously described changes and other bugfixes
 | ||
| that may require changes to your code.</p>
 | ||
| <section id="changes-in-python-behavior">
 | ||
| <h3>Changes in Python Behavior<a class="headerlink" href="#changes-in-python-behavior" title="Link to this heading">¶</a></h3>
 | ||
| <ul>
 | ||
| <li><p><a class="reference internal" href="../reference/compound_stmts.html#async"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span></code></a> and <a class="reference internal" href="../reference/expressions.html#await"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">await</span></code></a> names are now reserved keywords.
 | ||
| Code using these names as identifiers will now raise a <a class="reference internal" href="../library/exceptions.html#SyntaxError" title="SyntaxError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SyntaxError</span></code></a>.
 | ||
| (Contributed by Jelle Zijlstra in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30406">bpo-30406</a>.)</p></li>
 | ||
| <li><p><span class="target" id="index-38"></span><a class="pep reference external" href="https://peps.python.org/pep-0479/"><strong>PEP 479</strong></a> is enabled for all code in Python 3.7, meaning that
 | ||
| <a class="reference internal" href="../library/exceptions.html#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal notranslate"><span class="pre">StopIteration</span></code></a> exceptions raised directly or indirectly in
 | ||
| coroutines and generators are transformed into <a class="reference internal" href="../library/exceptions.html#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">RuntimeError</span></code></a>
 | ||
| exceptions.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32670">bpo-32670</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../reference/datamodel.html#object.__aiter__" title="object.__aiter__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">object.__aiter__()</span></code></a> methods can no longer be declared as
 | ||
| asynchronous.  (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31709">bpo-31709</a>.)</p></li>
 | ||
| <li><p>Due to an oversight, earlier Python versions erroneously accepted the
 | ||
| following syntax:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">f</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">],)</span>
 | ||
| 
 | ||
| <span class="k">class</span><span class="w"> </span><span class="nc">C</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
 | ||
|     <span class="k">pass</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Python 3.7 now correctly raises a <a class="reference internal" href="../library/exceptions.html#SyntaxError" title="SyntaxError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SyntaxError</span></code></a>, as a generator
 | ||
| expression always needs to be directly inside a set of parentheses
 | ||
| and cannot have a comma on either side, and the duplication of the
 | ||
| parentheses can be omitted only on calls.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32012">bpo-32012</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32023">bpo-32023</a>.)</p>
 | ||
| </li>
 | ||
| <li><p>When using the <a class="reference internal" href="../using/cmdline.html#cmdoption-m"><code class="xref std std-option docutils literal notranslate"><span class="pre">-m</span></code></a> switch, the initial working directory is now added
 | ||
| to <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a>, rather than an empty string (which dynamically denoted
 | ||
| the current working directory at the time of each import). Any programs that
 | ||
| are checking for the empty string, or otherwise relying on the previous
 | ||
| behaviour, will need to be updated accordingly (e.g. by also checking for
 | ||
| <code class="docutils literal notranslate"><span class="pre">os.getcwd()</span></code> or <code class="docutils literal notranslate"><span class="pre">os.path.dirname(__main__.__file__)</span></code>, depending on why
 | ||
| the code was checking for the empty string in the first place).</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="changes-in-the-python-api">
 | ||
| <h3>Changes in the Python API<a class="headerlink" href="#changes-in-the-python-api" title="Link to this heading">¶</a></h3>
 | ||
| <ul>
 | ||
| <li><p><code class="xref py py-meth docutils literal notranslate"><span class="pre">socketserver.ThreadingMixIn.server_close()</span></code> now waits until all
 | ||
| non-daemon threads complete.  Set the new
 | ||
| <a class="reference internal" href="../library/socketserver.html#socketserver.ThreadingMixIn.block_on_close" title="socketserver.ThreadingMixIn.block_on_close"><code class="xref py py-attr docutils literal notranslate"><span class="pre">socketserver.ThreadingMixIn.block_on_close</span></code></a> class attribute to
 | ||
| <code class="docutils literal notranslate"><span class="pre">False</span></code> to get the pre-3.7 behaviour.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31233">bpo-31233</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33540">bpo-33540</a>.)</p></li>
 | ||
| <li><p><code class="xref py py-meth docutils literal notranslate"><span class="pre">socketserver.ForkingMixIn.server_close()</span></code> now waits until all
 | ||
| child processes complete. Set the new
 | ||
| <code class="xref py py-attr docutils literal notranslate"><span class="pre">socketserver.ForkingMixIn.block_on_close</span></code> class attribute to <code class="docutils literal notranslate"><span class="pre">False</span></code>
 | ||
| to get the pre-3.7 behaviour.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31151">bpo-31151</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33540">bpo-33540</a>.)</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/locale.html#locale.localeconv" title="locale.localeconv"><code class="xref py py-func docutils literal notranslate"><span class="pre">locale.localeconv()</span></code></a> function now temporarily sets the <code class="docutils literal notranslate"><span class="pre">LC_CTYPE</span></code>
 | ||
| locale to the value of <code class="docutils literal notranslate"><span class="pre">LC_NUMERIC</span></code> in some cases.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31900">bpo-31900</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/pkgutil.html#pkgutil.walk_packages" title="pkgutil.walk_packages"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pkgutil.walk_packages()</span></code></a> now raises a <a class="reference internal" href="../library/exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if <em>path</em> is
 | ||
| a string.  Previously an empty list was returned.
 | ||
| (Contributed by Sanyam Khurana in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=24744">bpo-24744</a>.)</p></li>
 | ||
| <li><p>A format string argument for <a class="reference internal" href="../library/string.html#string.Formatter.format" title="string.Formatter.format"><code class="xref py py-meth docutils literal notranslate"><span class="pre">string.Formatter.format()</span></code></a>
 | ||
| is now <a class="reference internal" href="../glossary.html#positional-only-parameter"><span class="std std-ref">positional-only</span></a>.
 | ||
| Passing it as a keyword argument was deprecated in Python 3.5. (Contributed
 | ||
| by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29193">bpo-29193</a>.)</p></li>
 | ||
| <li><p>Attributes <a class="reference internal" href="../library/http.cookies.html#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal notranslate"><span class="pre">key</span></code></a>,
 | ||
| <a class="reference internal" href="../library/http.cookies.html#http.cookies.Morsel.value" title="http.cookies.Morsel.value"><code class="xref py py-attr docutils literal notranslate"><span class="pre">value</span></code></a> and
 | ||
| <a class="reference internal" href="../library/http.cookies.html#http.cookies.Morsel.coded_value" title="http.cookies.Morsel.coded_value"><code class="xref py py-attr docutils literal notranslate"><span class="pre">coded_value</span></code></a> of class
 | ||
| <a class="reference internal" href="../library/http.cookies.html#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal notranslate"><span class="pre">http.cookies.Morsel</span></code></a> are now read-only.
 | ||
| Assigning to them was deprecated in Python 3.5.
 | ||
| Use the <a class="reference internal" href="../library/http.cookies.html#http.cookies.Morsel.set" title="http.cookies.Morsel.set"><code class="xref py py-meth docutils literal notranslate"><span class="pre">set()</span></code></a> method for setting them.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29192">bpo-29192</a>.)</p></li>
 | ||
| <li><p>The <em>mode</em> argument of <a class="reference internal" href="../library/os.html#os.makedirs" title="os.makedirs"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.makedirs()</span></code></a> no longer affects the file
 | ||
| permission bits of newly created intermediate-level directories.
 | ||
| To set their file permission bits you can set the umask before invoking
 | ||
| <code class="docutils literal notranslate"><span class="pre">makedirs()</span></code>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=19930">bpo-19930</a>.)</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/struct.html#struct.Struct.format" title="struct.Struct.format"><code class="xref py py-attr docutils literal notranslate"><span class="pre">struct.Struct.format</span></code></a> type is now <a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> instead of
 | ||
| <a class="reference internal" href="../library/stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a>. (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=21071">bpo-21071</a>.)</p></li>
 | ||
| <li><p><code class="xref py py-func docutils literal notranslate"><span class="pre">cgi.parse_multipart()</span></code> now accepts the <em>encoding</em> and <em>errors</em>
 | ||
| arguments and returns the same results as
 | ||
| <code class="xref py py-class docutils literal notranslate"><span class="pre">FieldStorage</span></code>: for non-file fields, the value associated to a key
 | ||
| is a list of strings, not bytes.
 | ||
| (Contributed by Pierre Quentel in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29979">bpo-29979</a>.)</p></li>
 | ||
| <li><p>Due to internal changes in <a class="reference internal" href="../library/socket.html#module-socket" title="socket: Low-level networking interface."><code class="xref py py-mod docutils literal notranslate"><span class="pre">socket</span></code></a>, calling <a class="reference internal" href="../library/socket.html#socket.fromshare" title="socket.fromshare"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.fromshare()</span></code></a>
 | ||
| on a socket created by <a class="reference internal" href="../library/socket.html#socket.socket.share" title="socket.socket.share"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.share</span></code></a> in older
 | ||
| Python versions is not supported.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">repr</span></code> for <a class="reference internal" href="../library/exceptions.html#BaseException" title="BaseException"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BaseException</span></code></a> has changed to not include the trailing
 | ||
| comma.  Most exceptions are affected by this change.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30399">bpo-30399</a>.)</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">repr</span></code> for <a class="reference internal" href="../library/datetime.html#datetime.timedelta" title="datetime.timedelta"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.timedelta</span></code></a> has changed to include the keyword
 | ||
| arguments in the output. (Contributed by Utkarsh Upadhyay in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30302">bpo-30302</a>.)</p></li>
 | ||
| <li><p>Because <a class="reference internal" href="../library/shutil.html#shutil.rmtree" title="shutil.rmtree"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.rmtree()</span></code></a> is now implemented using the <a class="reference internal" href="../library/os.html#os.scandir" title="os.scandir"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.scandir()</span></code></a>
 | ||
| function, the user specified handler <em>onerror</em> is now called with the first
 | ||
| argument <code class="docutils literal notranslate"><span class="pre">os.scandir</span></code> instead of <code class="docutils literal notranslate"><span class="pre">os.listdir</span></code> when listing the directory
 | ||
| is failed.</p></li>
 | ||
| <li><p>Support for nested sets and set operations in regular expressions as in
 | ||
| <a class="reference external" href="https://unicode.org/reports/tr18/">Unicode Technical Standard #18</a> might be added in the future.  This would
 | ||
| change the syntax.  To facilitate this future change a <a class="reference internal" href="../library/exceptions.html#FutureWarning" title="FutureWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FutureWarning</span></code></a>
 | ||
| will be raised in ambiguous cases for the time being.
 | ||
| That include sets starting with a literal <code class="docutils literal notranslate"><span class="pre">'['</span></code> or containing literal
 | ||
| character sequences <code class="docutils literal notranslate"><span class="pre">'--'</span></code>, <code class="docutils literal notranslate"><span class="pre">'&&'</span></code>, <code class="docutils literal notranslate"><span class="pre">'~~'</span></code>, and <code class="docutils literal notranslate"><span class="pre">'||'</span></code>.  To
 | ||
| avoid a warning, escape them with a backslash.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=30349">bpo-30349</a>.)</p>
 | ||
| </li>
 | ||
| <li><p>The result of splitting a string on a <a class="reference internal" href="../library/re.html#module-re" title="re: Regular expression operations."><code class="xref py py-mod docutils literal notranslate"><span class="pre">regular</span> <span class="pre">expression</span></code></a>
 | ||
| that could match an empty string has been changed.  For example
 | ||
| splitting on <code class="docutils literal notranslate"><span class="pre">r'\s*'</span></code> will now split not only on whitespaces as it
 | ||
| did previously, but also on empty strings before all non-whitespace
 | ||
| characters and just before the end of the string.
 | ||
| The previous behavior can be restored by changing the pattern
 | ||
| to <code class="docutils literal notranslate"><span class="pre">r'\s+'</span></code>.  A <a class="reference internal" href="../library/exceptions.html#FutureWarning" title="FutureWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FutureWarning</span></code></a> was emitted for such patterns since
 | ||
| Python 3.5.</p>
 | ||
| <p>For patterns that match both empty and non-empty strings, the result of
 | ||
| searching for all matches may also be changed in other cases.  For example
 | ||
| in the string <code class="docutils literal notranslate"><span class="pre">'a\n\n'</span></code>, the pattern <code class="docutils literal notranslate"><span class="pre">r'(?m)^\s*?$'</span></code> will not only
 | ||
| match empty strings at positions 2 and 3, but also the string <code class="docutils literal notranslate"><span class="pre">'\n'</span></code> at
 | ||
| positions 2–3.  To match only blank lines, the pattern should be rewritten
 | ||
| as <code class="docutils literal notranslate"><span class="pre">r'(?m)^[^\S\n]*$'</span></code>.</p>
 | ||
| <p><a class="reference internal" href="../library/re.html#re.sub" title="re.sub"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.sub()</span></code></a> now replaces empty matches adjacent to a previous
 | ||
| non-empty match.  For example <code class="docutils literal notranslate"><span class="pre">re.sub('x*',</span> <span class="pre">'-',</span> <span class="pre">'abxd')</span></code> returns now
 | ||
| <code class="docutils literal notranslate"><span class="pre">'-a-b--d-'</span></code> instead of <code class="docutils literal notranslate"><span class="pre">'-a-b-d-'</span></code> (the first minus between ‘b’ and
 | ||
| ‘d’ replaces ‘x’, and the second minus replaces an empty string between
 | ||
| ‘x’ and ‘d’).</p>
 | ||
| <p>(Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25054">bpo-25054</a> and <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32308">bpo-32308</a>.)</p>
 | ||
| </li>
 | ||
| <li><p>Change <a class="reference internal" href="../library/re.html#re.escape" title="re.escape"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.escape()</span></code></a> to only escape regex special characters instead
 | ||
| of escaping all characters other than ASCII letters, numbers, and <code class="docutils literal notranslate"><span class="pre">'_'</span></code>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=29995">bpo-29995</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/tracemalloc.html#tracemalloc.Traceback" title="tracemalloc.Traceback"><code class="xref py py-class docutils literal notranslate"><span class="pre">tracemalloc.Traceback</span></code></a> frames are now sorted from oldest to most
 | ||
| recent to be more consistent with <a class="reference internal" href="../library/traceback.html#module-traceback" title="traceback: Print or retrieve a stack traceback."><code class="xref py py-mod docutils literal notranslate"><span class="pre">traceback</span></code></a>.
 | ||
| (Contributed by Jesse Bakker in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32121">bpo-32121</a>.)</p></li>
 | ||
| <li><p>On OSes that support <a class="reference internal" href="../library/socket.html#socket.SOCK_NONBLOCK" title="socket.SOCK_NONBLOCK"><code class="xref py py-const docutils literal notranslate"><span class="pre">socket.SOCK_NONBLOCK</span></code></a> or
 | ||
| <a class="reference internal" href="../library/socket.html#socket.SOCK_CLOEXEC" title="socket.SOCK_CLOEXEC"><code class="xref py py-const docutils literal notranslate"><span class="pre">socket.SOCK_CLOEXEC</span></code></a> bit flags, the
 | ||
| <a class="reference internal" href="../library/socket.html#socket.socket.type" title="socket.socket.type"><code class="xref py py-attr docutils literal notranslate"><span class="pre">socket.type</span></code></a> no longer has them applied.
 | ||
| Therefore, checks like <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">sock.type</span> <span class="pre">==</span> <span class="pre">socket.SOCK_STREAM</span></code>
 | ||
| work as expected on all platforms.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32331">bpo-32331</a>.)</p></li>
 | ||
| <li><p>On Windows the default for the <em>close_fds</em> argument of
 | ||
| <a class="reference internal" href="../library/subprocess.html#subprocess.Popen" title="subprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">subprocess.Popen</span></code></a> was changed from <a class="reference internal" href="../library/constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> to <a class="reference internal" href="../library/constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a>
 | ||
| when redirecting the standard handles. If you previously depended on handles
 | ||
| being inherited when using <a class="reference internal" href="../library/subprocess.html#subprocess.Popen" title="subprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">subprocess.Popen</span></code></a> with standard io
 | ||
| redirection, you will have to pass <code class="docutils literal notranslate"><span class="pre">close_fds=False</span></code> to preserve the
 | ||
| previous behaviour, or use
 | ||
| <a class="reference internal" href="../library/subprocess.html#subprocess.STARTUPINFO.lpAttributeList" title="subprocess.STARTUPINFO.lpAttributeList"><code class="xref py py-attr docutils literal notranslate"><span class="pre">STARTUPINFO.lpAttributeList</span></code></a>.</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/importlib.html#importlib.machinery.PathFinder.invalidate_caches" title="importlib.machinery.PathFinder.invalidate_caches"><code class="xref py py-meth docutils literal notranslate"><span class="pre">importlib.machinery.PathFinder.invalidate_caches()</span></code></a> – which implicitly
 | ||
| affects <a class="reference internal" href="../library/importlib.html#importlib.invalidate_caches" title="importlib.invalidate_caches"><code class="xref py py-func docutils literal notranslate"><span class="pre">importlib.invalidate_caches()</span></code></a> – now deletes entries
 | ||
| in <a class="reference internal" href="../library/sys.html#sys.path_importer_cache" title="sys.path_importer_cache"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path_importer_cache</span></code></a> which are set to <code class="docutils literal notranslate"><span class="pre">None</span></code>.
 | ||
| (Contributed by Brett Cannon in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33169">bpo-33169</a>.)</p></li>
 | ||
| <li><p>In <a class="reference internal" href="../library/asyncio.html#module-asyncio" title="asyncio: Asynchronous I/O."><code class="xref py py-mod docutils literal notranslate"><span class="pre">asyncio</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.sock_recv" title="asyncio.loop.sock_recv"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.sock_recv()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.sock_sendall" title="asyncio.loop.sock_sendall"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.sock_sendall()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.sock_accept" title="asyncio.loop.sock_accept"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.sock_accept()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.getaddrinfo" title="asyncio.loop.getaddrinfo"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.getaddrinfo()</span></code></a>,
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.getnameinfo" title="asyncio.loop.getnameinfo"><code class="xref py py-meth docutils literal notranslate"><span class="pre">loop.getnameinfo()</span></code></a>
 | ||
| have been changed to be proper coroutine methods to match their
 | ||
| documentation.  Previously, these methods returned <a class="reference internal" href="../library/asyncio-future.html#asyncio.Future" title="asyncio.Future"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Future</span></code></a>
 | ||
| instances.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32327">bpo-32327</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.Server.sockets" title="asyncio.Server.sockets"><code class="xref py py-attr docutils literal notranslate"><span class="pre">asyncio.Server.sockets</span></code></a> now returns a copy of the internal list
 | ||
| of server sockets, instead of returning it directly.
 | ||
| (Contributed by Yury Selivanov in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32662">bpo-32662</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/struct.html#struct.Struct.format" title="struct.Struct.format"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Struct.format</span></code></a> is now a <a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> instance
 | ||
| instead of a <a class="reference internal" href="../library/stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> instance.
 | ||
| (Contributed by Victor Stinner in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=21071">bpo-21071</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/argparse.html#module-argparse" title="argparse: Command-line option and argument parsing library."><code class="xref py py-mod docutils literal notranslate"><span class="pre">argparse</span></code></a> subparsers can now be made mandatory by passing <code class="docutils literal notranslate"><span class="pre">required=True</span></code>
 | ||
| to <a class="reference internal" href="../library/argparse.html#argparse.ArgumentParser.add_subparsers" title="argparse.ArgumentParser.add_subparsers"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ArgumentParser.add_subparsers()</span></code></a>.
 | ||
| (Contributed by Anthony Sottile in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=26510">bpo-26510</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/ast.html#ast.literal_eval" title="ast.literal_eval"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ast.literal_eval()</span></code></a> is now stricter.  Addition and subtraction of
 | ||
| arbitrary numbers are no longer allowed.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=31778">bpo-31778</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/calendar.html#calendar.Calendar.itermonthdates" title="calendar.Calendar.itermonthdates"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Calendar.itermonthdates</span></code></a>
 | ||
| will now consistently raise an exception when a date falls outside of the
 | ||
| <code class="docutils literal notranslate"><span class="pre">0001-01-01</span></code> through <code class="docutils literal notranslate"><span class="pre">9999-12-31</span></code> range.  To support applications that
 | ||
| cannot tolerate such exceptions, the new
 | ||
| <a class="reference internal" href="../library/calendar.html#calendar.Calendar.itermonthdays3" title="calendar.Calendar.itermonthdays3"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Calendar.itermonthdays3</span></code></a> and
 | ||
| <a class="reference internal" href="../library/calendar.html#calendar.Calendar.itermonthdays4" title="calendar.Calendar.itermonthdays4"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Calendar.itermonthdays4</span></code></a> can be used.
 | ||
| The new methods return tuples and are not restricted by the range supported by
 | ||
| <a class="reference internal" href="../library/datetime.html#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.date</span></code></a>.
 | ||
| (Contributed by Alexander Belopolsky in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28292">bpo-28292</a>.)</p></li>
 | ||
| <li><p><a class="reference internal" href="../library/collections.html#collections.ChainMap" title="collections.ChainMap"><code class="xref py py-class docutils literal notranslate"><span class="pre">collections.ChainMap</span></code></a> now preserves the order of the underlying
 | ||
| mappings.  (Contributed by Raymond Hettinger in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32792">bpo-32792</a>.)</p></li>
 | ||
| <li><p>The <code class="docutils literal notranslate"><span class="pre">submit()</span></code> method of <a class="reference internal" href="../library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor" title="concurrent.futures.ThreadPoolExecutor"><code class="xref py py-class docutils literal notranslate"><span class="pre">concurrent.futures.ThreadPoolExecutor</span></code></a>
 | ||
| and <a class="reference internal" href="../library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor" title="concurrent.futures.ProcessPoolExecutor"><code class="xref py py-class docutils literal notranslate"><span class="pre">concurrent.futures.ProcessPoolExecutor</span></code></a> now raises
 | ||
| a <a class="reference internal" href="../library/exceptions.html#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">RuntimeError</span></code></a> if called during interpreter shutdown.
 | ||
| (Contributed by Mark Nemec in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33097">bpo-33097</a>.)</p></li>
 | ||
| <li><p>The <a class="reference internal" href="../library/configparser.html#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">configparser.ConfigParser</span></code></a> constructor now uses <code class="docutils literal notranslate"><span class="pre">read_dict()</span></code>
 | ||
| to process the default values, making its behavior consistent with the
 | ||
| rest of the parser.  Non-string keys and values in the defaults
 | ||
| dictionary are now being implicitly converted to strings.
 | ||
| (Contributed by James Tocknell in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=23835">bpo-23835</a>.)</p></li>
 | ||
| <li><p>Several undocumented internal imports were removed.
 | ||
| One example is that <code class="docutils literal notranslate"><span class="pre">os.errno</span></code> is no longer available; use <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">errno</span></code>
 | ||
| directly instead.
 | ||
| Note that such undocumented internal imports may be removed any time without
 | ||
| notice, even in micro version releases.</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="changes-in-the-c-api">
 | ||
| <h3>Changes in the C API<a class="headerlink" href="#changes-in-the-c-api" title="Link to this heading">¶</a></h3>
 | ||
| <p>The function <a class="reference internal" href="../c-api/slice.html#c.PySlice_GetIndicesEx" title="PySlice_GetIndicesEx"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code></a> is considered unsafe for
 | ||
| resizable sequences.  If the slice indices are not instances of <a class="reference internal" href="../library/functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>,
 | ||
| but objects that implement the <code class="xref py py-meth docutils literal notranslate"><span class="pre">__index__()</span></code> method, the sequence can be
 | ||
| resized after passing its length to <code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code>.  This
 | ||
| can lead to returning indices out of the length of the sequence.  For
 | ||
| avoiding possible problems use new functions <a class="reference internal" href="../c-api/slice.html#c.PySlice_Unpack" title="PySlice_Unpack"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_Unpack()</span></code></a> and
 | ||
| <a class="reference internal" href="../c-api/slice.html#c.PySlice_AdjustIndices" title="PySlice_AdjustIndices"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_AdjustIndices()</span></code></a>.
 | ||
| (Contributed by Serhiy Storchaka in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=27867">bpo-27867</a>.)</p>
 | ||
| </section>
 | ||
| <section id="cpython-bytecode-changes">
 | ||
| <h3>CPython bytecode changes<a class="headerlink" href="#cpython-bytecode-changes" title="Link to this heading">¶</a></h3>
 | ||
| <p>There are two new opcodes: <a class="reference internal" href="../library/dis.html#opcode-LOAD_METHOD"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_METHOD</span></code></a> and <code class="xref std std-opcode docutils literal notranslate"><span class="pre">CALL_METHOD</span></code>.
 | ||
| (Contributed by Yury Selivanov and INADA Naoki in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=26110">bpo-26110</a>.)</p>
 | ||
| <p>The <code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_ANNOTATION</span></code> opcode has been removed.
 | ||
| (Contributed by Mark Shannon in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=32550">bpo-32550</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id12">
 | ||
| <h3>Windows-only Changes<a class="headerlink" href="#id12" title="Link to this heading">¶</a></h3>
 | ||
| <p>The file used to override <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a> is now called
 | ||
| <code class="docutils literal notranslate"><span class="pre"><python-executable>._pth</span></code> instead of <code class="docutils literal notranslate"><span class="pre">'sys.path'</span></code>.
 | ||
| See <a class="reference internal" href="../using/windows.html#windows-finding-modules"><span class="std std-ref">Finding modules</span></a> for more information.
 | ||
| (Contributed by Steve Dower in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=28137">bpo-28137</a>.)</p>
 | ||
| </section>
 | ||
| <section id="id13">
 | ||
| <h3>Other CPython implementation changes<a class="headerlink" href="#id13" title="Link to this heading">¶</a></h3>
 | ||
| <p>In preparation for potential future changes to the public CPython runtime
 | ||
| initialization API (see <span class="target" id="index-39"></span><a class="pep reference external" href="https://peps.python.org/pep-0432/"><strong>PEP 432</strong></a> for an initial, but somewhat outdated,
 | ||
| draft), CPython’s internal startup
 | ||
| and configuration management logic has been significantly refactored. While
 | ||
| these updates are intended to be entirely transparent to both embedding
 | ||
| applications and users of the regular CPython CLI, they’re being mentioned
 | ||
| here as the refactoring changes the internal order of various operations
 | ||
| during interpreter startup, and hence may uncover previously latent defects,
 | ||
| either in embedding applications, or in CPython itself.
 | ||
| (Initially contributed by Nick Coghlan and Eric Snow as part of
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=22257">bpo-22257</a>, and further updated by Nick, Eric, and Victor Stinner in a
 | ||
| number of other issues). Some known details affected:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><code class="xref c c-func docutils literal notranslate"><span class="pre">PySys_AddWarnOptionUnicode()</span></code> is not currently usable by embedding
 | ||
| applications due to the requirement to create a Unicode object prior to
 | ||
| calling <code class="docutils literal notranslate"><span class="pre">Py_Initialize</span></code>. Use <code class="xref c c-func docutils literal notranslate"><span class="pre">PySys_AddWarnOption()</span></code> instead.</p></li>
 | ||
| <li><p>warnings filters added by an embedding application with
 | ||
| <code class="xref c c-func docutils literal notranslate"><span class="pre">PySys_AddWarnOption()</span></code> should now more consistently take precedence
 | ||
| over the default filters set by the interpreter</p></li>
 | ||
| </ul>
 | ||
| <p>Due to changes in the way the default warnings filters are configured,
 | ||
| setting <a class="reference internal" href="../c-api/init.html#c.Py_BytesWarningFlag" title="Py_BytesWarningFlag"><code class="xref c c-data docutils literal notranslate"><span class="pre">Py_BytesWarningFlag</span></code></a> to a value greater than one is no longer
 | ||
| sufficient to both emit <a class="reference internal" href="../library/exceptions.html#BytesWarning" title="BytesWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">BytesWarning</span></code></a> messages and have them converted
 | ||
| to exceptions.  Instead, the flag must be set (to cause the warnings to be
 | ||
| emitted in the first place), and an explicit <code class="docutils literal notranslate"><span class="pre">error::BytesWarning</span></code>
 | ||
| warnings filter added to convert them to exceptions.</p>
 | ||
| <p>Due to a change in the way docstrings are handled by the compiler, the
 | ||
| implicit <code class="docutils literal notranslate"><span class="pre">return</span> <span class="pre">None</span></code> in a function body consisting solely of a docstring
 | ||
| is now marked as occurring on the same line as the docstring, not on the
 | ||
| function’s header line.</p>
 | ||
| <p>The current exception state has been moved from the frame object to the co-routine.
 | ||
| This simplified the interpreter and fixed a couple of obscure bugs caused by
 | ||
| having swap exception state when entering or exiting a generator.
 | ||
| (Contributed by Mark Shannon in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=25612">bpo-25612</a>.)</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="notable-changes-in-python-3-7-1">
 | ||
| <h2>Notable changes in Python 3.7.1<a class="headerlink" href="#notable-changes-in-python-3-7-1" title="Link to this heading">¶</a></h2>
 | ||
| <p>Starting in 3.7.1, <a class="reference internal" href="../c-api/init.html#c.Py_Initialize" title="Py_Initialize"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Initialize()</span></code></a> now consistently reads and respects
 | ||
| all of the same environment settings as <a class="reference internal" href="../c-api/init.html#c.Py_Main" title="Py_Main"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Main()</span></code></a> (in earlier Python
 | ||
| versions, it respected an ill-defined subset of those environment variables,
 | ||
| while in Python 3.7.0 it didn’t read any of them due to <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=34247">bpo-34247</a>). If
 | ||
| this behavior is unwanted, set <a class="reference internal" href="../c-api/init.html#c.Py_IgnoreEnvironmentFlag" title="Py_IgnoreEnvironmentFlag"><code class="xref c c-data docutils literal notranslate"><span class="pre">Py_IgnoreEnvironmentFlag</span></code></a> to 1 before
 | ||
| calling <a class="reference internal" href="../c-api/init.html#c.Py_Initialize" title="Py_Initialize"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Initialize()</span></code></a>.</p>
 | ||
| <p>In 3.7.1 the C API for Context Variables
 | ||
| <a class="reference internal" href="../c-api/contextvars.html#contextvarsobjects-pointertype-change"><span class="std std-ref">was updated</span></a> to use
 | ||
| <a class="reference internal" href="../c-api/structures.html#c.PyObject" title="PyObject"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyObject</span></code></a> pointers.  See also <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=34762">bpo-34762</a>.</p>
 | ||
| <p>In 3.7.1 the <a class="reference internal" href="../library/tokenize.html#module-tokenize" title="tokenize: Lexical scanner for Python source code."><code class="xref py py-mod docutils literal notranslate"><span class="pre">tokenize</span></code></a> module now implicitly emits a <code class="docutils literal notranslate"><span class="pre">NEWLINE</span></code> token
 | ||
| when provided with input that does not have a trailing new line.  This behavior
 | ||
| now matches what the C tokenizer does internally.
 | ||
| (Contributed by Ammar Askar in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=33899">bpo-33899</a>.)</p>
 | ||
| </section>
 | ||
| <section id="notable-changes-in-python-3-7-2">
 | ||
| <h2>Notable changes in Python 3.7.2<a class="headerlink" href="#notable-changes-in-python-3-7-2" title="Link to this heading">¶</a></h2>
 | ||
| <p>In 3.7.2, <a class="reference internal" href="../library/venv.html#module-venv" title="venv: Creation of virtual environments."><code class="xref py py-mod docutils literal notranslate"><span class="pre">venv</span></code></a> on Windows no longer copies the original binaries, but
 | ||
| creates redirector scripts named <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> and <code class="docutils literal notranslate"><span class="pre">pythonw.exe</span></code> instead.
 | ||
| This resolves a long standing issue where all virtual environments would have
 | ||
| to be upgraded or recreated with each Python update. However, note that this
 | ||
| release will still require recreation of virtual environments in order to get
 | ||
| the new scripts.</p>
 | ||
| </section>
 | ||
| <section id="notable-changes-in-python-3-7-6">
 | ||
| <h2>Notable changes in Python 3.7.6<a class="headerlink" href="#notable-changes-in-python-3-7-6" title="Link to this heading">¶</a></h2>
 | ||
| <p>Due to significant security concerns, the <em>reuse_address</em> parameter of
 | ||
| <a class="reference internal" href="../library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint" title="asyncio.loop.create_datagram_endpoint"><code class="xref py py-meth docutils literal notranslate"><span class="pre">asyncio.loop.create_datagram_endpoint()</span></code></a> is no longer supported. This is
 | ||
| because of the behavior of the socket option <code class="docutils literal notranslate"><span class="pre">SO_REUSEADDR</span></code> in UDP. For more
 | ||
| details, see the documentation for <code class="docutils literal notranslate"><span class="pre">loop.create_datagram_endpoint()</span></code>.
 | ||
| (Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
 | ||
| <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=37228">bpo-37228</a>.)</p>
 | ||
| </section>
 | ||
| <section id="notable-changes-in-python-3-7-10">
 | ||
| <h2>Notable changes in Python 3.7.10<a class="headerlink" href="#notable-changes-in-python-3-7-10" title="Link to this heading">¶</a></h2>
 | ||
| <p>Earlier Python versions allowed using both <code class="docutils literal notranslate"><span class="pre">;</span></code> and <code class="docutils literal notranslate"><span class="pre">&</span></code> as
 | ||
| query parameter separators in <a class="reference internal" href="../library/urllib.parse.html#urllib.parse.parse_qs" title="urllib.parse.parse_qs"><code class="xref py py-func docutils literal notranslate"><span class="pre">urllib.parse.parse_qs()</span></code></a> and
 | ||
| <a class="reference internal" href="../library/urllib.parse.html#urllib.parse.parse_qsl" title="urllib.parse.parse_qsl"><code class="xref py py-func docutils literal notranslate"><span class="pre">urllib.parse.parse_qsl()</span></code></a>.  Due to security concerns, and to conform with
 | ||
| newer W3C recommendations, this has been changed to allow only a single
 | ||
| separator key, with <code class="docutils literal notranslate"><span class="pre">&</span></code> as the default.  This change also affects
 | ||
| <code class="xref py py-func docutils literal notranslate"><span class="pre">cgi.parse()</span></code> and <code class="xref py py-func docutils literal notranslate"><span class="pre">cgi.parse_multipart()</span></code> as they use the affected
 | ||
| functions internally. For more details, please see their respective
 | ||
| documentation.
 | ||
| (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in <a class="reference external" href="https://bugs.python.org/issue?@action=redirect&bpo=42967">bpo-42967</a>.)</p>
 | ||
| </section>
 | ||
| <section id="notable-changes-in-python-3-7-11">
 | ||
| <h2>Notable changes in Python 3.7.11<a class="headerlink" href="#notable-changes-in-python-3-7-11" title="Link to this heading">¶</a></h2>
 | ||
| <p>A security fix alters the <a class="reference internal" href="../library/ftplib.html#ftplib.FTP" title="ftplib.FTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">ftplib.FTP</span></code></a> behavior to not trust the
 | ||
| IPv4 address sent from the remote server when setting up a passive data
 | ||
| channel.  We reuse the ftp server IP address instead.  For unusual code
 | ||
| requiring the old behavior, set a <code class="docutils literal notranslate"><span class="pre">trust_server_pasv_ipv4_address</span></code>
 | ||
| attribute on your FTP instance to <code class="docutils literal notranslate"><span class="pre">True</span></code>.  (See <a class="reference external" href="https://github.com/python/cpython/issues/87451">gh-87451</a>)</p>
 | ||
| <p>The presence of newline or tab characters in parts of a URL allows for some
 | ||
| forms of attacks. Following the WHATWG specification that updates RFC 3986,
 | ||
| ASCII newline <code class="docutils literal notranslate"><span class="pre">\n</span></code>, <code class="docutils literal notranslate"><span class="pre">\r</span></code> and tab <code class="docutils literal notranslate"><span class="pre">\t</span></code> characters are stripped from the
 | ||
| URL by the parser <a class="reference internal" href="../library/urllib.parse.html#module-urllib.parse" title="urllib.parse: Parse URLs into or assemble them from components."><code class="xref py py-func docutils literal notranslate"><span class="pre">urllib.parse()</span></code></a> preventing such attacks. The removal
 | ||
| characters are controlled by a new module level variable
 | ||
| <code class="docutils literal notranslate"><span class="pre">urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE</span></code>. (See <a class="reference external" href="https://github.com/python/cpython/issues/88048">gh-88048</a>)</p>
 | ||
| </section>
 | ||
| <section id="notable-security-feature-in-3-7-14">
 | ||
| <h2>Notable security feature in 3.7.14<a class="headerlink" href="#notable-security-feature-in-3-7-14" title="Link to this heading">¶</a></h2>
 | ||
| <p>Converting between <a class="reference internal" href="../library/functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> and <a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> in bases other than 2
 | ||
| (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
 | ||
| now raises a <a class="reference internal" href="../library/exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if the number of digits in string form is
 | ||
| above a limit to avoid potential denial of service attacks due to the
 | ||
| algorithmic complexity. This is a mitigation for <span class="target" id="index-40"></span><a class="cve reference external" href="https://www.cve.org/CVERecord?id=CVE-2020-10735"><strong>CVE 2020-10735</strong></a>.
 | ||
| This limit can be configured or disabled by environment variable, command
 | ||
| line flag, or <a class="reference internal" href="../library/sys.html#module-sys" title="sys: Access system-specific parameters and functions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">sys</span></code></a> APIs. See the <a class="reference internal" href="../library/stdtypes.html#int-max-str-digits"><span class="std std-ref">integer string conversion
 | ||
| length limitation</span></a> documentation.  The default limit
 | ||
| is 4300 digits in string form.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| 
 | ||
| 
 | ||
|             <div class="clearer"></div>
 | ||
|           </div>
 | ||
|         </div>
 | ||
|       </div>
 | ||
|       <div class="sphinxsidebar" role="navigation" aria-label="Main">
 | ||
|         <div class="sphinxsidebarwrapper">
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#">What’s New In Python 3.7</a><ul>
 | ||
| <li><a class="reference internal" href="#summary-release-highlights">Summary – Release Highlights</a></li>
 | ||
| <li><a class="reference internal" href="#new-features">New Features</a><ul>
 | ||
| <li><a class="reference internal" href="#pep-563-postponed-evaluation-of-annotations">PEP 563: Postponed Evaluation of Annotations</a></li>
 | ||
| <li><a class="reference internal" href="#pep-538-legacy-c-locale-coercion">PEP 538: Legacy C Locale Coercion</a></li>
 | ||
| <li><a class="reference internal" href="#pep-540-forced-utf-8-runtime-mode">PEP 540: Forced UTF-8 Runtime Mode</a></li>
 | ||
| <li><a class="reference internal" href="#pep-553-built-in-breakpoint">PEP 553: Built-in <code class="docutils literal notranslate"><span class="pre">breakpoint()</span></code></a></li>
 | ||
| <li><a class="reference internal" href="#pep-539-new-c-api-for-thread-local-storage">PEP 539: New C API for Thread-Local Storage</a></li>
 | ||
| <li><a class="reference internal" href="#pep-562-customization-of-access-to-module-attributes">PEP 562: Customization of Access to Module Attributes</a></li>
 | ||
| <li><a class="reference internal" href="#pep-564-new-time-functions-with-nanosecond-resolution">PEP 564: New Time Functions With Nanosecond Resolution</a></li>
 | ||
| <li><a class="reference internal" href="#pep-565-show-deprecationwarning-in-main">PEP 565: Show DeprecationWarning in <code class="docutils literal notranslate"><span class="pre">__main__</span></code></a></li>
 | ||
| <li><a class="reference internal" href="#pep-560-core-support-for-typing-module-and-generic-types">PEP 560: Core Support for <code class="docutils literal notranslate"><span class="pre">typing</span></code> module and Generic Types</a></li>
 | ||
| <li><a class="reference internal" href="#pep-552-hash-based-pyc-files">PEP 552: Hash-based .pyc Files</a></li>
 | ||
| <li><a class="reference internal" href="#pep-545-python-documentation-translations">PEP 545: Python Documentation Translations</a></li>
 | ||
| <li><a class="reference internal" href="#python-development-mode-x-dev">Python Development Mode (-X dev)</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#other-language-changes">Other Language Changes</a></li>
 | ||
| <li><a class="reference internal" href="#new-modules">New Modules</a><ul>
 | ||
| <li><a class="reference internal" href="#contextvars">contextvars</a></li>
 | ||
| <li><a class="reference internal" href="#dataclasses">dataclasses</a></li>
 | ||
| <li><a class="reference internal" href="#importlib-resources">importlib.resources</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#improved-modules">Improved Modules</a><ul>
 | ||
| <li><a class="reference internal" href="#argparse">argparse</a></li>
 | ||
| <li><a class="reference internal" href="#asyncio">asyncio</a></li>
 | ||
| <li><a class="reference internal" href="#binascii">binascii</a></li>
 | ||
| <li><a class="reference internal" href="#calendar">calendar</a></li>
 | ||
| <li><a class="reference internal" href="#collections">collections</a></li>
 | ||
| <li><a class="reference internal" href="#compileall">compileall</a></li>
 | ||
| <li><a class="reference internal" href="#concurrent-futures">concurrent.futures</a></li>
 | ||
| <li><a class="reference internal" href="#contextlib">contextlib</a></li>
 | ||
| <li><a class="reference internal" href="#cprofile">cProfile</a></li>
 | ||
| <li><a class="reference internal" href="#crypt">crypt</a></li>
 | ||
| <li><a class="reference internal" href="#datetime">datetime</a></li>
 | ||
| <li><a class="reference internal" href="#dbm">dbm</a></li>
 | ||
| <li><a class="reference internal" href="#decimal">decimal</a></li>
 | ||
| <li><a class="reference internal" href="#dis">dis</a></li>
 | ||
| <li><a class="reference internal" href="#distutils">distutils</a></li>
 | ||
| <li><a class="reference internal" href="#enum">enum</a></li>
 | ||
| <li><a class="reference internal" href="#functools">functools</a></li>
 | ||
| <li><a class="reference internal" href="#gc">gc</a></li>
 | ||
| <li><a class="reference internal" href="#hmac">hmac</a></li>
 | ||
| <li><a class="reference internal" href="#http-client">http.client</a></li>
 | ||
| <li><a class="reference internal" href="#http-server">http.server</a></li>
 | ||
| <li><a class="reference internal" href="#idlelib-and-idle">idlelib and IDLE</a></li>
 | ||
| <li><a class="reference internal" href="#importlib">importlib</a></li>
 | ||
| <li><a class="reference internal" href="#io">io</a></li>
 | ||
| <li><a class="reference internal" href="#ipaddress">ipaddress</a></li>
 | ||
| <li><a class="reference internal" href="#itertools">itertools</a></li>
 | ||
| <li><a class="reference internal" href="#locale">locale</a></li>
 | ||
| <li><a class="reference internal" href="#logging">logging</a></li>
 | ||
| <li><a class="reference internal" href="#math">math</a></li>
 | ||
| <li><a class="reference internal" href="#mimetypes">mimetypes</a></li>
 | ||
| <li><a class="reference internal" href="#msilib">msilib</a></li>
 | ||
| <li><a class="reference internal" href="#multiprocessing">multiprocessing</a></li>
 | ||
| <li><a class="reference internal" href="#os">os</a></li>
 | ||
| <li><a class="reference internal" href="#pathlib">pathlib</a></li>
 | ||
| <li><a class="reference internal" href="#pdb">pdb</a></li>
 | ||
| <li><a class="reference internal" href="#py-compile">py_compile</a></li>
 | ||
| <li><a class="reference internal" href="#pydoc">pydoc</a></li>
 | ||
| <li><a class="reference internal" href="#queue">queue</a></li>
 | ||
| <li><a class="reference internal" href="#re">re</a></li>
 | ||
| <li><a class="reference internal" href="#signal">signal</a></li>
 | ||
| <li><a class="reference internal" href="#socket">socket</a></li>
 | ||
| <li><a class="reference internal" href="#socketserver">socketserver</a></li>
 | ||
| <li><a class="reference internal" href="#sqlite3">sqlite3</a></li>
 | ||
| <li><a class="reference internal" href="#ssl">ssl</a></li>
 | ||
| <li><a class="reference internal" href="#string">string</a></li>
 | ||
| <li><a class="reference internal" href="#subprocess">subprocess</a></li>
 | ||
| <li><a class="reference internal" href="#sys">sys</a></li>
 | ||
| <li><a class="reference internal" href="#time">time</a></li>
 | ||
| <li><a class="reference internal" href="#tkinter">tkinter</a></li>
 | ||
| <li><a class="reference internal" href="#tracemalloc">tracemalloc</a></li>
 | ||
| <li><a class="reference internal" href="#types">types</a></li>
 | ||
| <li><a class="reference internal" href="#unicodedata">unicodedata</a></li>
 | ||
| <li><a class="reference internal" href="#unittest">unittest</a></li>
 | ||
| <li><a class="reference internal" href="#unittest-mock">unittest.mock</a></li>
 | ||
| <li><a class="reference internal" href="#urllib-parse">urllib.parse</a></li>
 | ||
| <li><a class="reference internal" href="#uu">uu</a></li>
 | ||
| <li><a class="reference internal" href="#uuid">uuid</a></li>
 | ||
| <li><a class="reference internal" href="#warnings">warnings</a></li>
 | ||
| <li><a class="reference internal" href="#xml">xml</a></li>
 | ||
| <li><a class="reference internal" href="#xml-etree">xml.etree</a></li>
 | ||
| <li><a class="reference internal" href="#xmlrpc-server">xmlrpc.server</a></li>
 | ||
| <li><a class="reference internal" href="#zipapp">zipapp</a></li>
 | ||
| <li><a class="reference internal" href="#zipfile">zipfile</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#c-api-changes">C API Changes</a></li>
 | ||
| <li><a class="reference internal" href="#build-changes">Build Changes</a></li>
 | ||
| <li><a class="reference internal" href="#optimizations">Optimizations</a></li>
 | ||
| <li><a class="reference internal" href="#other-cpython-implementation-changes">Other CPython Implementation Changes</a></li>
 | ||
| <li><a class="reference internal" href="#deprecated-python-behavior">Deprecated Python Behavior</a></li>
 | ||
| <li><a class="reference internal" href="#deprecated-python-modules-functions-and-methods">Deprecated Python modules, functions and methods</a><ul>
 | ||
| <li><a class="reference internal" href="#aifc">aifc</a></li>
 | ||
| <li><a class="reference internal" href="#whatsnew37-asyncio-deprecated">asyncio</a></li>
 | ||
| <li><a class="reference internal" href="#id3">collections</a></li>
 | ||
| <li><a class="reference internal" href="#id4">dbm</a></li>
 | ||
| <li><a class="reference internal" href="#id5">enum</a></li>
 | ||
| <li><a class="reference internal" href="#gettext">gettext</a></li>
 | ||
| <li><a class="reference internal" href="#id6">importlib</a></li>
 | ||
| <li><a class="reference internal" href="#id7">locale</a></li>
 | ||
| <li><a class="reference internal" href="#macpath">macpath</a></li>
 | ||
| <li><a class="reference internal" href="#threading">threading</a></li>
 | ||
| <li><a class="reference internal" href="#id8">socket</a></li>
 | ||
| <li><a class="reference internal" href="#id9">ssl</a></li>
 | ||
| <li><a class="reference internal" href="#sunau">sunau</a></li>
 | ||
| <li><a class="reference internal" href="#id10">sys</a></li>
 | ||
| <li><a class="reference internal" href="#wave">wave</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#deprecated-functions-and-types-of-the-c-api">Deprecated functions and types of the C API</a></li>
 | ||
| <li><a class="reference internal" href="#platform-support-removals">Platform Support Removals</a></li>
 | ||
| <li><a class="reference internal" href="#api-and-feature-removals">API and Feature Removals</a></li>
 | ||
| <li><a class="reference internal" href="#module-removals">Module Removals</a></li>
 | ||
| <li><a class="reference internal" href="#windows-only-changes">Windows-only Changes</a></li>
 | ||
| <li><a class="reference internal" href="#porting-to-python-3-7">Porting to Python 3.7</a><ul>
 | ||
| <li><a class="reference internal" href="#changes-in-python-behavior">Changes in Python Behavior</a></li>
 | ||
| <li><a class="reference internal" href="#changes-in-the-python-api">Changes in the Python API</a></li>
 | ||
| <li><a class="reference internal" href="#changes-in-the-c-api">Changes in the C API</a></li>
 | ||
| <li><a class="reference internal" href="#cpython-bytecode-changes">CPython bytecode changes</a></li>
 | ||
| <li><a class="reference internal" href="#id12">Windows-only Changes</a></li>
 | ||
| <li><a class="reference internal" href="#id13">Other CPython implementation changes</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-1">Notable changes in Python 3.7.1</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-2">Notable changes in Python 3.7.2</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-6">Notable changes in Python 3.7.6</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-10">Notable changes in Python 3.7.10</a></li>
 | ||
| <li><a class="reference internal" href="#notable-changes-in-python-3-7-11">Notable changes in Python 3.7.11</a></li>
 | ||
| <li><a class="reference internal" href="#notable-security-feature-in-3-7-14">Notable security feature in 3.7.14</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="3.8.html"
 | ||
|                           title="previous chapter">What’s New In Python 3.8</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="3.6.html"
 | ||
|                           title="next chapter">What’s New In Python 3.6</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/whatsnew/3.7.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </div>
 | ||
| <div id="sidebarbutton" title="Collapse sidebar">
 | ||
| <span>«</span>
 | ||
| </div>
 | ||
| 
 | ||
|       </div>
 | ||
|       <div class="clearer"></div>
 | ||
|     </div>  
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              >index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="3.6.html" title="What’s New In Python 3.6"
 | ||
|              >next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="3.8.html" title="What’s New In Python 3.8"
 | ||
|              >previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" >What’s New in Python</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href="">What’s New In Python 3.7</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>  
 | ||
|     <div class="footer">
 | ||
|     © 
 | ||
|       <a href="../copyright.html">
 | ||
|     
 | ||
|     Copyright
 | ||
|     
 | ||
|       </a>
 | ||
|      2001-2025, Python Software Foundation.
 | ||
|     <br />
 | ||
|     This page is licensed under the Python Software Foundation License Version 2.
 | ||
|     <br />
 | ||
|     Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
 | ||
|     <br />
 | ||
|     
 | ||
|       See <a href="/license.html">History and License</a> for more information.<br />
 | ||
|     
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     The Python Software Foundation is a non-profit corporation.
 | ||
| <a href="https://www.python.org/psf/donations/">Please donate.</a>
 | ||
| <br />
 | ||
|     <br />
 | ||
|       Last updated on Apr 08, 2025 (14:33 UTC).
 | ||
|     
 | ||
|       <a href="/bugs.html">Found a bug</a>?
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
 | ||
|     </div>
 | ||
| 
 | ||
|   </body>
 | ||
| </html> |