mirror of
				https://github.com/bunny-lab-io/Borealis.git
				synced 2025-11-03 19:41:57 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			1205 lines
		
	
	
		
			103 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1205 lines
		
	
	
		
			103 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="2. Lexical analysis" />
 | 
						||
<meta property="og:type" content="website" />
 | 
						||
<meta property="og:url" content="https://docs.python.org/3/reference/lexical_analysis.html" />
 | 
						||
<meta property="og:site_name" content="Python documentation" />
 | 
						||
<meta property="og:description" content="A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer(also known as the tokenizer). This chapter describes how the lexical analyzer brea..." />
 | 
						||
<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="A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer(also known as the tokenizer). This chapter describes how the lexical analyzer brea..." />
 | 
						||
<meta property="og:image:width" content="200">
 | 
						||
<meta property="og:image:height" content="200">
 | 
						||
<meta name="theme-color" content="#3776ab">
 | 
						||
 | 
						||
    <title>2. Lexical analysis — 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="3. Data model" href="datamodel.html" />
 | 
						||
    <link rel="prev" title="1. Introduction" href="introduction.html" />
 | 
						||
    
 | 
						||
    <link rel="canonical" href="https://docs.python.org/3/reference/lexical_analysis.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="#">2. Lexical analysis</a><ul>
 | 
						||
<li><a class="reference internal" href="#line-structure">2.1. Line structure</a><ul>
 | 
						||
<li><a class="reference internal" href="#logical-lines">2.1.1. Logical lines</a></li>
 | 
						||
<li><a class="reference internal" href="#physical-lines">2.1.2. Physical lines</a></li>
 | 
						||
<li><a class="reference internal" href="#comments">2.1.3. Comments</a></li>
 | 
						||
<li><a class="reference internal" href="#encoding-declarations">2.1.4. Encoding declarations</a></li>
 | 
						||
<li><a class="reference internal" href="#explicit-line-joining">2.1.5. Explicit line joining</a></li>
 | 
						||
<li><a class="reference internal" href="#implicit-line-joining">2.1.6. Implicit line joining</a></li>
 | 
						||
<li><a class="reference internal" href="#blank-lines">2.1.7. Blank lines</a></li>
 | 
						||
<li><a class="reference internal" href="#indentation">2.1.8. Indentation</a></li>
 | 
						||
<li><a class="reference internal" href="#whitespace-between-tokens">2.1.9. Whitespace between tokens</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#other-tokens">2.2. Other tokens</a></li>
 | 
						||
<li><a class="reference internal" href="#identifiers">2.3. Identifiers and keywords</a><ul>
 | 
						||
<li><a class="reference internal" href="#keywords">2.3.1. Keywords</a></li>
 | 
						||
<li><a class="reference internal" href="#soft-keywords">2.3.2. Soft Keywords</a></li>
 | 
						||
<li><a class="reference internal" href="#reserved-classes-of-identifiers">2.3.3. Reserved classes of identifiers</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#literals">2.4. Literals</a><ul>
 | 
						||
<li><a class="reference internal" href="#string-and-bytes-literals">2.4.1. String and Bytes literals</a><ul>
 | 
						||
<li><a class="reference internal" href="#escape-sequences">2.4.1.1. Escape sequences</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#string-literal-concatenation">2.4.2. String literal concatenation</a></li>
 | 
						||
<li><a class="reference internal" href="#formatted-string-literals">2.4.3. f-strings</a></li>
 | 
						||
<li><a class="reference internal" href="#numeric-literals">2.4.4. Numeric literals</a></li>
 | 
						||
<li><a class="reference internal" href="#integer-literals">2.4.5. Integer literals</a></li>
 | 
						||
<li><a class="reference internal" href="#floating-point-literals">2.4.6. Floating-point literals</a></li>
 | 
						||
<li><a class="reference internal" href="#imaginary-literals">2.4.7. Imaginary literals</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#operators">2.5. Operators</a></li>
 | 
						||
<li><a class="reference internal" href="#delimiters">2.6. Delimiters</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
</ul>
 | 
						||
 | 
						||
  </div>
 | 
						||
  <div>
 | 
						||
    <h4>Previous topic</h4>
 | 
						||
    <p class="topless"><a href="introduction.html"
 | 
						||
                          title="previous chapter"><span class="section-number">1. </span>Introduction</a></p>
 | 
						||
  </div>
 | 
						||
  <div>
 | 
						||
    <h4>Next topic</h4>
 | 
						||
    <p class="topless"><a href="datamodel.html"
 | 
						||
                          title="next chapter"><span class="section-number">3. </span>Data model</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/reference/lexical_analysis.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="datamodel.html" title="3. Data model"
 | 
						||
             accesskey="N">next</a> |</li>
 | 
						||
        <li class="right" >
 | 
						||
          <a href="introduction.html" title="1. Introduction"
 | 
						||
             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">The Python Language Reference</a> »</li>
 | 
						||
        <li class="nav-item nav-item-this"><a href=""><span class="section-number">2. </span>Lexical analysis</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="lexical-analysis">
 | 
						||
<span id="lexical"></span><h1><span class="section-number">2. </span>Lexical analysis<a class="headerlink" href="#lexical-analysis" title="Link to this heading">¶</a></h1>
 | 
						||
<p id="index-0">A Python program is read by a <em>parser</em>.  Input to the parser is a stream of
 | 
						||
<a class="reference internal" href="../glossary.html#term-token"><span class="xref std std-term">tokens</span></a>, generated by the <em>lexical analyzer</em> (also known as
 | 
						||
the <em>tokenizer</em>).
 | 
						||
This chapter describes how the lexical analyzer breaks a file into tokens.</p>
 | 
						||
<p>Python reads program text as Unicode code points; the encoding of a source file
 | 
						||
can be given by an encoding declaration and defaults to UTF-8, see <span class="target" id="index-1"></span><a class="pep reference external" href="https://peps.python.org/pep-3120/"><strong>PEP 3120</strong></a>
 | 
						||
for details.  If the source file cannot be decoded, 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> is
 | 
						||
raised.</p>
 | 
						||
<section id="line-structure">
 | 
						||
<span id="id1"></span><h2><span class="section-number">2.1. </span>Line structure<a class="headerlink" href="#line-structure" title="Link to this heading">¶</a></h2>
 | 
						||
<p id="index-2">A Python program is divided into a number of <em>logical lines</em>.</p>
 | 
						||
<section id="logical-lines">
 | 
						||
<span id="id2"></span><h3><span class="section-number">2.1.1. </span>Logical lines<a class="headerlink" href="#logical-lines" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-3">The end of a logical line is represented by the token NEWLINE.  Statements
 | 
						||
cannot cross logical line boundaries except where NEWLINE is allowed by the
 | 
						||
syntax (e.g., between statements in compound statements). A logical line is
 | 
						||
constructed from one or more <em>physical lines</em> by following the explicit or
 | 
						||
implicit <em>line joining</em> rules.</p>
 | 
						||
</section>
 | 
						||
<section id="physical-lines">
 | 
						||
<span id="id3"></span><h3><span class="section-number">2.1.2. </span>Physical lines<a class="headerlink" href="#physical-lines" title="Link to this heading">¶</a></h3>
 | 
						||
<p>A physical line is a sequence of characters terminated by an end-of-line
 | 
						||
sequence.  In source files and strings, any of the standard platform line
 | 
						||
termination sequences can be used - the Unix form using ASCII LF (linefeed),
 | 
						||
the Windows form using the ASCII sequence CR LF (return followed by linefeed),
 | 
						||
or the old Macintosh form using the ASCII CR (return) character.  All of these
 | 
						||
forms can be used equally, regardless of platform. The end of input also serves
 | 
						||
as an implicit terminator for the final physical line.</p>
 | 
						||
<p>When embedding Python, source code strings should be passed to Python APIs using
 | 
						||
the standard C conventions for newline characters (the <code class="docutils literal notranslate"><span class="pre">\n</span></code> character,
 | 
						||
representing ASCII LF, is the line terminator).</p>
 | 
						||
</section>
 | 
						||
<section id="comments">
 | 
						||
<span id="id4"></span><h3><span class="section-number">2.1.3. </span>Comments<a class="headerlink" href="#comments" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-4">A comment starts with a hash character (<code class="docutils literal notranslate"><span class="pre">#</span></code>) that is not part of a string
 | 
						||
literal, and ends at the end of the physical line.  A comment signifies the end
 | 
						||
of the logical line unless the implicit line joining rules are invoked. Comments
 | 
						||
are ignored by the syntax.</p>
 | 
						||
</section>
 | 
						||
<section id="encoding-declarations">
 | 
						||
<span id="encodings"></span><h3><span class="section-number">2.1.4. </span>Encoding declarations<a class="headerlink" href="#encoding-declarations" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-5">If a comment in the first or second line of the Python script matches the
 | 
						||
regular expression <code class="docutils literal notranslate"><span class="pre">coding[=:]\s*([-\w.]+)</span></code>, this comment is processed as an
 | 
						||
encoding declaration; the first group of this expression names the encoding of
 | 
						||
the source code file. The encoding declaration must appear on a line of its
 | 
						||
own. If it is the second line, the first line must also be a comment-only line.
 | 
						||
The recommended forms of an encoding expression are</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># -*- coding: <encoding-name> -*-</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>which is recognized also by GNU Emacs, and</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># vim:fileencoding=<encoding-name></span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>which is recognized by Bram Moolenaar’s VIM.</p>
 | 
						||
<p>If no encoding declaration is found, the default encoding is UTF-8.  If the
 | 
						||
implicit or explicit encoding of a file is UTF-8, an initial UTF-8 byte-order
 | 
						||
mark (b’xefxbbxbf’) is ignored rather than being a syntax error.</p>
 | 
						||
<p>If an encoding is declared, the encoding name must be recognized by Python
 | 
						||
(see <a class="reference internal" href="../library/codecs.html#standard-encodings"><span class="std std-ref">Standard Encodings</span></a>). The
 | 
						||
encoding is used for all lexical analysis, including string literals, comments
 | 
						||
and identifiers.</p>
 | 
						||
</section>
 | 
						||
<section id="explicit-line-joining">
 | 
						||
<span id="explicit-joining"></span><h3><span class="section-number">2.1.5. </span>Explicit line joining<a class="headerlink" href="#explicit-line-joining" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-6">Two or more physical lines may be joined into logical lines using backslash
 | 
						||
characters (<code class="docutils literal notranslate"><span class="pre">\</span></code>), as follows: when a physical line ends in a backslash that is
 | 
						||
not part of a string literal or comment, it is joined with the following forming
 | 
						||
a single logical line, deleting the backslash and the following end-of-line
 | 
						||
character.  For example:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="mi">1900</span> <span class="o"><</span> <span class="n">year</span> <span class="o"><</span> <span class="mi">2100</span> <span class="ow">and</span> <span class="mi">1</span> <span class="o"><=</span> <span class="n">month</span> <span class="o"><=</span> <span class="mi">12</span> \
 | 
						||
   <span class="ow">and</span> <span class="mi">1</span> <span class="o"><=</span> <span class="n">day</span> <span class="o"><=</span> <span class="mi">31</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">hour</span> <span class="o"><</span> <span class="mi">24</span> \
 | 
						||
   <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">minute</span> <span class="o"><</span> <span class="mi">60</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">second</span> <span class="o"><</span> <span class="mi">60</span><span class="p">:</span>   <span class="c1"># Looks like a valid date</span>
 | 
						||
        <span class="k">return</span> <span class="mi">1</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>A line ending in a backslash cannot carry a comment.  A backslash does not
 | 
						||
continue a comment.  A backslash does not continue a token except for string
 | 
						||
literals (i.e., tokens other than string literals cannot be split across
 | 
						||
physical lines using a backslash).  A backslash is illegal elsewhere on a line
 | 
						||
outside a string literal.</p>
 | 
						||
</section>
 | 
						||
<section id="implicit-line-joining">
 | 
						||
<span id="implicit-joining"></span><h3><span class="section-number">2.1.6. </span>Implicit line joining<a class="headerlink" href="#implicit-line-joining" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Expressions in parentheses, square brackets or curly braces can be split over
 | 
						||
more than one physical line without using backslashes. For example:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">month_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'Januari'</span><span class="p">,</span> <span class="s1">'Februari'</span><span class="p">,</span> <span class="s1">'Maart'</span><span class="p">,</span>      <span class="c1"># These are the</span>
 | 
						||
               <span class="s1">'April'</span><span class="p">,</span>   <span class="s1">'Mei'</span><span class="p">,</span>      <span class="s1">'Juni'</span><span class="p">,</span>       <span class="c1"># Dutch names</span>
 | 
						||
               <span class="s1">'Juli'</span><span class="p">,</span>    <span class="s1">'Augustus'</span><span class="p">,</span> <span class="s1">'September'</span><span class="p">,</span>  <span class="c1"># for the months</span>
 | 
						||
               <span class="s1">'Oktober'</span><span class="p">,</span> <span class="s1">'November'</span><span class="p">,</span> <span class="s1">'December'</span><span class="p">]</span>   <span class="c1"># of the year</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>Implicitly continued lines can carry comments.  The indentation of the
 | 
						||
continuation lines is not important.  Blank continuation lines are allowed.
 | 
						||
There is no NEWLINE token between implicit continuation lines.  Implicitly
 | 
						||
continued lines can also occur within triple-quoted strings (see below); in that
 | 
						||
case they cannot carry comments.</p>
 | 
						||
</section>
 | 
						||
<section id="blank-lines">
 | 
						||
<span id="id5"></span><h3><span class="section-number">2.1.7. </span>Blank lines<a class="headerlink" href="#blank-lines" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-7">A logical line that contains only spaces, tabs, formfeeds and possibly a
 | 
						||
comment, is ignored (i.e., no NEWLINE token is generated).  During interactive
 | 
						||
input of statements, handling of a blank line may differ depending on the
 | 
						||
implementation of the read-eval-print loop.  In the standard interactive
 | 
						||
interpreter, an entirely blank logical line (i.e. one containing not even
 | 
						||
whitespace or a comment) terminates a multi-line statement.</p>
 | 
						||
</section>
 | 
						||
<section id="indentation">
 | 
						||
<span id="id6"></span><h3><span class="section-number">2.1.8. </span>Indentation<a class="headerlink" href="#indentation" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-8">Leading whitespace (spaces and tabs) at the beginning of a logical line is used
 | 
						||
to compute the indentation level of the line, which in turn is used to determine
 | 
						||
the grouping of statements.</p>
 | 
						||
<p>Tabs are replaced (from left to right) by one to eight spaces such that the
 | 
						||
total number of characters up to and including the replacement is a multiple of
 | 
						||
eight (this is intended to be the same rule as used by Unix).  The total number
 | 
						||
of spaces preceding the first non-blank character then determines the line’s
 | 
						||
indentation.  Indentation cannot be split over multiple physical lines using
 | 
						||
backslashes; the whitespace up to the first backslash determines the
 | 
						||
indentation.</p>
 | 
						||
<p>Indentation is rejected as inconsistent if a source file mixes tabs and spaces
 | 
						||
in a way that makes the meaning dependent on the worth of a tab in spaces; a
 | 
						||
<a class="reference internal" href="../library/exceptions.html#TabError" title="TabError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TabError</span></code></a> is raised in that case.</p>
 | 
						||
<p><strong>Cross-platform compatibility note:</strong> because of the nature of text editors on
 | 
						||
non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for the
 | 
						||
indentation in a single source file.  It should also be noted that different
 | 
						||
platforms may explicitly limit the maximum indentation level.</p>
 | 
						||
<p>A formfeed character may be present at the start of the line; it will be ignored
 | 
						||
for the indentation calculations above.  Formfeed characters occurring elsewhere
 | 
						||
in the leading whitespace have an undefined effect (for instance, they may reset
 | 
						||
the space count to zero).</p>
 | 
						||
<p id="index-9">The indentation levels of consecutive lines are used to generate INDENT and
 | 
						||
DEDENT tokens, using a stack, as follows.</p>
 | 
						||
<p>Before the first line of the file is read, a single zero is pushed on the stack;
 | 
						||
this will never be popped off again.  The numbers pushed on the stack will
 | 
						||
always be strictly increasing from bottom to top.  At the beginning of each
 | 
						||
logical line, the line’s indentation level is compared to the top of the stack.
 | 
						||
If it is equal, nothing happens. If it is larger, it is pushed on the stack, and
 | 
						||
one INDENT token is generated.  If it is smaller, it <em>must</em> be one of the
 | 
						||
numbers occurring on the stack; all numbers on the stack that are larger are
 | 
						||
popped off, and for each number popped off a DEDENT token is generated.  At the
 | 
						||
end of the file, a DEDENT token is generated for each number remaining on the
 | 
						||
stack that is larger than zero.</p>
 | 
						||
<p>Here is an example of a correctly (though confusingly) indented piece of Python
 | 
						||
code:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">perm</span><span class="p">(</span><span class="n">l</span><span class="p">):</span>
 | 
						||
        <span class="c1"># Compute the list of all permutations of l</span>
 | 
						||
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">:</span>
 | 
						||
                  <span class="k">return</span> <span class="p">[</span><span class="n">l</span><span class="p">]</span>
 | 
						||
    <span class="n">r</span> <span class="o">=</span> <span class="p">[]</span>
 | 
						||
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">l</span><span class="p">)):</span>
 | 
						||
             <span class="n">s</span> <span class="o">=</span> <span class="n">l</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">:]</span>
 | 
						||
             <span class="n">p</span> <span class="o">=</span> <span class="n">perm</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
 | 
						||
             <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">p</span><span class="p">:</span>
 | 
						||
              <span class="n">r</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">x</span><span class="p">)</span>
 | 
						||
    <span class="k">return</span> <span class="n">r</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>The following example shows various indentation errors:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span> <span class="k">def</span><span class="w"> </span><span class="nf">perm</span><span class="p">(</span><span class="n">l</span><span class="p">):</span>                       <span class="c1"># error: first line indented</span>
 | 
						||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">l</span><span class="p">)):</span>             <span class="c1"># error: not indented</span>
 | 
						||
    <span class="n">s</span> <span class="o">=</span> <span class="n">l</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">:]</span>
 | 
						||
        <span class="n">p</span> <span class="o">=</span> <span class="n">perm</span><span class="p">(</span><span class="n">l</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">:])</span>   <span class="c1"># error: unexpected indent</span>
 | 
						||
        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">p</span><span class="p">:</span>
 | 
						||
                <span class="n">r</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">x</span><span class="p">)</span>
 | 
						||
            <span class="k">return</span> <span class="n">r</span>                <span class="c1"># error: inconsistent dedent</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>(Actually, the first three errors are detected by the parser; only the last
 | 
						||
error is found by the lexical analyzer — the indentation of <code class="docutils literal notranslate"><span class="pre">return</span> <span class="pre">r</span></code> does
 | 
						||
not match a level popped off the stack.)</p>
 | 
						||
</section>
 | 
						||
<section id="whitespace-between-tokens">
 | 
						||
<span id="whitespace"></span><h3><span class="section-number">2.1.9. </span>Whitespace between tokens<a class="headerlink" href="#whitespace-between-tokens" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Except at the beginning of a logical line or in string literals, the whitespace
 | 
						||
characters space, tab and formfeed can be used interchangeably to separate
 | 
						||
tokens.  Whitespace is needed between two tokens only if their concatenation
 | 
						||
could otherwise be interpreted as a different token (e.g., ab is one token, but
 | 
						||
a b is two tokens).</p>
 | 
						||
</section>
 | 
						||
</section>
 | 
						||
<section id="other-tokens">
 | 
						||
<span id="id7"></span><h2><span class="section-number">2.2. </span>Other tokens<a class="headerlink" href="#other-tokens" title="Link to this heading">¶</a></h2>
 | 
						||
<p>Besides NEWLINE, INDENT and DEDENT, the following categories of tokens exist:
 | 
						||
<em>identifiers</em>, <em>keywords</em>, <em>literals</em>, <em>operators</em>, and <em>delimiters</em>. Whitespace
 | 
						||
characters (other than line terminators, discussed earlier) are not tokens, but
 | 
						||
serve to delimit tokens. Where ambiguity exists, a token comprises the longest
 | 
						||
possible string that forms a legal token, when read from left to right.</p>
 | 
						||
</section>
 | 
						||
<section id="identifiers">
 | 
						||
<span id="identifiers-and-keywords"></span><h2><span class="section-number">2.3. </span>Identifiers and keywords<a class="headerlink" href="#identifiers" title="Link to this heading">¶</a></h2>
 | 
						||
<p id="index-10">Identifiers (also referred to as <em>names</em>) are described by the following lexical
 | 
						||
definitions.</p>
 | 
						||
<p>The syntax of identifiers in Python is based on the Unicode standard annex
 | 
						||
UAX-31, with elaboration and changes as defined below; see also <span class="target" id="index-11"></span><a class="pep reference external" href="https://peps.python.org/pep-3131/"><strong>PEP 3131</strong></a> for
 | 
						||
further details.</p>
 | 
						||
<p>Within the ASCII range (U+0001..U+007F), the valid characters for identifiers
 | 
						||
include the uppercase and lowercase letters <code class="docutils literal notranslate"><span class="pre">A</span></code> through
 | 
						||
<code class="docutils literal notranslate"><span class="pre">Z</span></code>, the underscore <code class="docutils literal notranslate"><span class="pre">_</span></code> and, except for the first character, the digits
 | 
						||
<code class="docutils literal notranslate"><span class="pre">0</span></code> through <code class="docutils literal notranslate"><span class="pre">9</span></code>.
 | 
						||
Python 3.0 introduced additional characters from outside the ASCII range (see
 | 
						||
<span class="target" id="index-12"></span><a class="pep reference external" href="https://peps.python.org/pep-3131/"><strong>PEP 3131</strong></a>).  For these characters, the classification uses the version of the
 | 
						||
Unicode Character Database as included in the <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> module.</p>
 | 
						||
<p>Identifiers are unlimited in length.  Case is significant.</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-identifier">identifier</strong>   ::= <a class="reference internal" href="#grammar-token-python-grammar-xid_start"><code class="xref docutils literal notranslate"><span class="pre">xid_start</span></code></a> <a class="reference internal" href="#grammar-token-python-grammar-xid_continue"><code class="xref docutils literal notranslate"><span class="pre">xid_continue</span></code></a>*
 | 
						||
<strong id="grammar-token-python-grammar-id_start">id_start</strong>     ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
 | 
						||
<strong id="grammar-token-python-grammar-id_continue">id_continue</strong>  ::= <all characters in <a class="reference internal" href="#grammar-token-python-grammar-id_start"><code class="xref docutils literal notranslate"><span class="pre">id_start</span></code></a>, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
 | 
						||
<strong id="grammar-token-python-grammar-xid_start">xid_start</strong>    ::= <all characters in <a class="reference internal" href="#grammar-token-python-grammar-id_start"><code class="xref docutils literal notranslate"><span class="pre">id_start</span></code></a> whose NFKC normalization is in "id_start xid_continue*">
 | 
						||
<strong id="grammar-token-python-grammar-xid_continue">xid_continue</strong> ::= <all characters in <a class="reference internal" href="#grammar-token-python-grammar-id_continue"><code class="xref docutils literal notranslate"><span class="pre">id_continue</span></code></a> whose NFKC normalization is in "id_continue*">
 | 
						||
</pre>
 | 
						||
<p>The Unicode category codes mentioned above stand for:</p>
 | 
						||
<ul class="simple">
 | 
						||
<li><p><em>Lu</em> - uppercase letters</p></li>
 | 
						||
<li><p><em>Ll</em> - lowercase letters</p></li>
 | 
						||
<li><p><em>Lt</em> - titlecase letters</p></li>
 | 
						||
<li><p><em>Lm</em> - modifier letters</p></li>
 | 
						||
<li><p><em>Lo</em> - other letters</p></li>
 | 
						||
<li><p><em>Nl</em> - letter numbers</p></li>
 | 
						||
<li><p><em>Mn</em> - nonspacing marks</p></li>
 | 
						||
<li><p><em>Mc</em> - spacing combining marks</p></li>
 | 
						||
<li><p><em>Nd</em> - decimal numbers</p></li>
 | 
						||
<li><p><em>Pc</em> - connector punctuations</p></li>
 | 
						||
<li><p><em>Other_ID_Start</em> - explicit list of characters in <a class="reference external" href="https://www.unicode.org/Public/15.1.0/ucd/PropList.txt">PropList.txt</a> to support backwards
 | 
						||
compatibility</p></li>
 | 
						||
<li><p><em>Other_ID_Continue</em> - likewise</p></li>
 | 
						||
</ul>
 | 
						||
<p>All identifiers are converted into the normal form NFKC while parsing; comparison
 | 
						||
of identifiers is based on NFKC.</p>
 | 
						||
<p>A non-normative HTML file listing all valid identifier characters for Unicode
 | 
						||
15.1.0 can be found at
 | 
						||
<a class="reference external" href="https://www.unicode.org/Public/15.1.0/ucd/DerivedCoreProperties.txt">https://www.unicode.org/Public/15.1.0/ucd/DerivedCoreProperties.txt</a></p>
 | 
						||
<section id="keywords">
 | 
						||
<span id="id8"></span><h3><span class="section-number">2.3.1. </span>Keywords<a class="headerlink" href="#keywords" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-13">The following identifiers are used as reserved words, or <em>keywords</em> of the
 | 
						||
language, and cannot be used as ordinary identifiers.  They must be spelled
 | 
						||
exactly as written here:</p>
 | 
						||
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>False      await      else       import     pass
 | 
						||
None       break      except     in         raise
 | 
						||
True       class      finally    is         return
 | 
						||
and        continue   for        lambda     try
 | 
						||
as         def        from       nonlocal   while
 | 
						||
assert     del        global     not        with
 | 
						||
async      elif       if         or         yield
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
<section id="soft-keywords">
 | 
						||
<span id="id9"></span><h3><span class="section-number">2.3.2. </span>Soft Keywords<a class="headerlink" href="#soft-keywords" title="Link to this heading">¶</a></h3>
 | 
						||
<div class="versionadded" id="index-14">
 | 
						||
<p><span class="versionmodified added">Added in version 3.10.</span></p>
 | 
						||
</div>
 | 
						||
<p>Some identifiers are only reserved under specific contexts. These are known as
 | 
						||
<em>soft keywords</em>.  The identifiers <code class="docutils literal notranslate"><span class="pre">match</span></code>, <code class="docutils literal notranslate"><span class="pre">case</span></code>, <code class="docutils literal notranslate"><span class="pre">type</span></code> and <code class="docutils literal notranslate"><span class="pre">_</span></code> can
 | 
						||
syntactically act as keywords in certain contexts,
 | 
						||
but this distinction is done at the parser level, not when tokenizing.</p>
 | 
						||
<p>As soft keywords, their use in the grammar is possible while still
 | 
						||
preserving compatibility with existing code that uses these names as
 | 
						||
identifier names.</p>
 | 
						||
<p><code class="docutils literal notranslate"><span class="pre">match</span></code>, <code class="docutils literal notranslate"><span class="pre">case</span></code>, and <code class="docutils literal notranslate"><span class="pre">_</span></code> are used in the <a class="reference internal" href="compound_stmts.html#match"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code></a> statement.
 | 
						||
<code class="docutils literal notranslate"><span class="pre">type</span></code> is used in the <a class="reference internal" href="simple_stmts.html#type"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">type</span></code></a> statement.</p>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span><code class="docutils literal notranslate"><span class="pre">type</span></code> is now a soft keyword.</p>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
<section id="reserved-classes-of-identifiers">
 | 
						||
<span id="id-classes"></span><span id="index-15"></span><h3><span class="section-number">2.3.3. </span>Reserved classes of identifiers<a class="headerlink" href="#reserved-classes-of-identifiers" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Certain classes of identifiers (besides keywords) have special meanings.  These
 | 
						||
classes are identified by the patterns of leading and trailing underscore
 | 
						||
characters:</p>
 | 
						||
<dl>
 | 
						||
<dt><code class="docutils literal notranslate"><span class="pre">_*</span></code></dt><dd><p>Not imported by <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">module</span> <span class="pre">import</span> <span class="pre">*</span></code>.</p>
 | 
						||
</dd>
 | 
						||
<dt><code class="docutils literal notranslate"><span class="pre">_</span></code></dt><dd><p>In a <code class="docutils literal notranslate"><span class="pre">case</span></code> pattern within a <a class="reference internal" href="compound_stmts.html#match"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code></a> statement, <code class="docutils literal notranslate"><span class="pre">_</span></code> is a
 | 
						||
<a class="reference internal" href="#soft-keywords"><span class="std std-ref">soft keyword</span></a> that denotes a
 | 
						||
<a class="reference internal" href="compound_stmts.html#wildcard-patterns"><span class="std std-ref">wildcard</span></a>.</p>
 | 
						||
<p>Separately, the interactive interpreter makes the result of the last evaluation
 | 
						||
available in the variable <code class="docutils literal notranslate"><span class="pre">_</span></code>.
 | 
						||
(It is stored in the <a class="reference internal" href="../library/builtins.html#module-builtins" title="builtins: The module that provides the built-in namespace."><code class="xref py py-mod docutils literal notranslate"><span class="pre">builtins</span></code></a> module, alongside built-in
 | 
						||
functions like <code class="docutils literal notranslate"><span class="pre">print</span></code>.)</p>
 | 
						||
<p>Elsewhere, <code class="docutils literal notranslate"><span class="pre">_</span></code> is a regular identifier. It is often used to name
 | 
						||
“special” items, but it is not special to Python itself.</p>
 | 
						||
<div class="admonition note">
 | 
						||
<p class="admonition-title">Note</p>
 | 
						||
<p>The name <code class="docutils literal notranslate"><span class="pre">_</span></code> is often used in conjunction with internationalization;
 | 
						||
refer to the documentation for the <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> module for more
 | 
						||
information on this convention.</p>
 | 
						||
<p>It is also commonly used for unused variables.</p>
 | 
						||
</div>
 | 
						||
</dd>
 | 
						||
<dt><code class="docutils literal notranslate"><span class="pre">__*__</span></code></dt><dd><p>System-defined names, informally known as “dunder” names. These names are
 | 
						||
defined by the interpreter and its implementation (including the standard library).
 | 
						||
Current system names are discussed in the <a class="reference internal" href="datamodel.html#specialnames"><span class="std std-ref">Special method names</span></a> section and elsewhere.
 | 
						||
More will likely be defined in future versions of Python.  <em>Any</em> use of <code class="docutils literal notranslate"><span class="pre">__*__</span></code> names,
 | 
						||
in any context, that does not follow explicitly documented use, is subject to
 | 
						||
breakage without warning.</p>
 | 
						||
</dd>
 | 
						||
<dt><code class="docutils literal notranslate"><span class="pre">__*</span></code></dt><dd><p>Class-private names.  Names in this category, when used within the context of a
 | 
						||
class definition, are re-written to use a mangled form to help avoid name
 | 
						||
clashes between “private” attributes of base and derived classes. See section
 | 
						||
<a class="reference internal" href="expressions.html#atom-identifiers"><span class="std std-ref">Identifiers (Names)</span></a>.</p>
 | 
						||
</dd>
 | 
						||
</dl>
 | 
						||
</section>
 | 
						||
</section>
 | 
						||
<section id="literals">
 | 
						||
<span id="id10"></span><h2><span class="section-number">2.4. </span>Literals<a class="headerlink" href="#literals" title="Link to this heading">¶</a></h2>
 | 
						||
<p id="index-16">Literals are notations for constant values of some built-in types.</p>
 | 
						||
<section id="string-and-bytes-literals">
 | 
						||
<span id="strings"></span><span id="index-17"></span><h3><span class="section-number">2.4.1. </span>String and Bytes literals<a class="headerlink" href="#string-and-bytes-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<p>String literals are described by the following lexical definitions:</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-stringliteral">stringliteral</strong>   ::= [<a class="reference internal" href="#grammar-token-python-grammar-stringprefix"><code class="xref docutils literal notranslate"><span class="pre">stringprefix</span></code></a>](<a class="reference internal" href="#grammar-token-python-grammar-shortstring"><code class="xref docutils literal notranslate"><span class="pre">shortstring</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-longstring"><code class="xref docutils literal notranslate"><span class="pre">longstring</span></code></a>)
 | 
						||
<strong id="grammar-token-python-grammar-stringprefix">stringprefix</strong>    ::= "r" | "u" | "R" | "U" | "f" | "F"
 | 
						||
                    | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
 | 
						||
<strong id="grammar-token-python-grammar-shortstring">shortstring</strong>     ::= "'" <a class="reference internal" href="#grammar-token-python-grammar-shortstringitem"><code class="xref docutils literal notranslate"><span class="pre">shortstringitem</span></code></a>* "'" | '"' <a class="reference internal" href="#grammar-token-python-grammar-shortstringitem"><code class="xref docutils literal notranslate"><span class="pre">shortstringitem</span></code></a>* '"'
 | 
						||
<strong id="grammar-token-python-grammar-longstring">longstring</strong>      ::= "'''" <a class="reference internal" href="#grammar-token-python-grammar-longstringitem"><code class="xref docutils literal notranslate"><span class="pre">longstringitem</span></code></a>* "'''" | '"""' <a class="reference internal" href="#grammar-token-python-grammar-longstringitem"><code class="xref docutils literal notranslate"><span class="pre">longstringitem</span></code></a>* '"""'
 | 
						||
<strong id="grammar-token-python-grammar-shortstringitem">shortstringitem</strong> ::= <a class="reference internal" href="#grammar-token-python-grammar-shortstringchar"><code class="xref docutils literal notranslate"><span class="pre">shortstringchar</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-stringescapeseq"><code class="xref docutils literal notranslate"><span class="pre">stringescapeseq</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-longstringitem">longstringitem</strong>  ::= <a class="reference internal" href="#grammar-token-python-grammar-longstringchar"><code class="xref docutils literal notranslate"><span class="pre">longstringchar</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-stringescapeseq"><code class="xref docutils literal notranslate"><span class="pre">stringescapeseq</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-shortstringchar">shortstringchar</strong> ::= <any source character except "\" or newline or the quote>
 | 
						||
<strong id="grammar-token-python-grammar-longstringchar">longstringchar</strong>  ::= <any source character except "\">
 | 
						||
<strong id="grammar-token-python-grammar-stringescapeseq">stringescapeseq</strong> ::= "\" <any source character>
 | 
						||
</pre>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-bytesliteral">bytesliteral</strong>   ::= <a class="reference internal" href="#grammar-token-python-grammar-bytesprefix"><code class="xref docutils literal notranslate"><span class="pre">bytesprefix</span></code></a>(<a class="reference internal" href="#grammar-token-python-grammar-shortbytes"><code class="xref docutils literal notranslate"><span class="pre">shortbytes</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-longbytes"><code class="xref docutils literal notranslate"><span class="pre">longbytes</span></code></a>)
 | 
						||
<strong id="grammar-token-python-grammar-bytesprefix">bytesprefix</strong>    ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
 | 
						||
<strong id="grammar-token-python-grammar-shortbytes">shortbytes</strong>     ::= "'" <a class="reference internal" href="#grammar-token-python-grammar-shortbytesitem"><code class="xref docutils literal notranslate"><span class="pre">shortbytesitem</span></code></a>* "'" | '"' <a class="reference internal" href="#grammar-token-python-grammar-shortbytesitem"><code class="xref docutils literal notranslate"><span class="pre">shortbytesitem</span></code></a>* '"'
 | 
						||
<strong id="grammar-token-python-grammar-longbytes">longbytes</strong>      ::= "'''" <a class="reference internal" href="#grammar-token-python-grammar-longbytesitem"><code class="xref docutils literal notranslate"><span class="pre">longbytesitem</span></code></a>* "'''" | '"""' <a class="reference internal" href="#grammar-token-python-grammar-longbytesitem"><code class="xref docutils literal notranslate"><span class="pre">longbytesitem</span></code></a>* '"""'
 | 
						||
<strong id="grammar-token-python-grammar-shortbytesitem">shortbytesitem</strong> ::= <a class="reference internal" href="#grammar-token-python-grammar-shortbyteschar"><code class="xref docutils literal notranslate"><span class="pre">shortbyteschar</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-bytesescapeseq"><code class="xref docutils literal notranslate"><span class="pre">bytesescapeseq</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-longbytesitem">longbytesitem</strong>  ::= <a class="reference internal" href="#grammar-token-python-grammar-longbyteschar"><code class="xref docutils literal notranslate"><span class="pre">longbyteschar</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-bytesescapeseq"><code class="xref docutils literal notranslate"><span class="pre">bytesescapeseq</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-shortbyteschar">shortbyteschar</strong> ::= <any ASCII character except "\" or newline or the quote>
 | 
						||
<strong id="grammar-token-python-grammar-longbyteschar">longbyteschar</strong>  ::= <any ASCII character except "\">
 | 
						||
<strong id="grammar-token-python-grammar-bytesescapeseq">bytesescapeseq</strong> ::= "\" <any ASCII character>
 | 
						||
</pre>
 | 
						||
<p>One syntactic restriction not indicated by these productions is that whitespace
 | 
						||
is not allowed between the <a class="reference internal" href="#grammar-token-python-grammar-stringprefix"><code class="xref std std-token docutils literal notranslate"><span class="pre">stringprefix</span></code></a> or
 | 
						||
<a class="reference internal" href="#grammar-token-python-grammar-bytesprefix"><code class="xref std std-token docutils literal notranslate"><span class="pre">bytesprefix</span></code></a> and the rest of the literal. The source
 | 
						||
character set is defined by the encoding declaration; it is UTF-8 if no encoding
 | 
						||
declaration is given in the source file; see section <a class="reference internal" href="#encodings"><span class="std std-ref">Encoding declarations</span></a>.</p>
 | 
						||
<p id="index-18">In plain English: Both types of literals can be enclosed in matching single quotes
 | 
						||
(<code class="docutils literal notranslate"><span class="pre">'</span></code>) or double quotes (<code class="docutils literal notranslate"><span class="pre">"</span></code>).  They can also be enclosed in matching groups
 | 
						||
of three single or double quotes (these are generally referred to as
 | 
						||
<em>triple-quoted strings</em>). The backslash (<code class="docutils literal notranslate"><span class="pre">\</span></code>) character is used to give special
 | 
						||
meaning to otherwise ordinary characters like <code class="docutils literal notranslate"><span class="pre">n</span></code>, which means ‘newline’ when
 | 
						||
escaped (<code class="docutils literal notranslate"><span class="pre">\n</span></code>). It can also be used to escape characters that otherwise have a
 | 
						||
special meaning, such as newline, backslash itself, or the quote character.
 | 
						||
See <a class="reference internal" href="#escape-sequences"><span class="std std-ref">escape sequences</span></a> below for examples.</p>
 | 
						||
<p id="index-19">Bytes literals are always prefixed with <code class="docutils literal notranslate"><span class="pre">'b'</span></code> or <code class="docutils literal notranslate"><span class="pre">'B'</span></code>; they produce an
 | 
						||
instance of the <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> type instead of the <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> type.  They
 | 
						||
may only contain ASCII characters; bytes with a numeric value of 128 or greater
 | 
						||
must be expressed with escapes.</p>
 | 
						||
<p id="index-20">Both string and bytes literals may optionally be prefixed with a letter <code class="docutils literal notranslate"><span class="pre">'r'</span></code>
 | 
						||
or <code class="docutils literal notranslate"><span class="pre">'R'</span></code>; such constructs are called <em class="dfn">raw string literals</em>
 | 
						||
and <em class="dfn">raw bytes literals</em> respectively and treat backslashes as
 | 
						||
literal characters.  As a result, in raw string literals, <code class="docutils literal notranslate"><span class="pre">'\U'</span></code> and <code class="docutils literal notranslate"><span class="pre">'\u'</span></code>
 | 
						||
escapes are not treated specially.</p>
 | 
						||
<div class="versionadded">
 | 
						||
<p><span class="versionmodified added">Added in version 3.3: </span>The <code class="docutils literal notranslate"><span class="pre">'rb'</span></code> prefix of raw bytes literals has been added as a synonym
 | 
						||
of <code class="docutils literal notranslate"><span class="pre">'br'</span></code>.</p>
 | 
						||
<p>Support for the unicode legacy literal (<code class="docutils literal notranslate"><span class="pre">u'value'</span></code>) was reintroduced
 | 
						||
to simplify the maintenance of dual Python 2.x and 3.x codebases.
 | 
						||
See <span class="target" id="index-21"></span><a class="pep reference external" href="https://peps.python.org/pep-0414/"><strong>PEP 414</strong></a> for more information.</p>
 | 
						||
</div>
 | 
						||
<p id="index-22">A string literal with <code class="docutils literal notranslate"><span class="pre">'f'</span></code> or <code class="docutils literal notranslate"><span class="pre">'F'</span></code> in its prefix is a
 | 
						||
<em class="dfn">formatted string literal</em>; see <a class="reference internal" href="#f-strings"><span class="std std-ref">f-strings</span></a>.  The <code class="docutils literal notranslate"><span class="pre">'f'</span></code> may be
 | 
						||
combined with <code class="docutils literal notranslate"><span class="pre">'r'</span></code>, but not with <code class="docutils literal notranslate"><span class="pre">'b'</span></code> or <code class="docutils literal notranslate"><span class="pre">'u'</span></code>, therefore raw
 | 
						||
formatted strings are possible, but formatted bytes literals are not.</p>
 | 
						||
<p>In triple-quoted literals, unescaped newlines and quotes are allowed (and are
 | 
						||
retained), except that three unescaped quotes in a row terminate the literal.  (A
 | 
						||
“quote” is the character used to open the literal, i.e. either <code class="docutils literal notranslate"><span class="pre">'</span></code> or <code class="docutils literal notranslate"><span class="pre">"</span></code>.)</p>
 | 
						||
<section id="escape-sequences">
 | 
						||
<span id="index-23"></span><span id="id11"></span><h4><span class="section-number">2.4.1.1. </span>Escape sequences<a class="headerlink" href="#escape-sequences" title="Link to this heading">¶</a></h4>
 | 
						||
<p>Unless an <code class="docutils literal notranslate"><span class="pre">'r'</span></code> or <code class="docutils literal notranslate"><span class="pre">'R'</span></code> prefix is present, escape sequences in string and
 | 
						||
bytes literals are interpreted according to rules similar to those used by
 | 
						||
Standard C.  The recognized escape sequences are:</p>
 | 
						||
<table class="docutils align-default">
 | 
						||
<thead>
 | 
						||
<tr class="row-odd"><th class="head"><p>Escape Sequence</p></th>
 | 
						||
<th class="head"><p>Meaning</p></th>
 | 
						||
<th class="head"><p>Notes</p></th>
 | 
						||
</tr>
 | 
						||
</thead>
 | 
						||
<tbody>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\</span></code><newline></p></td>
 | 
						||
<td><p>Backslash and newline ignored</p></td>
 | 
						||
<td><p>(1)</p></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\\</span></code></p></td>
 | 
						||
<td><p>Backslash (<code class="docutils literal notranslate"><span class="pre">\</span></code>)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\'</span></code></p></td>
 | 
						||
<td><p>Single quote (<code class="docutils literal notranslate"><span class="pre">'</span></code>)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\"</span></code></p></td>
 | 
						||
<td><p>Double quote (<code class="docutils literal notranslate"><span class="pre">"</span></code>)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\a</span></code></p></td>
 | 
						||
<td><p>ASCII Bell (BEL)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\b</span></code></p></td>
 | 
						||
<td><p>ASCII Backspace (BS)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\f</span></code></p></td>
 | 
						||
<td><p>ASCII Formfeed (FF)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\n</span></code></p></td>
 | 
						||
<td><p>ASCII Linefeed (LF)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\r</span></code></p></td>
 | 
						||
<td><p>ASCII Carriage Return (CR)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\t</span></code></p></td>
 | 
						||
<td><p>ASCII Horizontal Tab (TAB)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\v</span></code></p></td>
 | 
						||
<td><p>ASCII Vertical Tab (VT)</p></td>
 | 
						||
<td></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="samp docutils literal notranslate"><span class="pre">\</span><em><span class="pre">ooo</span></em></code></p></td>
 | 
						||
<td><p>Character with octal value
 | 
						||
<em>ooo</em></p></td>
 | 
						||
<td><p>(2,4)</p></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="samp docutils literal notranslate"><span class="pre">\x</span><em><span class="pre">hh</span></em></code></p></td>
 | 
						||
<td><p>Character with hex value <em>hh</em></p></td>
 | 
						||
<td><p>(3,4)</p></td>
 | 
						||
</tr>
 | 
						||
</tbody>
 | 
						||
</table>
 | 
						||
<p>Escape sequences only recognized in string literals are:</p>
 | 
						||
<table class="docutils align-default">
 | 
						||
<thead>
 | 
						||
<tr class="row-odd"><th class="head"><p>Escape Sequence</p></th>
 | 
						||
<th class="head"><p>Meaning</p></th>
 | 
						||
<th class="head"><p>Notes</p></th>
 | 
						||
</tr>
 | 
						||
</thead>
 | 
						||
<tbody>
 | 
						||
<tr class="row-even"><td><p><code class="samp docutils literal notranslate"><span class="pre">\N{</span><em><span class="pre">name</span></em><span class="pre">}</span></code></p></td>
 | 
						||
<td><p>Character named <em>name</em> in the
 | 
						||
Unicode database</p></td>
 | 
						||
<td><p>(5)</p></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-odd"><td><p><code class="samp docutils literal notranslate"><span class="pre">\u</span><em><span class="pre">xxxx</span></em></code></p></td>
 | 
						||
<td><p>Character with 16-bit hex value
 | 
						||
<em>xxxx</em></p></td>
 | 
						||
<td><p>(6)</p></td>
 | 
						||
</tr>
 | 
						||
<tr class="row-even"><td><p><code class="samp docutils literal notranslate"><span class="pre">\U</span><em><span class="pre">xxxxxxxx</span></em></code></p></td>
 | 
						||
<td><p>Character with 32-bit hex value
 | 
						||
<em>xxxxxxxx</em></p></td>
 | 
						||
<td><p>(7)</p></td>
 | 
						||
</tr>
 | 
						||
</tbody>
 | 
						||
</table>
 | 
						||
<p>Notes:</p>
 | 
						||
<ol class="arabic">
 | 
						||
<li><p>A backslash can be added at the end of a line to ignore the newline:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="s1">'This string will not include </span><span class="se">\</span>
 | 
						||
<span class="gp">... </span><span class="s1">backslashes or newline characters.'</span>
 | 
						||
<span class="go">'This string will not include backslashes or newline characters.'</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>The same result can be achieved using <a class="reference internal" href="#strings"><span class="std std-ref">triple-quoted strings</span></a>,
 | 
						||
or parentheses and <a class="reference internal" href="#string-concatenation"><span class="std std-ref">string literal concatenation</span></a>.</p>
 | 
						||
</li>
 | 
						||
<li><p>As in Standard C, up to three octal digits are accepted.</p>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.11: </span>Octal escapes with value larger than <code class="docutils literal notranslate"><span class="pre">0o377</span></code> produce a
 | 
						||
<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>.</p>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span>Octal escapes with value larger than <code class="docutils literal notranslate"><span class="pre">0o377</span></code> produce a
 | 
						||
<a class="reference internal" href="../library/exceptions.html#SyntaxWarning" title="SyntaxWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SyntaxWarning</span></code></a>. In a future Python version they will be eventually
 | 
						||
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>.</p>
 | 
						||
</div>
 | 
						||
</li>
 | 
						||
<li><p>Unlike in Standard C, exactly two hex digits are required.</p></li>
 | 
						||
<li><p>In a bytes literal, hexadecimal and octal escapes denote the byte with the
 | 
						||
given value. In a string literal, these escapes denote a Unicode character
 | 
						||
with the given value.</p></li>
 | 
						||
<li><div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Support for name aliases <a class="footnote-reference brackets" href="#id16" id="id12" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a> has been added.</p>
 | 
						||
</div>
 | 
						||
</li>
 | 
						||
<li><p>Exactly four hex digits are required.</p></li>
 | 
						||
<li><p>Any Unicode character can be encoded this way.  Exactly eight hex digits
 | 
						||
are required.</p></li>
 | 
						||
</ol>
 | 
						||
<p id="index-24">Unlike Standard C, all unrecognized escape sequences are left in the string
 | 
						||
unchanged, i.e., <em>the backslash is left in the result</em>.  (This behavior is
 | 
						||
useful when debugging: if an escape sequence is mistyped, the resulting output
 | 
						||
is more easily recognized as broken.)  It is also important to note that the
 | 
						||
escape sequences only recognized in string literals fall into the category of
 | 
						||
unrecognized escapes for bytes literals.</p>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.6: </span>Unrecognized escape sequences produce a <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>.</p>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span>Unrecognized escape sequences produce a <a class="reference internal" href="../library/exceptions.html#SyntaxWarning" title="SyntaxWarning"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SyntaxWarning</span></code></a>. In a future
 | 
						||
Python version they will be eventually 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>.</p>
 | 
						||
</div>
 | 
						||
<p>Even in a raw literal, quotes can be escaped with a backslash, but the
 | 
						||
backslash remains in the result; for example, <code class="docutils literal notranslate"><span class="pre">r"\""</span></code> is a valid string
 | 
						||
literal consisting of two characters: a backslash and a double quote; <code class="docutils literal notranslate"><span class="pre">r"\"</span></code>
 | 
						||
is not a valid string literal (even a raw string cannot end in an odd number of
 | 
						||
backslashes).  Specifically, <em>a raw literal cannot end in a single backslash</em>
 | 
						||
(since the backslash would escape the following quote character).  Note also
 | 
						||
that a single backslash followed by a newline is interpreted as those two
 | 
						||
characters as part of the literal, <em>not</em> as a line continuation.</p>
 | 
						||
</section>
 | 
						||
</section>
 | 
						||
<section id="string-literal-concatenation">
 | 
						||
<span id="string-concatenation"></span><h3><span class="section-number">2.4.2. </span>String literal concatenation<a class="headerlink" href="#string-literal-concatenation" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Multiple adjacent string or bytes literals (delimited by whitespace), possibly
 | 
						||
using different quoting conventions, are allowed, and their meaning is the same
 | 
						||
as their concatenation.  Thus, <code class="docutils literal notranslate"><span class="pre">"hello"</span> <span class="pre">'world'</span></code> is equivalent to
 | 
						||
<code class="docutils literal notranslate"><span class="pre">"helloworld"</span></code>.  This feature can be used to reduce the number of backslashes
 | 
						||
needed, to split long strings conveniently across long lines, or even to add
 | 
						||
comments to parts of strings, for example:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">"[A-Za-z_]"</span>       <span class="c1"># letter or underscore</span>
 | 
						||
           <span class="s2">"[A-Za-z0-9_]*"</span>   <span class="c1"># letter, digit or underscore</span>
 | 
						||
          <span class="p">)</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>Note that this feature is defined at the syntactical level, but implemented at
 | 
						||
compile time.  The ‘+’ operator must be used to concatenate string expressions
 | 
						||
at run time.  Also note that literal concatenation can use different quoting
 | 
						||
styles for each component (even mixing raw strings and triple quoted strings),
 | 
						||
and formatted string literals may be concatenated with plain string literals.</p>
 | 
						||
</section>
 | 
						||
<section id="formatted-string-literals">
 | 
						||
<span id="f-strings"></span><span id="index-25"></span><span id="id13"></span><h3><span class="section-number">2.4.3. </span>f-strings<a class="headerlink" href="#formatted-string-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<div class="versionadded">
 | 
						||
<p><span class="versionmodified added">Added in version 3.6.</span></p>
 | 
						||
</div>
 | 
						||
<p>A <em class="dfn">formatted string literal</em> or <em class="dfn">f-string</em> is a string literal
 | 
						||
that is prefixed with <code class="docutils literal notranslate"><span class="pre">'f'</span></code> or <code class="docutils literal notranslate"><span class="pre">'F'</span></code>.  These strings may contain
 | 
						||
replacement fields, which are expressions delimited by curly braces <code class="docutils literal notranslate"><span class="pre">{}</span></code>.
 | 
						||
While other string literals always have a constant value, formatted strings
 | 
						||
are really expressions evaluated at run time.</p>
 | 
						||
<p>Escape sequences are decoded like in ordinary string literals (except when
 | 
						||
a literal is also marked as a raw string).  After decoding, the grammar
 | 
						||
for the contents of the string is:</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-f_string">f_string</strong>          ::= (<a class="reference internal" href="#grammar-token-python-grammar-literal_char"><code class="xref docutils literal notranslate"><span class="pre">literal_char</span></code></a> | "{{" | "}}" | <a class="reference internal" href="#grammar-token-python-grammar-replacement_field"><code class="xref docutils literal notranslate"><span class="pre">replacement_field</span></code></a>)*
 | 
						||
<strong id="grammar-token-python-grammar-replacement_field">replacement_field</strong> ::= "{" <a class="reference internal" href="#grammar-token-python-grammar-f_expression"><code class="xref docutils literal notranslate"><span class="pre">f_expression</span></code></a> ["="] ["!" <a class="reference internal" href="#grammar-token-python-grammar-conversion"><code class="xref docutils literal notranslate"><span class="pre">conversion</span></code></a>] [":" <a class="reference internal" href="#grammar-token-python-grammar-format_spec"><code class="xref docutils literal notranslate"><span class="pre">format_spec</span></code></a>] "}"
 | 
						||
<strong id="grammar-token-python-grammar-f_expression">f_expression</strong>      ::= (<a class="reference internal" href="expressions.html#grammar-token-python-grammar-conditional_expression"><code class="xref docutils literal notranslate"><span class="pre">conditional_expression</span></code></a> | "*" <a class="reference internal" href="expressions.html#grammar-token-python-grammar-or_expr"><code class="xref docutils literal notranslate"><span class="pre">or_expr</span></code></a>)
 | 
						||
                      ("," <a class="reference internal" href="expressions.html#grammar-token-python-grammar-conditional_expression"><code class="xref docutils literal notranslate"><span class="pre">conditional_expression</span></code></a> | "," "*" <a class="reference internal" href="expressions.html#grammar-token-python-grammar-or_expr"><code class="xref docutils literal notranslate"><span class="pre">or_expr</span></code></a>)* [","]
 | 
						||
                      | <a class="reference internal" href="expressions.html#grammar-token-python-grammar-yield_expression"><code class="xref docutils literal notranslate"><span class="pre">yield_expression</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-conversion">conversion</strong>        ::= "s" | "r" | "a"
 | 
						||
<strong id="grammar-token-python-grammar-format_spec">format_spec</strong>       ::= (<a class="reference internal" href="#grammar-token-python-grammar-literal_char"><code class="xref docutils literal notranslate"><span class="pre">literal_char</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-replacement_field"><code class="xref docutils literal notranslate"><span class="pre">replacement_field</span></code></a>)*
 | 
						||
<strong id="grammar-token-python-grammar-literal_char">literal_char</strong>      ::= <any code point except "{", "}" or NULL>
 | 
						||
</pre>
 | 
						||
<p>The parts of the string outside curly braces are treated literally,
 | 
						||
except that any doubled curly braces <code class="docutils literal notranslate"><span class="pre">'{{'</span></code> or <code class="docutils literal notranslate"><span class="pre">'}}'</span></code> are replaced
 | 
						||
with the corresponding single curly brace.  A single opening curly
 | 
						||
bracket <code class="docutils literal notranslate"><span class="pre">'{'</span></code> marks a replacement field, which starts with a
 | 
						||
Python expression. To display both the expression text and its value after
 | 
						||
evaluation, (useful in debugging), an equal sign <code class="docutils literal notranslate"><span class="pre">'='</span></code> may be added after the
 | 
						||
expression. A conversion field, introduced by an exclamation point <code class="docutils literal notranslate"><span class="pre">'!'</span></code> may
 | 
						||
follow.  A format specifier may also be appended, introduced by a colon <code class="docutils literal notranslate"><span class="pre">':'</span></code>.
 | 
						||
A replacement field ends with a closing curly bracket <code class="docutils literal notranslate"><span class="pre">'}'</span></code>.</p>
 | 
						||
<p>Expressions in formatted string literals are treated like regular
 | 
						||
Python expressions surrounded by parentheses, with a few exceptions.
 | 
						||
An empty expression is not allowed, and both <a class="reference internal" href="expressions.html#lambda"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">lambda</span></code></a>  and
 | 
						||
assignment expressions <code class="docutils literal notranslate"><span class="pre">:=</span></code> must be surrounded by explicit parentheses.
 | 
						||
Each expression is evaluated in the context where the formatted string literal
 | 
						||
appears, in order from left to right.  Replacement expressions can contain
 | 
						||
newlines in both single-quoted and triple-quoted f-strings and they can contain
 | 
						||
comments.  Everything that comes after a <code class="docutils literal notranslate"><span class="pre">#</span></code> inside a replacement field
 | 
						||
is a comment (even closing braces and quotes). In that case, replacement fields
 | 
						||
must be closed in a different line.</p>
 | 
						||
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>>>> f"abc{a # This is a comment }"
 | 
						||
... + 3}"
 | 
						||
'abc5'
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.7: </span>Prior to Python 3.7, an <a class="reference internal" href="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="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 formatted string literals due to a problem with the implementation.</p>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span>Prior to Python 3.12, comments were not allowed inside f-string replacement
 | 
						||
fields.</p>
 | 
						||
</div>
 | 
						||
<p>When the equal sign <code class="docutils literal notranslate"><span class="pre">'='</span></code> is provided, the output will have the expression
 | 
						||
text, the <code class="docutils literal notranslate"><span class="pre">'='</span></code> and the evaluated value. Spaces after the opening brace
 | 
						||
<code class="docutils literal notranslate"><span class="pre">'{'</span></code>, within the expression and after the <code class="docutils literal notranslate"><span class="pre">'='</span></code> are all retained in the
 | 
						||
output. By default, the <code class="docutils literal notranslate"><span class="pre">'='</span></code> causes the <a class="reference internal" href="../library/functions.html#repr" title="repr"><code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code></a> of the expression to be
 | 
						||
provided, unless there is a format specified. When a format is specified it
 | 
						||
defaults to the <a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-func docutils literal notranslate"><span class="pre">str()</span></code></a> of the expression unless a conversion <code class="docutils literal notranslate"><span class="pre">'!r'</span></code> is
 | 
						||
declared.</p>
 | 
						||
<div class="versionadded">
 | 
						||
<p><span class="versionmodified added">Added in version 3.8: </span>The equal sign <code class="docutils literal notranslate"><span class="pre">'='</span></code>.</p>
 | 
						||
</div>
 | 
						||
<p>If a conversion is specified, the result of evaluating the expression
 | 
						||
is converted before formatting.  Conversion <code class="docutils literal notranslate"><span class="pre">'!s'</span></code> calls <a class="reference internal" href="../library/stdtypes.html#str" title="str"><code class="xref py py-func docutils literal notranslate"><span class="pre">str()</span></code></a> on
 | 
						||
the result, <code class="docutils literal notranslate"><span class="pre">'!r'</span></code> calls <a class="reference internal" href="../library/functions.html#repr" title="repr"><code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code></a>, and <code class="docutils literal notranslate"><span class="pre">'!a'</span></code> calls <a class="reference internal" href="../library/functions.html#ascii" title="ascii"><code class="xref py py-func docutils literal notranslate"><span class="pre">ascii()</span></code></a>.</p>
 | 
						||
<p>The result is then formatted using the <a class="reference internal" href="../library/functions.html#format" title="format"><code class="xref py py-func docutils literal notranslate"><span class="pre">format()</span></code></a> protocol.  The
 | 
						||
format specifier is passed to the <a class="reference internal" href="datamodel.html#object.__format__" title="object.__format__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__format__()</span></code></a> method of the
 | 
						||
expression or conversion result.  An empty string is passed when the
 | 
						||
format specifier is omitted.  The formatted result is then included in
 | 
						||
the final value of the whole string.</p>
 | 
						||
<p>Top-level format specifiers may include nested replacement fields. These nested
 | 
						||
fields may include their own conversion fields and <a class="reference internal" href="../library/string.html#formatspec"><span class="std std-ref">format specifiers</span></a>, but may not include more deeply nested replacement fields. The
 | 
						||
<a class="reference internal" href="../library/string.html#formatspec"><span class="std std-ref">format specifier mini-language</span></a> is the same as that used by
 | 
						||
the <a class="reference internal" href="../library/stdtypes.html#str.format" title="str.format"><code class="xref py py-meth docutils literal notranslate"><span class="pre">str.format()</span></code></a> method.</p>
 | 
						||
<p>Formatted string literals may be concatenated, but replacement fields
 | 
						||
cannot be split across literals.</p>
 | 
						||
<p>Some examples of formatted string literals:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">name</span> <span class="o">=</span> <span class="s2">"Fred"</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"He said his name is </span><span class="si">{</span><span class="n">name</span><span class="si">!r}</span><span class="s2">."</span>
 | 
						||
<span class="go">"He said his name is 'Fred'."</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"He said his name is </span><span class="si">{</span><span class="nb">repr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}</span><span class="s2">."</span>  <span class="c1"># repr() is equivalent to !r</span>
 | 
						||
<span class="go">"He said his name is 'Fred'."</span>
 | 
						||
<span class="gp">>>> </span><span class="n">width</span> <span class="o">=</span> <span class="mi">10</span>
 | 
						||
<span class="gp">>>> </span><span class="n">precision</span> <span class="o">=</span> <span class="mi">4</span>
 | 
						||
<span class="gp">>>> </span><span class="n">value</span> <span class="o">=</span> <span class="n">decimal</span><span class="o">.</span><span class="n">Decimal</span><span class="p">(</span><span class="s2">"12.34567"</span><span class="p">)</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"result: </span><span class="si">{</span><span class="n">value</span><span class="si">:{</span><span class="n">width</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">precision</span><span class="si">}}</span><span class="s2">"</span>  <span class="c1"># nested fields</span>
 | 
						||
<span class="go">'result:      12.35'</span>
 | 
						||
<span class="gp">>>> </span><span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="mi">2017</span><span class="p">,</span> <span class="n">month</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">day</span><span class="o">=</span><span class="mi">27</span><span class="p">)</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">today</span><span class="si">:</span><span class="s2">%B %d, %Y</span><span class="si">}</span><span class="s2">"</span>  <span class="c1"># using date format specifier</span>
 | 
						||
<span class="go">'January 27, 2017'</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">today</span><span class="si">=:</span><span class="s2">%B %d, %Y</span><span class="si">}</span><span class="s2">"</span> <span class="c1"># using date format specifier and debugging</span>
 | 
						||
<span class="go">'today=January 27, 2017'</span>
 | 
						||
<span class="gp">>>> </span><span class="n">number</span> <span class="o">=</span> <span class="mi">1024</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">number</span><span class="si">:</span><span class="s2">#0x</span><span class="si">}</span><span class="s2">"</span>  <span class="c1"># using integer format specifier</span>
 | 
						||
<span class="go">'0x400'</span>
 | 
						||
<span class="gp">>>> </span><span class="n">foo</span> <span class="o">=</span> <span class="s2">"bar"</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="si">= }</span><span class="s2">"</span> <span class="c1"># preserves whitespace</span>
 | 
						||
<span class="go">" foo = 'bar'"</span>
 | 
						||
<span class="gp">>>> </span><span class="n">line</span> <span class="o">=</span> <span class="s2">"The mill's closed"</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">line</span><span class="w"> </span><span class="si">= }</span><span class="s2">"</span>
 | 
						||
<span class="go">'line = "The mill\'s closed"'</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">line</span><span class="w"> </span><span class="si">= :</span><span class="s2">20</span><span class="si">}</span><span class="s2">"</span>
 | 
						||
<span class="go">"line = The mill's closed   "</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">line</span><span class="w"> </span><span class="si">= !r:</span><span class="s2">20</span><span class="si">}</span><span class="s2">"</span>
 | 
						||
<span class="go">'line = "The mill\'s closed" '</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>Reusing the outer f-string quoting type inside a replacement field is
 | 
						||
permitted:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">a</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
 | 
						||
<span class="gp">>>> </span><span class="sa">f</span><span class="s2">"abc </span><span class="si">{</span><span class="n">a</span><span class="p">[</span><span class="s2">"x"</span><span class="p">]</span><span class="si">}</span><span class="s2"> def"</span>
 | 
						||
<span class="go">'abc 2 def'</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span>Prior to Python 3.12, reuse of the same quoting type of the outer f-string
 | 
						||
inside a replacement field was not possible.</p>
 | 
						||
</div>
 | 
						||
<p>Backslashes are also allowed in replacement fields and are evaluated the same
 | 
						||
way as in any other context:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">]</span>
 | 
						||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"List a contains:</span><span class="se">\n</span><span class="si">{</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
 | 
						||
<span class="go">List a contains:</span>
 | 
						||
<span class="go">a</span>
 | 
						||
<span class="go">b</span>
 | 
						||
<span class="go">c</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.12: </span>Prior to Python 3.12, backslashes were not permitted inside an f-string
 | 
						||
replacement field.</p>
 | 
						||
</div>
 | 
						||
<p>Formatted string literals cannot be used as docstrings, even if they do not
 | 
						||
include expressions.</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span><span class="w"> </span><span class="nf">foo</span><span class="p">():</span>
 | 
						||
<span class="gp">... </span>    <span class="sa">f</span><span class="s2">"Not a docstring"</span>
 | 
						||
<span class="gp">...</span>
 | 
						||
<span class="gp">>>> </span><span class="n">foo</span><span class="o">.</span><span class="vm">__doc__</span> <span class="ow">is</span> <span class="kc">None</span>
 | 
						||
<span class="go">True</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>See also <span class="target" id="index-26"></span><a class="pep reference external" href="https://peps.python.org/pep-0498/"><strong>PEP 498</strong></a> for the proposal that added formatted string literals,
 | 
						||
and <a class="reference internal" href="../library/stdtypes.html#str.format" title="str.format"><code class="xref py py-meth docutils literal notranslate"><span class="pre">str.format()</span></code></a>, which uses a related format string mechanism.</p>
 | 
						||
</section>
 | 
						||
<section id="numeric-literals">
 | 
						||
<span id="numbers"></span><h3><span class="section-number">2.4.4. </span>Numeric literals<a class="headerlink" href="#numeric-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<p id="index-27">There are three types of numeric literals: integers, floating-point numbers, and
 | 
						||
imaginary numbers.  There are no complex literals (complex numbers can be formed
 | 
						||
by adding a real number and an imaginary number).</p>
 | 
						||
<p>Note that numeric literals do not include a sign; a phrase like <code class="docutils literal notranslate"><span class="pre">-1</span></code> is
 | 
						||
actually an expression composed of the unary operator ‘<code class="docutils literal notranslate"><span class="pre">-</span></code>’ and the literal
 | 
						||
<code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
 | 
						||
</section>
 | 
						||
<section id="integer-literals">
 | 
						||
<span id="integers"></span><span id="index-28"></span><h3><span class="section-number">2.4.5. </span>Integer literals<a class="headerlink" href="#integer-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Integer literals are described by the following lexical definitions:</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-integer">integer</strong>      ::= <a class="reference internal" href="#grammar-token-python-grammar-decinteger"><code class="xref docutils literal notranslate"><span class="pre">decinteger</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-bininteger"><code class="xref docutils literal notranslate"><span class="pre">bininteger</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-octinteger"><code class="xref docutils literal notranslate"><span class="pre">octinteger</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-hexinteger"><code class="xref docutils literal notranslate"><span class="pre">hexinteger</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-decinteger">decinteger</strong>   ::= <a class="reference internal" href="#grammar-token-python-grammar-nonzerodigit"><code class="xref docutils literal notranslate"><span class="pre">nonzerodigit</span></code></a> (["_"] <a class="reference internal" href="#grammar-token-python-grammar-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a>)* | "0"+ (["_"] "0")*
 | 
						||
<strong id="grammar-token-python-grammar-bininteger">bininteger</strong>   ::= "0" ("b" | "B") (["_"] <a class="reference internal" href="#grammar-token-python-grammar-bindigit"><code class="xref docutils literal notranslate"><span class="pre">bindigit</span></code></a>)+
 | 
						||
<strong id="grammar-token-python-grammar-octinteger">octinteger</strong>   ::= "0" ("o" | "O") (["_"] <a class="reference internal" href="#grammar-token-python-grammar-octdigit"><code class="xref docutils literal notranslate"><span class="pre">octdigit</span></code></a>)+
 | 
						||
<strong id="grammar-token-python-grammar-hexinteger">hexinteger</strong>   ::= "0" ("x" | "X") (["_"] <a class="reference internal" href="#grammar-token-python-grammar-hexdigit"><code class="xref docutils literal notranslate"><span class="pre">hexdigit</span></code></a>)+
 | 
						||
<strong id="grammar-token-python-grammar-nonzerodigit">nonzerodigit</strong> ::= "1"..."9"
 | 
						||
<strong id="grammar-token-python-grammar-digit">digit</strong>        ::= "0"..."9"
 | 
						||
<strong id="grammar-token-python-grammar-bindigit">bindigit</strong>     ::= "0" | "1"
 | 
						||
<strong id="grammar-token-python-grammar-octdigit">octdigit</strong>     ::= "0"..."7"
 | 
						||
<strong id="grammar-token-python-grammar-hexdigit">hexdigit</strong>     ::= <a class="reference internal" href="#grammar-token-python-grammar-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a> | "a"..."f" | "A"..."F"
 | 
						||
</pre>
 | 
						||
<p>There is no limit for the length of integer literals apart from what can be
 | 
						||
stored in available memory.</p>
 | 
						||
<p>Underscores are ignored for determining the numeric value of the literal.  They
 | 
						||
can be used to group digits for enhanced readability.  One underscore can occur
 | 
						||
between digits, and after base specifiers like <code class="docutils literal notranslate"><span class="pre">0x</span></code>.</p>
 | 
						||
<p>Note that leading zeros in a non-zero decimal number are not allowed. This is
 | 
						||
for disambiguation with C-style octal literals, which Python used before version
 | 
						||
3.0.</p>
 | 
						||
<p>Some examples of integer literals:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="mi">7</span>     <span class="mi">2147483647</span>                        <span class="mo">0o177</span>    <span class="mb">0b100110111</span>
 | 
						||
<span class="mi">3</span>     <span class="mi">79228162514264337593543950336</span>     <span class="mo">0o377</span>    <span class="mh">0xdeadbeef</span>
 | 
						||
      <span class="mi">100_000_000_000</span>                   <span class="mb">0b_1110_0101</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.6: </span>Underscores are now allowed for grouping purposes in literals.</p>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
<section id="floating-point-literals">
 | 
						||
<span id="floating"></span><span id="index-29"></span><h3><span class="section-number">2.4.6. </span>Floating-point literals<a class="headerlink" href="#floating-point-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Floating-point literals are described by the following lexical definitions:</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-floatnumber">floatnumber</strong>   ::= <a class="reference internal" href="#grammar-token-python-grammar-pointfloat"><code class="xref docutils literal notranslate"><span class="pre">pointfloat</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-exponentfloat"><code class="xref docutils literal notranslate"><span class="pre">exponentfloat</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-pointfloat">pointfloat</strong>    ::= [<a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>] <a class="reference internal" href="#grammar-token-python-grammar-fraction"><code class="xref docutils literal notranslate"><span class="pre">fraction</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a> "."
 | 
						||
<strong id="grammar-token-python-grammar-exponentfloat">exponentfloat</strong> ::= (<a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-pointfloat"><code class="xref docutils literal notranslate"><span class="pre">pointfloat</span></code></a>) <a class="reference internal" href="#grammar-token-python-grammar-exponent"><code class="xref docutils literal notranslate"><span class="pre">exponent</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-digitpart">digitpart</strong>     ::= <a class="reference internal" href="#grammar-token-python-grammar-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a> (["_"] <a class="reference internal" href="#grammar-token-python-grammar-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a>)*
 | 
						||
<strong id="grammar-token-python-grammar-fraction">fraction</strong>      ::= "." <a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>
 | 
						||
<strong id="grammar-token-python-grammar-exponent">exponent</strong>      ::= ("e" | "E") ["+" | "-"] <a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>
 | 
						||
</pre>
 | 
						||
<p>Note that the integer and exponent parts are always interpreted using radix 10.
 | 
						||
For example, <code class="docutils literal notranslate"><span class="pre">077e010</span></code> is legal, and denotes the same number as <code class="docutils literal notranslate"><span class="pre">77e10</span></code>. The
 | 
						||
allowed range of floating-point literals is implementation-dependent.  As in
 | 
						||
integer literals, underscores are supported for digit grouping.</p>
 | 
						||
<p>Some examples of floating-point literals:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="mf">3.14</span>    <span class="mf">10.</span>    <span class="mf">.001</span>    <span class="mf">1e100</span>    <span class="mf">3.14e-10</span>    <span class="mf">0e0</span>    <span class="mf">3.14_15_93</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<div class="versionchanged">
 | 
						||
<p><span class="versionmodified changed">Changed in version 3.6: </span>Underscores are now allowed for grouping purposes in literals.</p>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
<section id="imaginary-literals">
 | 
						||
<span id="imaginary"></span><span id="index-30"></span><h3><span class="section-number">2.4.7. </span>Imaginary literals<a class="headerlink" href="#imaginary-literals" title="Link to this heading">¶</a></h3>
 | 
						||
<p>Imaginary literals are described by the following lexical definitions:</p>
 | 
						||
<pre>
 | 
						||
<strong id="grammar-token-python-grammar-imagnumber">imagnumber</strong> ::= (<a class="reference internal" href="#grammar-token-python-grammar-floatnumber"><code class="xref docutils literal notranslate"><span class="pre">floatnumber</span></code></a> | <a class="reference internal" href="#grammar-token-python-grammar-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>) ("j" | "J")
 | 
						||
</pre>
 | 
						||
<p>An imaginary literal yields a complex number with a real part of 0.0.  Complex
 | 
						||
numbers are represented as a pair of floating-point numbers and have the same
 | 
						||
restrictions on their range.  To create a complex number with a nonzero real
 | 
						||
part, add a floating-point number to it, e.g., <code class="docutils literal notranslate"><span class="pre">(3+4j)</span></code>.  Some examples of
 | 
						||
imaginary literals:</p>
 | 
						||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="mf">3.14</span><span class="n">j</span>   <span class="mf">10.</span><span class="n">j</span>    <span class="mi">10</span><span class="n">j</span>     <span class="mf">.001</span><span class="n">j</span>   <span class="mf">1e100j</span>   <span class="mf">3.14e-10</span><span class="n">j</span>   <span class="mf">3.14_15_93</span><span class="n">j</span>
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
</section>
 | 
						||
<section id="operators">
 | 
						||
<span id="id14"></span><h2><span class="section-number">2.5. </span>Operators<a class="headerlink" href="#operators" title="Link to this heading">¶</a></h2>
 | 
						||
<p id="index-31">The following tokens are operators:</p>
 | 
						||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>+       -       *       **      /       //      %      @
 | 
						||
<<      >>      &       |       ^       ~       :=
 | 
						||
<       >       <=      >=      ==      !=
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
</section>
 | 
						||
<section id="delimiters">
 | 
						||
<span id="id15"></span><h2><span class="section-number">2.6. </span>Delimiters<a class="headerlink" href="#delimiters" title="Link to this heading">¶</a></h2>
 | 
						||
<p id="index-32">The following tokens serve as delimiters in the grammar:</p>
 | 
						||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>(       )       [       ]       {       }
 | 
						||
,       :       !       .       ;       @       =
 | 
						||
->      +=      -=      *=      /=      //=     %=
 | 
						||
@=      &=      |=      ^=      >>=     <<=     **=
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>The period can also occur in floating-point and imaginary literals.  A sequence
 | 
						||
of three periods has a special meaning as an ellipsis literal. The second half
 | 
						||
of the list, the augmented assignment operators, serve lexically as delimiters,
 | 
						||
but also perform an operation.</p>
 | 
						||
<p>The following printing ASCII characters have special meaning as part of other
 | 
						||
tokens or are otherwise significant to the lexical analyzer:</p>
 | 
						||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>'       "       #       \
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p>The following printing ASCII characters are not used in Python.  Their
 | 
						||
occurrence outside string literals and comments is an unconditional error:</p>
 | 
						||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$       ?       `
 | 
						||
</pre></div>
 | 
						||
</div>
 | 
						||
<p class="rubric">Footnotes</p>
 | 
						||
<aside class="footnote-list brackets">
 | 
						||
<aside class="footnote brackets" id="id16" role="doc-footnote">
 | 
						||
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id12">1</a><span class="fn-bracket">]</span></span>
 | 
						||
<p><a class="reference external" href="https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt">https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt</a></p>
 | 
						||
</aside>
 | 
						||
</aside>
 | 
						||
</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="#">2. Lexical analysis</a><ul>
 | 
						||
<li><a class="reference internal" href="#line-structure">2.1. Line structure</a><ul>
 | 
						||
<li><a class="reference internal" href="#logical-lines">2.1.1. Logical lines</a></li>
 | 
						||
<li><a class="reference internal" href="#physical-lines">2.1.2. Physical lines</a></li>
 | 
						||
<li><a class="reference internal" href="#comments">2.1.3. Comments</a></li>
 | 
						||
<li><a class="reference internal" href="#encoding-declarations">2.1.4. Encoding declarations</a></li>
 | 
						||
<li><a class="reference internal" href="#explicit-line-joining">2.1.5. Explicit line joining</a></li>
 | 
						||
<li><a class="reference internal" href="#implicit-line-joining">2.1.6. Implicit line joining</a></li>
 | 
						||
<li><a class="reference internal" href="#blank-lines">2.1.7. Blank lines</a></li>
 | 
						||
<li><a class="reference internal" href="#indentation">2.1.8. Indentation</a></li>
 | 
						||
<li><a class="reference internal" href="#whitespace-between-tokens">2.1.9. Whitespace between tokens</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#other-tokens">2.2. Other tokens</a></li>
 | 
						||
<li><a class="reference internal" href="#identifiers">2.3. Identifiers and keywords</a><ul>
 | 
						||
<li><a class="reference internal" href="#keywords">2.3.1. Keywords</a></li>
 | 
						||
<li><a class="reference internal" href="#soft-keywords">2.3.2. Soft Keywords</a></li>
 | 
						||
<li><a class="reference internal" href="#reserved-classes-of-identifiers">2.3.3. Reserved classes of identifiers</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#literals">2.4. Literals</a><ul>
 | 
						||
<li><a class="reference internal" href="#string-and-bytes-literals">2.4.1. String and Bytes literals</a><ul>
 | 
						||
<li><a class="reference internal" href="#escape-sequences">2.4.1.1. Escape sequences</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#string-literal-concatenation">2.4.2. String literal concatenation</a></li>
 | 
						||
<li><a class="reference internal" href="#formatted-string-literals">2.4.3. f-strings</a></li>
 | 
						||
<li><a class="reference internal" href="#numeric-literals">2.4.4. Numeric literals</a></li>
 | 
						||
<li><a class="reference internal" href="#integer-literals">2.4.5. Integer literals</a></li>
 | 
						||
<li><a class="reference internal" href="#floating-point-literals">2.4.6. Floating-point literals</a></li>
 | 
						||
<li><a class="reference internal" href="#imaginary-literals">2.4.7. Imaginary literals</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
<li><a class="reference internal" href="#operators">2.5. Operators</a></li>
 | 
						||
<li><a class="reference internal" href="#delimiters">2.6. Delimiters</a></li>
 | 
						||
</ul>
 | 
						||
</li>
 | 
						||
</ul>
 | 
						||
 | 
						||
  </div>
 | 
						||
  <div>
 | 
						||
    <h4>Previous topic</h4>
 | 
						||
    <p class="topless"><a href="introduction.html"
 | 
						||
                          title="previous chapter"><span class="section-number">1. </span>Introduction</a></p>
 | 
						||
  </div>
 | 
						||
  <div>
 | 
						||
    <h4>Next topic</h4>
 | 
						||
    <p class="topless"><a href="datamodel.html"
 | 
						||
                          title="next chapter"><span class="section-number">3. </span>Data model</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/reference/lexical_analysis.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="datamodel.html" title="3. Data model"
 | 
						||
             >next</a> |</li>
 | 
						||
        <li class="right" >
 | 
						||
          <a href="introduction.html" title="1. Introduction"
 | 
						||
             >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" >The Python Language Reference</a> »</li>
 | 
						||
        <li class="nav-item nav-item-this"><a href=""><span class="section-number">2. </span>Lexical analysis</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> |