940 lines
80 KiB
HTML
940 lines
80 KiB
HTML
|
|
|||
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" />
|
|||
|
<title>2. Lexical analysis — Python 3.7.4 documentation</title>
|
|||
|
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
|||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|||
|
|
|||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/language_data.js"></script>
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
|||
|
|
|||
|
<link rel="search" type="application/opensearchdescription+xml"
|
|||
|
title="Search within Python 3.7.4 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="shortcut icon" type="image/png" href="../_static/py.png" />
|
|||
|
<link rel="canonical" href="https://docs.python.org/3/reference/lexical_analysis.html" />
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/switchers.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen {
|
|||
|
table.full-width-table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
</head><body>
|
|||
|
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<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.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">The Python Language Reference</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="document">
|
|||
|
<div class="documentwrapper">
|
|||
|
<div class="bodywrapper">
|
|||
|
<div class="body" role="main">
|
|||
|
|
|||
|
<div class="section" id="lexical-analysis">
|
|||
|
<span id="lexical"></span><h1>2. Lexical analysis<a class="headerlink" href="#lexical-analysis" title="Permalink to this headline">¶</a></h1>
|
|||
|
<p id="index-0">A Python program is read by a <em>parser</em>. Input to the parser is a stream of
|
|||
|
<em>tokens</em>, generated by the <em>lexical analyzer</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://www.python.org/dev/peps/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>
|
|||
|
<div class="section" id="line-structure">
|
|||
|
<span id="id1"></span><h2>2.1. Line structure<a class="headerlink" href="#line-structure" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p id="index-2">A Python program is divided into a number of <em>logical lines</em>.</p>
|
|||
|
<div class="section" id="logical-lines">
|
|||
|
<span id="id2"></span><h3>2.1.1. Logical lines<a class="headerlink" href="#logical-lines" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="physical-lines">
|
|||
|
<span id="id3"></span><h3>2.1.2. Physical lines<a class="headerlink" href="#physical-lines" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="comments">
|
|||
|
<span id="id4"></span><h3>2.1.3. Comments<a class="headerlink" href="#comments" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="encoding-declarations">
|
|||
|
<span id="encodings"></span><h3>2.1.4. Encoding declarations<a class="headerlink" href="#encoding-declarations" title="Permalink to this headline">¶</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. In
|
|||
|
addition, if the first bytes of the file are the UTF-8 byte-order mark
|
|||
|
(<code class="docutils literal notranslate"><span class="pre">b'\xef\xbb\xbf'</span></code>), the declared file encoding is UTF-8 (this is supported,
|
|||
|
among others, by Microsoft’s <strong class="program">notepad</strong>).</p>
|
|||
|
<p>If an encoding is declared, the encoding name must be recognized by Python. The
|
|||
|
encoding is used for all lexical analysis, including string literals, comments
|
|||
|
and identifiers.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="explicit-line-joining">
|
|||
|
<span id="explicit-joining"></span><h3>2.1.5. Explicit line joining<a class="headerlink" href="#explicit-line-joining" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="implicit-line-joining">
|
|||
|
<span id="implicit-joining"></span><h3>2.1.6. Implicit line joining<a class="headerlink" href="#implicit-line-joining" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="blank-lines">
|
|||
|
<span id="id5"></span><h3>2.1.7. Blank lines<a class="headerlink" href="#blank-lines" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="indentation">
|
|||
|
<span id="id6"></span><h3>2.1.8. Indentation<a class="headerlink" href="#indentation" title="Permalink to this headline">¶</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="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="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>
|
|||
|
</div>
|
|||
|
<div class="section" id="whitespace-between-tokens">
|
|||
|
<span id="whitespace"></span><h3>2.1.9. Whitespace between tokens<a class="headerlink" href="#whitespace-between-tokens" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="other-tokens">
|
|||
|
<span id="id7"></span><h2>2.2. Other tokens<a class="headerlink" href="#other-tokens" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="identifiers">
|
|||
|
<span id="identifiers-and-keywords"></span><h2>2.3. Identifiers and keywords<a class="headerlink" href="#identifiers" title="Permalink to this headline">¶</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://www.python.org/dev/peps/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
|
|||
|
are the same as in Python 2.x: 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>.</p>
|
|||
|
<p>Python 3.0 introduces additional characters from outside the ASCII range (see
|
|||
|
<span class="target" id="index-12"></span><a class="pep reference external" href="https://www.python.org/dev/peps/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-identifier">identifier </strong> ::= <a class="reference internal" href="#grammar-token-xid-start"><code class="xref docutils literal notranslate"><span class="pre">xid_start</span></code></a> <a class="reference internal" href="#grammar-token-xid-continue"><code class="xref docutils literal notranslate"><span class="pre">xid_continue</span></code></a>*
|
|||
|
<strong id="grammar-token-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-id-continue">id_continue </strong> ::= <all characters in <a class="reference internal" href="#grammar-token-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-xid-start">xid_start </strong> ::= <all characters in <a class="reference internal" href="#grammar-token-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-xid-continue">xid_continue</strong> ::= <all characters in <a class="reference internal" href="#grammar-token-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="http://www.unicode.org/Public/11.0.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
|
|||
|
4.1 can be found at
|
|||
|
<a class="reference external" href="https://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html">https://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html</a>.</p>
|
|||
|
<div class="section" id="keywords">
|
|||
|
<span id="id8"></span><h3>2.3.1. Keywords<a class="headerlink" href="#keywords" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="reserved-classes-of-identifiers">
|
|||
|
<span id="id-classes"></span><span id="index-14"></span><h3>2.3.2. Reserved classes of identifiers<a class="headerlink" href="#reserved-classes-of-identifiers" title="Permalink to this headline">¶</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>. The special identifier <code class="docutils literal notranslate"><span class="pre">_</span></code> is used
|
|||
|
in the interactive interpreter to store the result of the last evaluation; 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. When not in interactive mode, <code class="docutils literal notranslate"><span class="pre">_</span></code>
|
|||
|
has no special meaning and is not defined. See section <a class="reference internal" href="simple_stmts.html#import"><span class="std std-ref">The import statement</span></a>.</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>
|
|||
|
</div>
|
|||
|
</dd>
|
|||
|
<dt><code class="docutils literal notranslate"><span class="pre">__*__</span></code></dt><dd><p>System-defined 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>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="literals">
|
|||
|
<span id="id9"></span><h2>2.4. Literals<a class="headerlink" href="#literals" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p id="index-15">Literals are notations for constant values of some built-in types.</p>
|
|||
|
<div class="section" id="string-and-bytes-literals">
|
|||
|
<span id="strings"></span><span id="index-16"></span><h3>2.4.1. String and Bytes literals<a class="headerlink" href="#string-and-bytes-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>String literals are described by the following lexical definitions:</p>
|
|||
|
<pre>
|
|||
|
<strong id="grammar-token-stringliteral">stringliteral </strong> ::= [<a class="reference internal" href="#grammar-token-stringprefix"><code class="xref docutils literal notranslate"><span class="pre">stringprefix</span></code></a>](<a class="reference internal" href="#grammar-token-shortstring"><code class="xref docutils literal notranslate"><span class="pre">shortstring</span></code></a> | <a class="reference internal" href="#grammar-token-longstring"><code class="xref docutils literal notranslate"><span class="pre">longstring</span></code></a>)
|
|||
|
<strong id="grammar-token-stringprefix">stringprefix </strong> ::= "r" | "u" | "R" | "U" | "f" | "F"
|
|||
|
| "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
|
|||
|
<strong id="grammar-token-shortstring">shortstring </strong> ::= "'" <a class="reference internal" href="#grammar-token-shortstringitem"><code class="xref docutils literal notranslate"><span class="pre">shortstringitem</span></code></a>* "'" | '"' <a class="reference internal" href="#grammar-token-shortstringitem"><code class="xref docutils literal notranslate"><span class="pre">shortstringitem</span></code></a>* '"'
|
|||
|
<strong id="grammar-token-longstring">longstring </strong> ::= "'''" <a class="reference internal" href="#grammar-token-longstringitem"><code class="xref docutils literal notranslate"><span class="pre">longstringitem</span></code></a>* "'''" | '"""' <a class="reference internal" href="#grammar-token-longstringitem"><code class="xref docutils literal notranslate"><span class="pre">longstringitem</span></code></a>* '"""'
|
|||
|
<strong id="grammar-token-shortstringitem">shortstringitem</strong> ::= <a class="reference internal" href="#grammar-token-shortstringchar"><code class="xref docutils literal notranslate"><span class="pre">shortstringchar</span></code></a> | <a class="reference internal" href="#grammar-token-stringescapeseq"><code class="xref docutils literal notranslate"><span class="pre">stringescapeseq</span></code></a>
|
|||
|
<strong id="grammar-token-longstringitem">longstringitem </strong> ::= <a class="reference internal" href="#grammar-token-longstringchar"><code class="xref docutils literal notranslate"><span class="pre">longstringchar</span></code></a> | <a class="reference internal" href="#grammar-token-stringescapeseq"><code class="xref docutils literal notranslate"><span class="pre">stringescapeseq</span></code></a>
|
|||
|
<strong id="grammar-token-shortstringchar">shortstringchar</strong> ::= <any source character except "\" or newline or the quote>
|
|||
|
<strong id="grammar-token-longstringchar">longstringchar </strong> ::= <any source character except "\">
|
|||
|
<strong id="grammar-token-stringescapeseq">stringescapeseq</strong> ::= "\" <any source character>
|
|||
|
</pre>
|
|||
|
<pre>
|
|||
|
<strong id="grammar-token-bytesliteral">bytesliteral </strong> ::= <a class="reference internal" href="#grammar-token-bytesprefix"><code class="xref docutils literal notranslate"><span class="pre">bytesprefix</span></code></a>(<a class="reference internal" href="#grammar-token-shortbytes"><code class="xref docutils literal notranslate"><span class="pre">shortbytes</span></code></a> | <a class="reference internal" href="#grammar-token-longbytes"><code class="xref docutils literal notranslate"><span class="pre">longbytes</span></code></a>)
|
|||
|
<strong id="grammar-token-bytesprefix">bytesprefix </strong> ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
|
|||
|
<strong id="grammar-token-shortbytes">shortbytes </strong> ::= "'" <a class="reference internal" href="#grammar-token-shortbytesitem"><code class="xref docutils literal notranslate"><span class="pre">shortbytesitem</span></code></a>* "'" | '"' <a class="reference internal" href="#grammar-token-shortbytesitem"><code class="xref docutils literal notranslate"><span class="pre">shortbytesitem</span></code></a>* '"'
|
|||
|
<strong id="grammar-token-longbytes">longbytes </strong> ::= "'''" <a class="reference internal" href="#grammar-token-longbytesitem"><code class="xref docutils literal notranslate"><span class="pre">longbytesitem</span></code></a>* "'''" | '"""' <a class="reference internal" href="#grammar-token-longbytesitem"><code class="xref docutils literal notranslate"><span class="pre">longbytesitem</span></code></a>* '"""'
|
|||
|
<strong id="grammar-token-shortbytesitem">shortbytesitem</strong> ::= <a class="reference internal" href="#grammar-token-shortbyteschar"><code class="xref docutils literal notranslate"><span class="pre">shortbyteschar</span></code></a> | <a class="reference internal" href="#grammar-token-bytesescapeseq"><code class="xref docutils literal notranslate"><span class="pre">bytesescapeseq</span></code></a>
|
|||
|
<strong id="grammar-token-longbytesitem">longbytesitem </strong> ::= <a class="reference internal" href="#grammar-token-longbyteschar"><code class="xref docutils literal notranslate"><span class="pre">longbyteschar</span></code></a> | <a class="reference internal" href="#grammar-token-bytesescapeseq"><code class="xref docutils literal notranslate"><span class="pre">bytesescapeseq</span></code></a>
|
|||
|
<strong id="grammar-token-shortbyteschar">shortbyteschar</strong> ::= <any ASCII character except "\" or newline or the quote>
|
|||
|
<strong id="grammar-token-longbyteschar">longbyteschar </strong> ::= <any ASCII character except "\">
|
|||
|
<strong id="grammar-token-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-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-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-17">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 escape
|
|||
|
characters that otherwise have a special meaning, such as newline, backslash
|
|||
|
itself, or the quote character.</p>
|
|||
|
<p id="index-18">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-19">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 strings are called <em class="dfn">raw strings</em> and treat backslashes as
|
|||
|
literal characters. As a result, in 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 in raw strings are not treated specially. Given that Python 2.x’s raw
|
|||
|
unicode literals behave differently than Python 3.x’s the <code class="docutils literal notranslate"><span class="pre">'ur'</span></code> syntax
|
|||
|
is not supported.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New 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>
|
|||
|
</div>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.3: </span>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-20"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0414"><strong>PEP 414</strong></a> for more information.</p>
|
|||
|
</div>
|
|||
|
<p id="index-21">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">Formatted string literals</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>
|
|||
|
<p id="index-22">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-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 30%" />
|
|||
|
<col style="width: 58%" />
|
|||
|
<col style="width: 12%" />
|
|||
|
</colgroup>
|
|||
|
<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">\newline</span></code></p></td>
|
|||
|
<td><p>Backslash and newline ignored</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>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="docutils literal notranslate"><span class="pre">\ooo</span></code></p></td>
|
|||
|
<td><p>Character with octal value
|
|||
|
<em>ooo</em></p></td>
|
|||
|
<td><p>(1,3)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\xhh</span></code></p></td>
|
|||
|
<td><p>Character with hex value <em>hh</em></p></td>
|
|||
|
<td><p>(2,3)</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>Escape sequences only recognized in string literals are:</p>
|
|||
|
<table class="docutils align-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 30%" />
|
|||
|
<col style="width: 58%" />
|
|||
|
<col style="width: 12%" />
|
|||
|
</colgroup>
|
|||
|
<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">\N{name}</span></code></p></td>
|
|||
|
<td><p>Character named <em>name</em> in the
|
|||
|
Unicode database</p></td>
|
|||
|
<td><p>(4)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">\uxxxx</span></code></p></td>
|
|||
|
<td><p>Character with 16-bit hex value
|
|||
|
<em>xxxx</em></p></td>
|
|||
|
<td><p>(5)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">\Uxxxxxxxx</span></code></p></td>
|
|||
|
<td><p>Character with 32-bit hex value
|
|||
|
<em>xxxxxxxx</em></p></td>
|
|||
|
<td><p>(6)</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>Notes:</p>
|
|||
|
<ol class="arabic">
|
|||
|
<li><p>As in Standard C, up to three octal digits are accepted.</p></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="#id13" id="id10">1</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-23">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>
|
|||
|
<blockquote>
|
|||
|
<div><div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.6: </span>Unrecognized escape sequences produce a DeprecationWarning. In
|
|||
|
some future version of Python they will be a SyntaxError.</p>
|
|||
|
</div>
|
|||
|
</div></blockquote>
|
|||
|
<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>
|
|||
|
</div>
|
|||
|
<div class="section" id="string-literal-concatenation">
|
|||
|
<span id="string-concatenation"></span><h3>2.4.2. String literal concatenation<a class="headerlink" href="#string-literal-concatenation" title="Permalink to this headline">¶</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="formatted-string-literals">
|
|||
|
<span id="f-strings"></span><span id="index-24"></span><h3>2.4.3. Formatted string literals<a class="headerlink" href="#formatted-string-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New 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-f-string">f_string </strong> ::= (<a class="reference internal" href="#grammar-token-literal-char"><code class="xref docutils literal notranslate"><span class="pre">literal_char</span></code></a> | "{{" | "}}" | <a class="reference internal" href="#grammar-token-replacement-field"><code class="xref docutils literal notranslate"><span class="pre">replacement_field</span></code></a>)*
|
|||
|
<strong id="grammar-token-replacement-field">replacement_field</strong> ::= "{" <a class="reference internal" href="#grammar-token-f-expression"><code class="xref docutils literal notranslate"><span class="pre">f_expression</span></code></a> ["!" <a class="reference internal" href="#grammar-token-conversion"><code class="xref docutils literal notranslate"><span class="pre">conversion</span></code></a>] [":" <a class="reference internal" href="#grammar-token-format-spec"><code class="xref docutils literal notranslate"><span class="pre">format_spec</span></code></a>] "}"
|
|||
|
<strong id="grammar-token-f-expression">f_expression </strong> ::= (<a class="reference internal" href="expressions.html#grammar-token-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-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-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-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-yield-expression"><code class="xref docutils literal notranslate"><span class="pre">yield_expression</span></code></a>
|
|||
|
<strong id="grammar-token-conversion">conversion </strong> ::= "s" | "r" | "a"
|
|||
|
<strong id="grammar-token-format-spec">format_spec </strong> ::= (<a class="reference internal" href="#grammar-token-literal-char"><code class="xref docutils literal notranslate"><span class="pre">literal_char</span></code></a> | NULL | <a class="reference internal" href="#grammar-token-replacement-field"><code class="xref docutils literal notranslate"><span class="pre">replacement_field</span></code></a>)*
|
|||
|
<strong id="grammar-token-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. After the expression, there may be a conversion field,
|
|||
|
introduced by an exclamation point <code class="docutils literal notranslate"><span class="pre">'!'</span></code>. 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 a <a class="reference internal" href="expressions.html#lambda"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">lambda</span></code></a> expression
|
|||
|
must be surrounded by explicit parentheses. Replacement expressions
|
|||
|
can contain line breaks (e.g. in triple-quoted strings), but they
|
|||
|
cannot contain comments. Each expression is evaluated in the context
|
|||
|
where the formatted string literal appears, in order from left to right.</p>
|
|||
|
<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 string .format() 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="n">f</span><span class="s2">"He said his name is </span><span class="si">{name!r}</span><span class="s2">."</span>
|
|||
|
<span class="go">"He said his name is 'Fred'."</span>
|
|||
|
<span class="gp">>>> </span><span class="n">f</span><span class="s2">"He said his name is {repr(name)}."</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="n">f</span><span class="s2">"result: {value:</span><span class="si">{width}</span><span class="s2">.</span><span class="si">{precision}</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="n">f</span><span class="s2">"{today:%B </span><span class="si">%d</span><span class="s2">, %Y}"</span> <span class="c1"># using date format specifier</span>
|
|||
|
<span class="go">'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="n">f</span><span class="s2">"</span><span class="si">{number:#0x}</span><span class="s2">"</span> <span class="c1"># using integer format specifier</span>
|
|||
|
<span class="go">'0x400'</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>A consequence of sharing the same syntax as regular string literals is
|
|||
|
that characters in the replacement fields must not conflict with the
|
|||
|
quoting used in the outer formatted string literal:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">f</span><span class="s2">"abc </span><span class="si">{a["x"]}</span><span class="s2"> def"</span> <span class="c1"># error: outer string literal ended prematurely</span>
|
|||
|
<span class="n">f</span><span class="s2">"abc </span><span class="si">{a['x']}</span><span class="s2"> def"</span> <span class="c1"># workaround: use different quoting</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>Backslashes are not allowed in format expressions and will raise
|
|||
|
an error:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">f</span><span class="s2">"newline: {ord('</span><span class="se">\n</span><span class="s2">')}"</span> <span class="c1"># raises SyntaxError</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>To include a value in which a backslash escape is required, create
|
|||
|
a temporary variable.</p>
|
|||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">newline</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="n">f</span><span class="s2">"newline: </span><span class="si">{newline}</span><span class="s2">"</span>
|
|||
|
<span class="go">'newline: 10'</span>
|
|||
|
</pre></div>
|
|||
|
</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="nf">foo</span><span class="p">():</span>
|
|||
|
<span class="gp">... </span> <span class="n">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-25"></span><a class="pep reference external" href="https://www.python.org/dev/peps/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>
|
|||
|
</div>
|
|||
|
<div class="section" id="numeric-literals">
|
|||
|
<span id="numbers"></span><h3>2.4.4. Numeric literals<a class="headerlink" href="#numeric-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p id="index-26">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>
|
|||
|
</div>
|
|||
|
<div class="section" id="integer-literals">
|
|||
|
<span id="integers"></span><span id="index-27"></span><h3>2.4.5. Integer literals<a class="headerlink" href="#integer-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Integer literals are described by the following lexical definitions:</p>
|
|||
|
<pre>
|
|||
|
<strong id="grammar-token-integer">integer </strong> ::= <a class="reference internal" href="#grammar-token-decinteger"><code class="xref docutils literal notranslate"><span class="pre">decinteger</span></code></a> | <a class="reference internal" href="#grammar-token-bininteger"><code class="xref docutils literal notranslate"><span class="pre">bininteger</span></code></a> | <a class="reference internal" href="#grammar-token-octinteger"><code class="xref docutils literal notranslate"><span class="pre">octinteger</span></code></a> | <a class="reference internal" href="#grammar-token-hexinteger"><code class="xref docutils literal notranslate"><span class="pre">hexinteger</span></code></a>
|
|||
|
<strong id="grammar-token-decinteger">decinteger </strong> ::= <a class="reference internal" href="#grammar-token-nonzerodigit"><code class="xref docutils literal notranslate"><span class="pre">nonzerodigit</span></code></a> (["_"] <a class="reference internal" href="#grammar-token-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a>)* | "0"+ (["_"] "0")*
|
|||
|
<strong id="grammar-token-bininteger">bininteger </strong> ::= "0" ("b" | "B") (["_"] <a class="reference internal" href="#grammar-token-bindigit"><code class="xref docutils literal notranslate"><span class="pre">bindigit</span></code></a>)+
|
|||
|
<strong id="grammar-token-octinteger">octinteger </strong> ::= "0" ("o" | "O") (["_"] <a class="reference internal" href="#grammar-token-octdigit"><code class="xref docutils literal notranslate"><span class="pre">octdigit</span></code></a>)+
|
|||
|
<strong id="grammar-token-hexinteger">hexinteger </strong> ::= "0" ("x" | "X") (["_"] <a class="reference internal" href="#grammar-token-hexdigit"><code class="xref docutils literal notranslate"><span class="pre">hexdigit</span></code></a>)+
|
|||
|
<strong id="grammar-token-nonzerodigit">nonzerodigit</strong> ::= "1"..."9"
|
|||
|
<strong id="grammar-token-digit">digit </strong> ::= "0"..."9"
|
|||
|
<strong id="grammar-token-bindigit">bindigit </strong> ::= "0" | "1"
|
|||
|
<strong id="grammar-token-octdigit">octdigit </strong> ::= "0"..."7"
|
|||
|
<strong id="grammar-token-hexdigit">hexdigit </strong> ::= <a class="reference internal" href="#grammar-token-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>
|
|||
|
</div>
|
|||
|
<div class="section" id="floating-point-literals">
|
|||
|
<span id="floating"></span><span id="index-28"></span><h3>2.4.6. Floating point literals<a class="headerlink" href="#floating-point-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Floating point literals are described by the following lexical definitions:</p>
|
|||
|
<pre>
|
|||
|
<strong id="grammar-token-floatnumber">floatnumber </strong> ::= <a class="reference internal" href="#grammar-token-pointfloat"><code class="xref docutils literal notranslate"><span class="pre">pointfloat</span></code></a> | <a class="reference internal" href="#grammar-token-exponentfloat"><code class="xref docutils literal notranslate"><span class="pre">exponentfloat</span></code></a>
|
|||
|
<strong id="grammar-token-pointfloat">pointfloat </strong> ::= [<a class="reference internal" href="#grammar-token-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>] <a class="reference internal" href="#grammar-token-fraction"><code class="xref docutils literal notranslate"><span class="pre">fraction</span></code></a> | <a class="reference internal" href="#grammar-token-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a> "."
|
|||
|
<strong id="grammar-token-exponentfloat">exponentfloat</strong> ::= (<a class="reference internal" href="#grammar-token-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a> | <a class="reference internal" href="#grammar-token-pointfloat"><code class="xref docutils literal notranslate"><span class="pre">pointfloat</span></code></a>) <a class="reference internal" href="#grammar-token-exponent"><code class="xref docutils literal notranslate"><span class="pre">exponent</span></code></a>
|
|||
|
<strong id="grammar-token-digitpart">digitpart </strong> ::= <a class="reference internal" href="#grammar-token-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a> (["_"] <a class="reference internal" href="#grammar-token-digit"><code class="xref docutils literal notranslate"><span class="pre">digit</span></code></a>)*
|
|||
|
<strong id="grammar-token-fraction">fraction </strong> ::= "." <a class="reference internal" href="#grammar-token-digitpart"><code class="xref docutils literal notranslate"><span class="pre">digitpart</span></code></a>
|
|||
|
<strong id="grammar-token-exponent">exponent </strong> ::= ("e" | "E") ["+" | "-"] <a class="reference internal" href="#grammar-token-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="o">.</span><span class="mi">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>
|
|||
|
</div>
|
|||
|
<div class="section" id="imaginary-literals">
|
|||
|
<span id="imaginary"></span><span id="index-29"></span><h3>2.4.7. Imaginary literals<a class="headerlink" href="#imaginary-literals" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Imaginary literals are described by the following lexical definitions:</p>
|
|||
|
<pre>
|
|||
|
<strong id="grammar-token-imagnumber">imagnumber</strong> ::= (<a class="reference internal" href="#grammar-token-floatnumber"><code class="xref docutils literal notranslate"><span class="pre">floatnumber</span></code></a> | <a class="reference internal" href="#grammar-token-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="o">.</span><span class="mi">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>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="operators">
|
|||
|
<span id="id11"></span><h2>2.5. Operators<a class="headerlink" href="#operators" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p id="index-30">The following tokens are operators:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>+ - * ** / // % @
|
|||
|
<< >> & | ^ ~
|
|||
|
< > <= >= == !=
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="delimiters">
|
|||
|
<span id="id12"></span><h2>2.6. Delimiters<a class="headerlink" href="#delimiters" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p id="index-31">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>
|
|||
|
<dl class="footnote brackets">
|
|||
|
<dt class="label" id="id13"><span class="brackets"><a class="fn-backref" href="#id10">1</a></span></dt>
|
|||
|
<dd><p><a class="reference external" href="http://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt">http://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt</a></p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|||
|
<div class="sphinxsidebarwrapper">
|
|||
|
<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="#reserved-classes-of-identifiers">2.3.2. 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></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. Formatted string literals</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>
|
|||
|
|
|||
|
<h4>Previous topic</h4>
|
|||
|
<p class="topless"><a href="introduction.html"
|
|||
|
title="previous chapter">1. Introduction</a></p>
|
|||
|
<h4>Next topic</h4>
|
|||
|
<p class="topless"><a href="datamodel.html"
|
|||
|
title="next chapter">3. Data model</a></p>
|
|||
|
<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/3.7/Doc/reference/lexical_analysis.rst"
|
|||
|
rel="nofollow">Show Source
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="clearer"></div>
|
|||
|
</div>
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<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.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Language Reference</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div class="footer">
|
|||
|
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
|||
|
<br />
|
|||
|
The Python Software Foundation is a non-profit corporation.
|
|||
|
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
|||
|
<br />
|
|||
|
Last updated on Jul 13, 2019.
|
|||
|
<a href="../bugs.html">Found a bug</a>?
|
|||
|
<br />
|
|||
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
|||
|
</div>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|