|
- <!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="dis — Disassembler for Python bytecode" />
- <meta property="og:type" content="website" />
- <meta property="og:url" content="https://docs.python.org/3/library/dis.html" />
- <meta property="og:site_name" content="Python documentation" />
- <meta property="og:description" content="Source code: Lib/dis.py The dis module supports the analysis of CPython bytecode by disassembling it. The CPython bytecode which this module takes as an input is defined in the file Include/opcode...." />
- <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="Source code: Lib/dis.py The dis module supports the analysis of CPython bytecode by disassembling it. The CPython bytecode which this module takes as an input is defined in the file Include/opcode...." />
- <meta property="og:image:width" content="200" />
- <meta property="og:image:height" content="200" />
- <meta name="theme-color" content="#3776ab" />
-
- <title>dis — Disassembler for Python bytecode — Python 3.12.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=80d5e7a1" />
- <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=bb723527" />
- <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=b20cc3f5" />
-
- <script src="../_static/documentation_options.js?v=2c828074"></script>
- <script src="../_static/doctools.js?v=888ff710"></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.12.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="pickletools — Tools for pickle developers" href="pickletools.html" />
- <link rel="prev" title="compileall — Byte-compile Python libraries" href="compileall.html" />
- <link rel="canonical" href="https://docs.python.org/3/library/dis.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>
-
- </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="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code> — Disassembler for Python bytecode</a><ul>
- <li><a class="reference internal" href="#command-line-interface">Command-line interface</a></li>
- <li><a class="reference internal" href="#bytecode-analysis">Bytecode analysis</a></li>
- <li><a class="reference internal" href="#analysis-functions">Analysis functions</a></li>
- <li><a class="reference internal" href="#python-bytecode-instructions">Python Bytecode Instructions</a></li>
- <li><a class="reference internal" href="#opcode-collections">Opcode collections</a></li>
- </ul>
- </li>
- </ul>
-
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="compileall.html"
- title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">compileall</span></code> — Byte-compile Python libraries</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="pickletools.html"
- title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pickletools</span></code> — Tools for pickle developers</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/library/dis.rst"
- rel="nofollow">Show Source
- </a>
- </li>
- </ul>
- </div>
- </nav>
- </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"
- 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="pickletools.html" title="pickletools — Tools for pickle developers"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="compileall.html" title="compileall — Byte-compile Python libraries"
- 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.12.3 Documentation</a> »
- </li>
-
- <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
- <li class="nav-item nav-item-2"><a href="language.html" accesskey="U">Python Language Services</a> »</li>
- <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code> — Disassembler for Python bytecode</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="module-dis">
- <span id="dis-disassembler-for-python-bytecode"></span><h1><a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> — Disassembler for Python bytecode<a class="headerlink" href="#module-dis" title="Link to this heading">¶</a></h1>
- <p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.12/Lib/dis.py">Lib/dis.py</a></p>
- <hr class="docutils" />
- <p>The <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> module supports the analysis of CPython <a class="reference internal" href="../glossary.html#term-bytecode"><span class="xref std std-term">bytecode</span></a> by
- disassembling it. The CPython bytecode which this module takes as an input is
- defined in the file <code class="file docutils literal notranslate"><span class="pre">Include/opcode.h</span></code> and used by the compiler and the
- interpreter.</p>
- <div class="impl-detail compound">
- <p><strong>CPython implementation detail:</strong> Bytecode is an implementation detail of the CPython interpreter. No
- guarantees are made that bytecode will not be added, removed, or changed
- between versions of Python. Use of this module should not be considered to
- work across Python VMs or Python releases.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6: </span>Use 2 bytes for each instruction. Previously the number of bytes varied
- by instruction.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.10: </span>The argument of jump, exception handling and loop instructions is now
- the instruction offset rather than the byte offset.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Some instructions are accompanied by one or more inline cache entries,
- which take the form of <a class="reference internal" href="#opcode-CACHE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CACHE</span></code></a> instructions. These instructions
- are hidden by default, but can be shown by passing <code class="docutils literal notranslate"><span class="pre">show_caches=True</span></code> to
- any <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> utility. Furthermore, the interpreter now adapts the
- bytecode to specialize it for different runtime conditions. The
- adaptive bytecode can be shown by passing <code class="docutils literal notranslate"><span class="pre">adaptive=True</span></code>.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>The argument of a jump is the offset of the target instruction relative
- to the instruction that appears immediately after the jump instruction’s
- <a class="reference internal" href="#opcode-CACHE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CACHE</span></code></a> entries.</p>
- <p>As a consequence, the presence of the <a class="reference internal" href="#opcode-CACHE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CACHE</span></code></a> instructions is
- transparent for forward jumps but needs to be taken into account when
- reasoning about backward jumps.</p>
- </div>
- </div>
- <p>Example: Given the function <code class="xref py py-func docutils literal notranslate"><span class="pre">myfunc()</span></code>:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">myfunc</span><span class="p">(</span><span class="n">alist</span><span class="p">):</span>
- <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">alist</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>the following command can be used to display the disassembly of
- <code class="xref py py-func docutils literal notranslate"><span class="pre">myfunc()</span></code>:</p>
- <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">dis</span><span class="o">.</span><span class="n">dis</span><span class="p">(</span><span class="n">myfunc</span><span class="p">)</span>
- <span class="go"> 2 0 RESUME 0</span>
-
- <span class="go"> 3 2 LOAD_GLOBAL 1 (NULL + len)</span>
- <span class="go"> 12 LOAD_FAST 0 (alist)</span>
- <span class="go"> 14 CALL 1</span>
- <span class="go"> 22 RETURN_VALUE</span>
- </pre></div>
- </div>
- <p>(The “2” is a line number).</p>
- <section id="command-line-interface">
- <span id="dis-cli"></span><h2>Command-line interface<a class="headerlink" href="#command-line-interface" title="Link to this heading">¶</a></h2>
- <p>The <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> module can be invoked as a script from the command line:</p>
- <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>python<span class="w"> </span>-m<span class="w"> </span>dis<span class="w"> </span><span class="o">[</span>-h<span class="o">]</span><span class="w"> </span><span class="o">[</span>infile<span class="o">]</span>
- </pre></div>
- </div>
- <p>The following options are accepted:</p>
- <dl class="std cmdoption">
- <dt class="sig sig-object std" id="cmdoption-dis-h">
- <span id="cmdoption-dis-help"></span><span class="sig-name descname"><span class="pre">-h</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--help</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-dis-h" title="Link to this definition">¶</a></dt>
- <dd><p>Display usage and exit.</p>
- </dd></dl>
-
- <p>If <code class="file docutils literal notranslate"><span class="pre">infile</span></code> is specified, its disassembled code will be written to stdout.
- Otherwise, disassembly is performed on compiled source code recieved from stdin.</p>
- </section>
- <section id="bytecode-analysis">
- <h2>Bytecode analysis<a class="headerlink" href="#bytecode-analysis" title="Link to this heading">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.4.</span></p>
- </div>
- <p>The bytecode analysis API allows pieces of Python code to be wrapped in a
- <a class="reference internal" href="#dis.Bytecode" title="dis.Bytecode"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bytecode</span></code></a> object that provides easy access to details of the compiled
- code.</p>
- <dl class="py class">
- <dt class="sig sig-object py" id="dis.Bytecode">
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">Bytecode</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">first_line</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">current_offset</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.Bytecode" title="Link to this definition">¶</a></dt>
- <dd><p>Analyse the bytecode corresponding to a function, generator, asynchronous
- generator, coroutine, method, string of source code, or a code object (as
- returned by <a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal notranslate"><span class="pre">compile()</span></code></a>).</p>
- <p>This is a convenience wrapper around many of the functions listed below, most
- notably <a class="reference internal" href="#dis.get_instructions" title="dis.get_instructions"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_instructions()</span></code></a>, as iterating over a <a class="reference internal" href="#dis.Bytecode" title="dis.Bytecode"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bytecode</span></code></a>
- instance yields the bytecode operations as <a class="reference internal" href="#dis.Instruction" title="dis.Instruction"><code class="xref py py-class docutils literal notranslate"><span class="pre">Instruction</span></code></a> instances.</p>
- <p>If <em>first_line</em> is not <code class="docutils literal notranslate"><span class="pre">None</span></code>, it indicates the line number that should be
- reported for the first source line in the disassembled code. Otherwise, the
- source line information (if any) is taken directly from the disassembled code
- object.</p>
- <p>If <em>current_offset</em> is not <code class="docutils literal notranslate"><span class="pre">None</span></code>, it refers to an instruction offset in the
- disassembled code. Setting this means <a class="reference internal" href="#dis.Bytecode.dis" title="dis.Bytecode.dis"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dis()</span></code></a> will display a “current
- instruction” marker against the specified opcode.</p>
- <p>If <em>show_caches</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#dis.Bytecode.dis" title="dis.Bytecode.dis"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dis()</span></code></a> will display inline cache
- entries used by the interpreter to specialize the bytecode.</p>
- <p>If <em>adaptive</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#dis.Bytecode.dis" title="dis.Bytecode.dis"><code class="xref py py-meth docutils literal notranslate"><span class="pre">dis()</span></code></a> will display specialized bytecode
- that may be different from the original bytecode.</p>
- <dl class="py method">
- <dt class="sig sig-object py" id="dis.Bytecode.from_traceback">
- <em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_traceback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tb</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.Bytecode.from_traceback" title="Link to this definition">¶</a></dt>
- <dd><p>Construct a <a class="reference internal" href="#dis.Bytecode" title="dis.Bytecode"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bytecode</span></code></a> instance from the given traceback, setting
- <em>current_offset</em> to the instruction responsible for the exception.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Bytecode.codeobj">
- <span class="sig-name descname"><span class="pre">codeobj</span></span><a class="headerlink" href="#dis.Bytecode.codeobj" title="Link to this definition">¶</a></dt>
- <dd><p>The compiled code object.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Bytecode.first_line">
- <span class="sig-name descname"><span class="pre">first_line</span></span><a class="headerlink" href="#dis.Bytecode.first_line" title="Link to this definition">¶</a></dt>
- <dd><p>The first source line of the code object (if available)</p>
- </dd></dl>
-
- <dl class="py method">
- <dt class="sig sig-object py" id="dis.Bytecode.dis">
- <span class="sig-name descname"><span class="pre">dis</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dis.Bytecode.dis" title="Link to this definition">¶</a></dt>
- <dd><p>Return a formatted view of the bytecode operations (the same as printed by
- <a class="reference internal" href="#dis.dis" title="dis.dis"><code class="xref py py-func docutils literal notranslate"><span class="pre">dis.dis()</span></code></a>, but returned as a multi-line string).</p>
- </dd></dl>
-
- <dl class="py method">
- <dt class="sig sig-object py" id="dis.Bytecode.info">
- <span class="sig-name descname"><span class="pre">info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dis.Bytecode.info" title="Link to this definition">¶</a></dt>
- <dd><p>Return a formatted multi-line string with detailed information about the
- code object, like <a class="reference internal" href="#dis.code_info" title="dis.code_info"><code class="xref py py-func docutils literal notranslate"><span class="pre">code_info()</span></code></a>.</p>
- </dd></dl>
-
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.7: </span>This can now handle coroutine and asynchronous generator objects.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Added the <em>show_caches</em> and <em>adaptive</em> parameters.</p>
- </div>
- </dd></dl>
-
- <p>Example:</p>
- <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">bytecode</span> <span class="o">=</span> <span class="n">dis</span><span class="o">.</span><span class="n">Bytecode</span><span class="p">(</span><span class="n">myfunc</span><span class="p">)</span>
- <span class="gp">>>> </span><span class="k">for</span> <span class="n">instr</span> <span class="ow">in</span> <span class="n">bytecode</span><span class="p">:</span>
- <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">instr</span><span class="o">.</span><span class="n">opname</span><span class="p">)</span>
- <span class="gp">...</span>
- <span class="go">RESUME</span>
- <span class="go">LOAD_GLOBAL</span>
- <span class="go">LOAD_FAST</span>
- <span class="go">CALL</span>
- <span class="go">RETURN_VALUE</span>
- </pre></div>
- </div>
- </section>
- <section id="analysis-functions">
- <h2>Analysis functions<a class="headerlink" href="#analysis-functions" title="Link to this heading">¶</a></h2>
- <p>The <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> module also defines the following analysis functions that convert
- the input directly to the desired output. They can be useful if only a single
- operation is being performed, so the intermediate analysis object isn’t useful:</p>
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.code_info">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">code_info</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.code_info" title="Link to this definition">¶</a></dt>
- <dd><p>Return a formatted multi-line string with detailed code object information
- for the supplied function, generator, asynchronous generator, coroutine,
- method, source code string or code object.</p>
- <p>Note that the exact contents of code info strings are highly implementation
- dependent and they may change arbitrarily across Python VMs or Python
- releases.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.2.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.7: </span>This can now handle coroutine and asynchronous generator objects.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.show_code">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">show_code</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.show_code" title="Link to this definition">¶</a></dt>
- <dd><p>Print detailed code object information for the supplied function, method,
- source code string or code object to <em>file</em> (or <code class="docutils literal notranslate"><span class="pre">sys.stdout</span></code> if <em>file</em>
- is not specified).</p>
- <p>This is a convenient shorthand for <code class="docutils literal notranslate"><span class="pre">print(code_info(x),</span> <span class="pre">file=file)</span></code>,
- intended for interactive exploration at the interpreter prompt.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.2.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.4: </span>Added <em>file</em> parameter.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.dis">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">dis</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.dis" title="Link to this definition">¶</a></dt>
- <dd><p>Disassemble the <em>x</em> object. <em>x</em> can denote either a module, a class, a
- method, a function, a generator, an asynchronous generator, a coroutine,
- a code object, a string of source code or a byte sequence of raw bytecode.
- For a module, it disassembles all functions. For a class, it disassembles
- all methods (including class and static methods). For a code object or
- sequence of raw bytecode, it prints one line per bytecode instruction.
- It also recursively disassembles nested code objects. These can include
- generator expressions, nested functions, the bodies of nested classes,
- and the code objects used for <a class="reference internal" href="../reference/executionmodel.html#annotation-scopes"><span class="std std-ref">annotation scopes</span></a>.
- Strings are first compiled to code objects with the <a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal notranslate"><span class="pre">compile()</span></code></a>
- built-in function before being disassembled. If no object is provided, this
- function disassembles the last traceback.</p>
- <p>The disassembly is written as text to the supplied <em>file</em> argument if
- provided and to <code class="docutils literal notranslate"><span class="pre">sys.stdout</span></code> otherwise.</p>
- <p>The maximal depth of recursion is limited by <em>depth</em> unless it is <code class="docutils literal notranslate"><span class="pre">None</span></code>.
- <code class="docutils literal notranslate"><span class="pre">depth=0</span></code> means no recursion.</p>
- <p>If <em>show_caches</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, this function will display inline cache
- entries used by the interpreter to specialize the bytecode.</p>
- <p>If <em>adaptive</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, this function will display specialized bytecode
- that may be different from the original bytecode.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.4: </span>Added <em>file</em> parameter.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.7: </span>Implemented recursive disassembling and added <em>depth</em> parameter.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.7: </span>This can now handle coroutine and asynchronous generator objects.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Added the <em>show_caches</em> and <em>adaptive</em> parameters.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.distb">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">distb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tb</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.distb" title="Link to this definition">¶</a></dt>
- <dd><p>Disassemble the top-of-stack function of a traceback, using the last
- traceback if none was passed. The instruction causing the exception is
- indicated.</p>
- <p>The disassembly is written as text to the supplied <em>file</em> argument if
- provided and to <code class="docutils literal notranslate"><span class="pre">sys.stdout</span></code> otherwise.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.4: </span>Added <em>file</em> parameter.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Added the <em>show_caches</em> and <em>adaptive</em> parameters.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.disassemble">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">disassemble</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lasti</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-1</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.disassemble" title="Link to this definition">¶</a></dt>
- <dt class="sig sig-object py" id="dis.disco">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">disco</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lasti</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-1</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.disco" title="Link to this definition">¶</a></dt>
- <dd><p>Disassemble a code object, indicating the last instruction if <em>lasti</em> was
- provided. The output is divided in the following columns:</p>
- <ol class="arabic simple">
- <li><p>the line number, for the first instruction of each line</p></li>
- <li><p>the current instruction, indicated as <code class="docutils literal notranslate"><span class="pre">--></span></code>,</p></li>
- <li><p>a labelled instruction, indicated with <code class="docutils literal notranslate"><span class="pre">>></span></code>,</p></li>
- <li><p>the address of the instruction,</p></li>
- <li><p>the operation code name,</p></li>
- <li><p>operation parameters, and</p></li>
- <li><p>interpretation of the parameters in parentheses.</p></li>
- </ol>
- <p>The parameter interpretation recognizes local and global variable names,
- constant values, branch targets, and compare operators.</p>
- <p>The disassembly is written as text to the supplied <em>file</em> argument if
- provided and to <code class="docutils literal notranslate"><span class="pre">sys.stdout</span></code> otherwise.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.4: </span>Added <em>file</em> parameter.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Added the <em>show_caches</em> and <em>adaptive</em> parameters.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.get_instructions">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">get_instructions</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">first_line</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_caches</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adaptive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.get_instructions" title="Link to this definition">¶</a></dt>
- <dd><p>Return an iterator over the instructions in the supplied function, method,
- source code string or code object.</p>
- <p>The iterator generates a series of <a class="reference internal" href="#dis.Instruction" title="dis.Instruction"><code class="xref py py-class docutils literal notranslate"><span class="pre">Instruction</span></code></a> named tuples giving
- the details of each operation in the supplied code.</p>
- <p>If <em>first_line</em> is not <code class="docutils literal notranslate"><span class="pre">None</span></code>, it indicates the line number that should be
- reported for the first source line in the disassembled code. Otherwise, the
- source line information (if any) is taken directly from the disassembled code
- object.</p>
- <p>The <em>show_caches</em> and <em>adaptive</em> parameters work as they do in <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-func docutils literal notranslate"><span class="pre">dis()</span></code></a>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.4.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Added the <em>show_caches</em> and <em>adaptive</em> parameters.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.findlinestarts">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">findlinestarts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">code</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.findlinestarts" title="Link to this definition">¶</a></dt>
- <dd><p>This generator function uses the <a class="reference internal" href="../reference/datamodel.html#codeobject.co_lines" title="codeobject.co_lines"><code class="xref py py-meth docutils literal notranslate"><span class="pre">co_lines()</span></code></a> method
- of the <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a> <em>code</em> to find the offsets which
- are starts of
- lines in the source code. They are generated as <code class="docutils literal notranslate"><span class="pre">(offset,</span> <span class="pre">lineno)</span></code> pairs.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6: </span>Line numbers can be decreasing. Before, they were always increasing.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.10: </span>The <span class="target" id="index-0"></span><a class="pep reference external" href="https://peps.python.org/pep-0626/"><strong>PEP 626</strong></a> <a class="reference internal" href="../reference/datamodel.html#codeobject.co_lines" title="codeobject.co_lines"><code class="xref py py-meth docutils literal notranslate"><span class="pre">co_lines()</span></code></a> method is used instead of the
- <a class="reference internal" href="../reference/datamodel.html#codeobject.co_firstlineno" title="codeobject.co_firstlineno"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_firstlineno</span></code></a> and <a class="reference internal" href="../reference/datamodel.html#codeobject.co_lnotab" title="codeobject.co_lnotab"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_lnotab</span></code></a>
- attributes of the <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a>.</p>
- </div>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.findlabels">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">findlabels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">code</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.findlabels" title="Link to this definition">¶</a></dt>
- <dd><p>Detect all offsets in the raw compiled bytecode string <em>code</em> which are jump targets, and
- return a list of these offsets.</p>
- </dd></dl>
-
- <dl class="py function">
- <dt class="sig sig-object py" id="dis.stack_effect">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">stack_effect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">opcode</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">oparg</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">jump</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dis.stack_effect" title="Link to this definition">¶</a></dt>
- <dd><p>Compute the stack effect of <em>opcode</em> with argument <em>oparg</em>.</p>
- <p>If the code has a jump target and <em>jump</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#dis.stack_effect" title="dis.stack_effect"><code class="xref py py-func docutils literal notranslate"><span class="pre">stack_effect()</span></code></a>
- will return the stack effect of jumping. If <em>jump</em> is <code class="docutils literal notranslate"><span class="pre">False</span></code>,
- it will return the stack effect of not jumping. And if <em>jump</em> is
- <code class="docutils literal notranslate"><span class="pre">None</span></code> (default), it will return the maximal stack effect of both cases.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.4.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.8: </span>Added <em>jump</em> parameter.</p>
- </div>
- </dd></dl>
-
- </section>
- <section id="python-bytecode-instructions">
- <span id="bytecodes"></span><h2>Python Bytecode Instructions<a class="headerlink" href="#python-bytecode-instructions" title="Link to this heading">¶</a></h2>
- <p>The <a class="reference internal" href="#dis.get_instructions" title="dis.get_instructions"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_instructions()</span></code></a> function and <a class="reference internal" href="#dis.Bytecode" title="dis.Bytecode"><code class="xref py py-class docutils literal notranslate"><span class="pre">Bytecode</span></code></a> class provide
- details of bytecode instructions as <a class="reference internal" href="#dis.Instruction" title="dis.Instruction"><code class="xref py py-class docutils literal notranslate"><span class="pre">Instruction</span></code></a> instances:</p>
- <dl class="py class">
- <dt class="sig sig-object py" id="dis.Instruction">
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">Instruction</span></span><a class="headerlink" href="#dis.Instruction" title="Link to this definition">¶</a></dt>
- <dd><p>Details for a bytecode operation</p>
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.opcode">
- <span class="sig-name descname"><span class="pre">opcode</span></span><a class="headerlink" href="#dis.Instruction.opcode" title="Link to this definition">¶</a></dt>
- <dd><p>numeric code for operation, corresponding to the opcode values listed
- below and the bytecode values in the <a class="reference internal" href="#opcode-collections"><span class="std std-ref">Opcode collections</span></a>.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.opname">
- <span class="sig-name descname"><span class="pre">opname</span></span><a class="headerlink" href="#dis.Instruction.opname" title="Link to this definition">¶</a></dt>
- <dd><p>human readable name for operation</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.arg">
- <span class="sig-name descname"><span class="pre">arg</span></span><a class="headerlink" href="#dis.Instruction.arg" title="Link to this definition">¶</a></dt>
- <dd><p>numeric argument to operation (if any), otherwise <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.argval">
- <span class="sig-name descname"><span class="pre">argval</span></span><a class="headerlink" href="#dis.Instruction.argval" title="Link to this definition">¶</a></dt>
- <dd><p>resolved arg value (if any), otherwise <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.argrepr">
- <span class="sig-name descname"><span class="pre">argrepr</span></span><a class="headerlink" href="#dis.Instruction.argrepr" title="Link to this definition">¶</a></dt>
- <dd><p>human readable description of operation argument (if any),
- otherwise an empty string.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.offset">
- <span class="sig-name descname"><span class="pre">offset</span></span><a class="headerlink" href="#dis.Instruction.offset" title="Link to this definition">¶</a></dt>
- <dd><p>start index of operation within bytecode sequence</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.starts_line">
- <span class="sig-name descname"><span class="pre">starts_line</span></span><a class="headerlink" href="#dis.Instruction.starts_line" title="Link to this definition">¶</a></dt>
- <dd><p>line started by this opcode (if any), otherwise <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.is_jump_target">
- <span class="sig-name descname"><span class="pre">is_jump_target</span></span><a class="headerlink" href="#dis.Instruction.is_jump_target" title="Link to this definition">¶</a></dt>
- <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if other code jumps to here, otherwise <code class="docutils literal notranslate"><span class="pre">False</span></code></p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Instruction.positions">
- <span class="sig-name descname"><span class="pre">positions</span></span><a class="headerlink" href="#dis.Instruction.positions" title="Link to this definition">¶</a></dt>
- <dd><p><a class="reference internal" href="#dis.Positions" title="dis.Positions"><code class="xref py py-class docutils literal notranslate"><span class="pre">dis.Positions</span></code></a> object holding the
- start and end locations that are covered by this instruction.</p>
- </dd></dl>
-
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.4.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Field <code class="docutils literal notranslate"><span class="pre">positions</span></code> is added.</p>
- </div>
- </dd></dl>
-
- <dl class="py class">
- <dt class="sig sig-object py" id="dis.Positions">
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">Positions</span></span><a class="headerlink" href="#dis.Positions" title="Link to this definition">¶</a></dt>
- <dd><p>In case the information is not available, some fields might be <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Positions.lineno">
- <span class="sig-name descname"><span class="pre">lineno</span></span><a class="headerlink" href="#dis.Positions.lineno" title="Link to this definition">¶</a></dt>
- <dd></dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Positions.end_lineno">
- <span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#dis.Positions.end_lineno" title="Link to this definition">¶</a></dt>
- <dd></dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Positions.col_offset">
- <span class="sig-name descname"><span class="pre">col_offset</span></span><a class="headerlink" href="#dis.Positions.col_offset" title="Link to this definition">¶</a></dt>
- <dd></dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.Positions.end_col_offset">
- <span class="sig-name descname"><span class="pre">end_col_offset</span></span><a class="headerlink" href="#dis.Positions.end_col_offset" title="Link to this definition">¶</a></dt>
- <dd></dd></dl>
-
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <p>The Python compiler currently generates the following bytecode instructions.</p>
- <p><strong>General instructions</strong></p>
- <p>In the following, We will refer to the interpreter stack as <code class="docutils literal notranslate"><span class="pre">STACK</span></code> and describe
- operations on it as if it was a Python list. The top of the stack corresponds to
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> in this language.</p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-NOP">
- <span class="sig-name descname"><span class="pre">NOP</span></span><a class="headerlink" href="#opcode-NOP" title="Link to this definition">¶</a></dt>
- <dd><p>Do nothing code. Used as a placeholder by the bytecode optimizer, and to
- generate line tracing events.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_TOP">
- <span class="sig-name descname"><span class="pre">POP_TOP</span></span><a class="headerlink" href="#opcode-POP_TOP" title="Link to this definition">¶</a></dt>
- <dd><p>Removes the top-of-stack item:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-END_FOR">
- <span class="sig-name descname"><span class="pre">END_FOR</span></span><a class="headerlink" href="#opcode-END_FOR" title="Link to this definition">¶</a></dt>
- <dd><p>Removes the top two values from the stack.
- Equivalent to <code class="docutils literal notranslate"><span class="pre">POP_TOP</span></code>; <code class="docutils literal notranslate"><span class="pre">POP_TOP</span></code>.
- Used to clean up at the end of loops, hence the name.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-END_SEND">
- <span class="sig-name descname"><span class="pre">END_SEND</span></span><a class="headerlink" href="#opcode-END_SEND" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">del</span> <span class="pre">STACK[-2]</span></code>.
- Used to clean up when a generator exits.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-COPY">
- <span class="sig-name descname"><span class="pre">COPY</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-COPY" title="Link to this definition">¶</a></dt>
- <dd><p>Push the i-th item to the top of the stack without removing it from its original
- location:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">assert</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">])</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SWAP">
- <span class="sig-name descname"><span class="pre">SWAP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SWAP" title="Link to this definition">¶</a></dt>
- <dd><p>Swap the top of the stack with the i-th element:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">]</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CACHE">
- <span class="sig-name descname"><span class="pre">CACHE</span></span><a class="headerlink" href="#opcode-CACHE" title="Link to this definition">¶</a></dt>
- <dd><p>Rather than being an actual instruction, this opcode is used to mark extra
- space for the interpreter to cache useful data directly in the bytecode
- itself. It is automatically hidden by all <code class="docutils literal notranslate"><span class="pre">dis</span></code> utilities, but can be
- viewed with <code class="docutils literal notranslate"><span class="pre">show_caches=True</span></code>.</p>
- <p>Logically, this space is part of the preceding instruction. Many opcodes
- expect to be followed by an exact number of caches, and will instruct the
- interpreter to skip over them at runtime.</p>
- <p>Populated caches can look like arbitrary instructions, so great care should
- be taken when reading or modifying raw, adaptive bytecode containing
- quickened data.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <p><strong>Unary operations</strong></p>
- <p>Unary operations take the top of the stack, apply the operation, and push the
- result back on the stack.</p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-UNARY_NEGATIVE">
- <span class="sig-name descname"><span class="pre">UNARY_NEGATIVE</span></span><a class="headerlink" href="#opcode-UNARY_NEGATIVE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">-STACK[-1]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-UNARY_NOT">
- <span class="sig-name descname"><span class="pre">UNARY_NOT</span></span><a class="headerlink" href="#opcode-UNARY_NOT" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">not</span> <span class="pre">STACK[-1]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-UNARY_INVERT">
- <span class="sig-name descname"><span class="pre">UNARY_INVERT</span></span><a class="headerlink" href="#opcode-UNARY_INVERT" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">~STACK[-1]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_ITER">
- <span class="sig-name descname"><span class="pre">GET_ITER</span></span><a class="headerlink" href="#opcode-GET_ITER" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">iter(STACK[-1])</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_YIELD_FROM_ITER">
- <span class="sig-name descname"><span class="pre">GET_YIELD_FROM_ITER</span></span><a class="headerlink" href="#opcode-GET_YIELD_FROM_ITER" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is a <a class="reference internal" href="../glossary.html#term-generator-iterator"><span class="xref std std-term">generator iterator</span></a> or <a class="reference internal" href="../glossary.html#term-coroutine"><span class="xref std std-term">coroutine</span></a> object
- it is left as is. Otherwise, implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">iter(STACK[-1])</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- </dd></dl>
-
- <p><strong>Binary and in-place operations</strong></p>
- <p>Binary operations remove the top two items from the stack (<code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> and
- <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>). They perform the operation, then put the result back on the stack.</p>
- <p>In-place operations are like binary operations, but the operation is done in-place
- when <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> supports it, and the resulting <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> may be (but does
- not have to be) the original <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>.</p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BINARY_OP">
- <span class="sig-name descname"><span class="pre">BINARY_OP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">op</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BINARY_OP" title="Link to this definition">¶</a></dt>
- <dd><p>Implements the binary and in-place operators (depending on the value of
- <em>op</em>):</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">rhs</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">lhs</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lhs</span> <span class="n">op</span> <span class="n">rhs</span><span class="p">)</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BINARY_SUBSCR">
- <span class="sig-name descname"><span class="pre">BINARY_SUBSCR</span></span><a class="headerlink" href="#opcode-BINARY_SUBSCR" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">key</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">container</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_SUBSCR">
- <span class="sig-name descname"><span class="pre">STORE_SUBSCR</span></span><a class="headerlink" href="#opcode-STORE_SUBSCR" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">key</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">value</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_SUBSCR">
- <span class="sig-name descname"><span class="pre">DELETE_SUBSCR</span></span><a class="headerlink" href="#opcode-DELETE_SUBSCR" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">key</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="k">del</span> <span class="n">container</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BINARY_SLICE">
- <span class="sig-name descname"><span class="pre">BINARY_SLICE</span></span><a class="headerlink" href="#opcode-BINARY_SLICE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">end</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">container</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">])</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_SLICE">
- <span class="sig-name descname"><span class="pre">STORE_SLICE</span></span><a class="headerlink" href="#opcode-STORE_SLICE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">end</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">values</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">container</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <p><strong>Coroutine opcodes</strong></p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_AWAITABLE">
- <span class="sig-name descname"><span class="pre">GET_AWAITABLE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">where</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-GET_AWAITABLE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">get_awaitable(STACK[-1])</span></code>, where <code class="docutils literal notranslate"><span class="pre">get_awaitable(o)</span></code>
- returns <code class="docutils literal notranslate"><span class="pre">o</span></code> if <code class="docutils literal notranslate"><span class="pre">o</span></code> is a coroutine object or a generator object with
- the <a class="reference internal" href="inspect.html#inspect.CO_ITERABLE_COROUTINE" title="inspect.CO_ITERABLE_COROUTINE"><code class="xref py py-data docutils literal notranslate"><span class="pre">CO_ITERABLE_COROUTINE</span></code></a> flag, or resolves
- <code class="docutils literal notranslate"><span class="pre">o.__await__</span></code>.</p>
- <blockquote>
- <div><p>If the <code class="docutils literal notranslate"><span class="pre">where</span></code> operand is nonzero, it indicates where the instruction
- occurs:</p>
- <ul class="simple">
- <li><p><code class="docutils literal notranslate"><span class="pre">1</span></code>: After a call to <code class="docutils literal notranslate"><span class="pre">__aenter__</span></code></p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">2</span></code>: After a call to <code class="docutils literal notranslate"><span class="pre">__aexit__</span></code></p></li>
- </ul>
- </div></blockquote>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Previously, this instruction did not have an oparg.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_AITER">
- <span class="sig-name descname"><span class="pre">GET_AITER</span></span><a class="headerlink" href="#opcode-GET_AITER" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">STACK[-1].__aiter__()</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.7: </span>Returning awaitable objects from <code class="docutils literal notranslate"><span class="pre">__aiter__</span></code> is no longer
- supported.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_ANEXT">
- <span class="sig-name descname"><span class="pre">GET_ANEXT</span></span><a class="headerlink" href="#opcode-GET_ANEXT" title="Link to this definition">¶</a></dt>
- <dd><p>Implement <code class="docutils literal notranslate"><span class="pre">STACK.append(get_awaitable(STACK[-1].__anext__()))</span></code> to the stack.
- See <code class="docutils literal notranslate"><span class="pre">GET_AWAITABLE</span></code> for details about <code class="docutils literal notranslate"><span class="pre">get_awaitable</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-END_ASYNC_FOR">
- <span class="sig-name descname"><span class="pre">END_ASYNC_FOR</span></span><a class="headerlink" href="#opcode-END_ASYNC_FOR" title="Link to this definition">¶</a></dt>
- <dd><p>Terminates an <a class="reference internal" href="../reference/compound_stmts.html#async-for"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">for</span></code></a> loop. Handles an exception raised
- when awaiting a next item. The stack contains the async iterable in
- <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> and the raised exception in <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>. Both are popped.
- If the exception is not <a class="reference internal" href="exceptions.html#StopAsyncIteration" title="StopAsyncIteration"><code class="xref py py-exc docutils literal notranslate"><span class="pre">StopAsyncIteration</span></code></a>, it is re-raised.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.8.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Exception representation on the stack now consist of one, not three, items.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CLEANUP_THROW">
- <span class="sig-name descname"><span class="pre">CLEANUP_THROW</span></span><a class="headerlink" href="#opcode-CLEANUP_THROW" title="Link to this definition">¶</a></dt>
- <dd><p>Handles an exception raised during a <a class="reference internal" href="../reference/expressions.html#generator.throw" title="generator.throw"><code class="xref py py-meth docutils literal notranslate"><span class="pre">throw()</span></code></a> or
- <a class="reference internal" href="../reference/expressions.html#generator.close" title="generator.close"><code class="xref py py-meth docutils literal notranslate"><span class="pre">close()</span></code></a> call through the current frame. If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is an
- instance of <a class="reference internal" href="exceptions.html#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal notranslate"><span class="pre">StopIteration</span></code></a>, pop three values from the stack and push
- its <code class="docutils literal notranslate"><span class="pre">value</span></code> member. Otherwise, re-raise <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BEFORE_ASYNC_WITH">
- <span class="sig-name descname"><span class="pre">BEFORE_ASYNC_WITH</span></span><a class="headerlink" href="#opcode-BEFORE_ASYNC_WITH" title="Link to this definition">¶</a></dt>
- <dd><p>Resolves <code class="docutils literal notranslate"><span class="pre">__aenter__</span></code> and <code class="docutils literal notranslate"><span class="pre">__aexit__</span></code> from <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>.
- Pushes <code class="docutils literal notranslate"><span class="pre">__aexit__</span></code> and result of <code class="docutils literal notranslate"><span class="pre">__aenter__()</span></code> to the stack:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">STACK</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="fm">__aexit__</span><span class="p">,</span> <span class="fm">__aenter__</span><span class="p">())</span>
- </pre></div>
- </div>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- </dd></dl>
-
- <p><strong>Miscellaneous opcodes</strong></p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SET_ADD">
- <span class="sig-name descname"><span class="pre">SET_ADD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SET_ADD" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">item</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">set</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">item</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to implement set comprehensions.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LIST_APPEND">
- <span class="sig-name descname"><span class="pre">LIST_APPEND</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LIST_APPEND" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">item</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">item</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to implement list comprehensions.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MAP_ADD">
- <span class="sig-name descname"><span class="pre">MAP_ADD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-MAP_ADD" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">value</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">key</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">dict</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to implement dict comprehensions.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.1.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.8: </span>Map value is <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> and map key is <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>. Before, those
- were reversed.</p>
- </div>
- </dd></dl>
-
- <p>For all of the <a class="reference internal" href="#opcode-SET_ADD"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">SET_ADD</span></code></a>, <a class="reference internal" href="#opcode-LIST_APPEND"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LIST_APPEND</span></code></a> and <a class="reference internal" href="#opcode-MAP_ADD"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">MAP_ADD</span></code></a>
- instructions, while the added value or key/value pair is popped off, the
- container object remains on the stack so that it is available for further
- iterations of the loop.</p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RETURN_VALUE">
- <span class="sig-name descname"><span class="pre">RETURN_VALUE</span></span><a class="headerlink" href="#opcode-RETURN_VALUE" title="Link to this definition">¶</a></dt>
- <dd><p>Returns with <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> to the caller of the function.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RETURN_CONST">
- <span class="sig-name descname"><span class="pre">RETURN_CONST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">consti</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-RETURN_CONST" title="Link to this definition">¶</a></dt>
- <dd><p>Returns with <code class="docutils literal notranslate"><span class="pre">co_consts[consti]</span></code> to the caller of the function.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-YIELD_VALUE">
- <span class="sig-name descname"><span class="pre">YIELD_VALUE</span></span><a class="headerlink" href="#opcode-YIELD_VALUE" title="Link to this definition">¶</a></dt>
- <dd><p>Yields <code class="docutils literal notranslate"><span class="pre">STACK.pop()</span></code> from a <a class="reference internal" href="../glossary.html#term-generator"><span class="xref std std-term">generator</span></a>.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>oparg set to be the stack depth.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>oparg set to be the exception block depth, for efficient closing of generators.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SETUP_ANNOTATIONS">
- <span class="sig-name descname"><span class="pre">SETUP_ANNOTATIONS</span></span><a class="headerlink" href="#opcode-SETUP_ANNOTATIONS" title="Link to this definition">¶</a></dt>
- <dd><p>Checks whether <code class="docutils literal notranslate"><span class="pre">__annotations__</span></code> is defined in <code class="docutils literal notranslate"><span class="pre">locals()</span></code>, if not it is
- set up to an empty <code class="docutils literal notranslate"><span class="pre">dict</span></code>. This opcode is only emitted if a class
- or module body contains <a class="reference internal" href="../glossary.html#term-variable-annotation"><span class="xref std std-term">variable annotations</span></a>
- statically.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.6.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_EXCEPT">
- <span class="sig-name descname"><span class="pre">POP_EXCEPT</span></span><a class="headerlink" href="#opcode-POP_EXCEPT" title="Link to this definition">¶</a></dt>
- <dd><p>Pops a value from the stack, which is used to restore the exception state.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Exception representation on the stack now consist of one, not three, items.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RERAISE">
- <span class="sig-name descname"><span class="pre">RERAISE</span></span><a class="headerlink" href="#opcode-RERAISE" title="Link to this definition">¶</a></dt>
- <dd><p>Re-raises the exception currently on top of the stack. If oparg is non-zero,
- pops an additional value from the stack which is used to set
- <a class="reference internal" href="../reference/datamodel.html#frame.f_lasti" title="frame.f_lasti"><code class="xref py py-attr docutils literal notranslate"><span class="pre">f_lasti</span></code></a> of the current frame.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Exception representation on the stack now consist of one, not three, items.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-PUSH_EXC_INFO">
- <span class="sig-name descname"><span class="pre">PUSH_EXC_INFO</span></span><a class="headerlink" href="#opcode-PUSH_EXC_INFO" title="Link to this definition">¶</a></dt>
- <dd><p>Pops a value from the stack. Pushes the current exception to the top of the stack.
- Pushes the value originally popped back to the stack.
- Used in exception handlers.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CHECK_EXC_MATCH">
- <span class="sig-name descname"><span class="pre">CHECK_EXC_MATCH</span></span><a class="headerlink" href="#opcode-CHECK_EXC_MATCH" title="Link to this definition">¶</a></dt>
- <dd><p>Performs exception matching for <code class="docutils literal notranslate"><span class="pre">except</span></code>. Tests whether the <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>
- is an exception matching <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>. Pops <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> and pushes the boolean
- result of the test.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CHECK_EG_MATCH">
- <span class="sig-name descname"><span class="pre">CHECK_EG_MATCH</span></span><a class="headerlink" href="#opcode-CHECK_EG_MATCH" title="Link to this definition">¶</a></dt>
- <dd><p>Performs exception matching for <code class="docutils literal notranslate"><span class="pre">except*</span></code>. Applies <code class="docutils literal notranslate"><span class="pre">split(STACK[-1])</span></code> on
- the exception group representing <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>.</p>
- <p>In case of a match, pops two items from the stack and pushes the
- non-matching subgroup (<code class="docutils literal notranslate"><span class="pre">None</span></code> in case of full match) followed by the
- matching subgroup. When there is no match, pops one item (the match
- type) and pushes <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-WITH_EXCEPT_START">
- <span class="sig-name descname"><span class="pre">WITH_EXCEPT_START</span></span><a class="headerlink" href="#opcode-WITH_EXCEPT_START" title="Link to this definition">¶</a></dt>
- <dd><p>Calls the function in position 4 on the stack with arguments (type, val, tb)
- representing the exception at the top of the stack.
- Used to implement the call <code class="docutils literal notranslate"><span class="pre">context_manager.__exit__(*exc_info())</span></code> when an exception
- has occurred in a <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> statement.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>The <code class="docutils literal notranslate"><span class="pre">__exit__</span></code> function is in position 4 of the stack rather than 7.
- Exception representation on the stack now consist of one, not three, items.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_ASSERTION_ERROR">
- <span class="sig-name descname"><span class="pre">LOAD_ASSERTION_ERROR</span></span><a class="headerlink" href="#opcode-LOAD_ASSERTION_ERROR" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes <a class="reference internal" href="exceptions.html#AssertionError" title="AssertionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">AssertionError</span></code></a> onto the stack. Used by the <a class="reference internal" href="../reference/simple_stmts.html#assert"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">assert</span></code></a>
- statement.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_BUILD_CLASS">
- <span class="sig-name descname"><span class="pre">LOAD_BUILD_CLASS</span></span><a class="headerlink" href="#opcode-LOAD_BUILD_CLASS" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes <code class="xref py py-func docutils literal notranslate"><span class="pre">builtins.__build_class__()</span></code> onto the stack. It is later called
- to construct a class.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BEFORE_WITH">
- <span class="sig-name descname"><span class="pre">BEFORE_WITH</span></span><a class="headerlink" href="#opcode-BEFORE_WITH" title="Link to this definition">¶</a></dt>
- <dd><p>This opcode performs several operations before a with block starts. First,
- it loads <a class="reference internal" href="../reference/datamodel.html#object.__exit__" title="object.__exit__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__exit__()</span></code></a> from the context manager and pushes it onto
- the stack for later use by <a class="reference internal" href="#opcode-WITH_EXCEPT_START"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">WITH_EXCEPT_START</span></code></a>. Then,
- <a class="reference internal" href="../reference/datamodel.html#object.__enter__" title="object.__enter__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__enter__()</span></code></a> is called. Finally, the result of calling the
- <code class="docutils literal notranslate"><span class="pre">__enter__()</span></code> method is pushed onto the stack.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-GET_LEN">
- <span class="sig-name descname"><span class="pre">GET_LEN</span></span><a class="headerlink" href="#opcode-GET_LEN" title="Link to this definition">¶</a></dt>
- <dd><p>Perform <code class="docutils literal notranslate"><span class="pre">STACK.append(len(STACK[-1]))</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.10.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MATCH_MAPPING">
- <span class="sig-name descname"><span class="pre">MATCH_MAPPING</span></span><a class="headerlink" href="#opcode-MATCH_MAPPING" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is an instance of <a class="reference internal" href="collections.abc.html#collections.abc.Mapping" title="collections.abc.Mapping"><code class="xref py py-class docutils literal notranslate"><span class="pre">collections.abc.Mapping</span></code></a> (or, more
- technically: if it has the <a class="reference internal" href="../c-api/typeobj.html#c.Py_TPFLAGS_MAPPING" title="Py_TPFLAGS_MAPPING"><code class="xref c c-macro docutils literal notranslate"><span class="pre">Py_TPFLAGS_MAPPING</span></code></a> flag set in its
- <a class="reference internal" href="../c-api/typeobj.html#c.PyTypeObject.tp_flags" title="PyTypeObject.tp_flags"><code class="xref c c-member docutils literal notranslate"><span class="pre">tp_flags</span></code></a>), push <code class="docutils literal notranslate"><span class="pre">True</span></code> onto the stack. Otherwise,
- push <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.10.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MATCH_SEQUENCE">
- <span class="sig-name descname"><span class="pre">MATCH_SEQUENCE</span></span><a class="headerlink" href="#opcode-MATCH_SEQUENCE" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is an instance of <a class="reference internal" href="collections.abc.html#collections.abc.Sequence" title="collections.abc.Sequence"><code class="xref py py-class docutils literal notranslate"><span class="pre">collections.abc.Sequence</span></code></a> and is <em>not</em> an instance
- of <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>/<a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a>/<a class="reference internal" href="stdtypes.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytearray</span></code></a> (or, more technically: if it has
- the <a class="reference internal" href="../c-api/typeobj.html#c.Py_TPFLAGS_SEQUENCE" title="Py_TPFLAGS_SEQUENCE"><code class="xref c c-macro docutils literal notranslate"><span class="pre">Py_TPFLAGS_SEQUENCE</span></code></a> flag set in its <a class="reference internal" href="../c-api/typeobj.html#c.PyTypeObject.tp_flags" title="PyTypeObject.tp_flags"><code class="xref c c-member docutils literal notranslate"><span class="pre">tp_flags</span></code></a>),
- push <code class="docutils literal notranslate"><span class="pre">True</span></code> onto the stack. Otherwise, push <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.10.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MATCH_KEYS">
- <span class="sig-name descname"><span class="pre">MATCH_KEYS</span></span><a class="headerlink" href="#opcode-MATCH_KEYS" title="Link to this definition">¶</a></dt>
- <dd><p><code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is a tuple of mapping keys, and <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> is the match subject.
- If <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> contains all of the keys in <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>, push a <a class="reference internal" href="stdtypes.html#tuple" title="tuple"><code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></a>
- containing the corresponding values. Otherwise, push <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.10.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Previously, this instruction also pushed a boolean value indicating
- success (<code class="docutils literal notranslate"><span class="pre">True</span></code>) or failure (<code class="docutils literal notranslate"><span class="pre">False</span></code>).</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_NAME">
- <span class="sig-name descname"><span class="pre">STORE_NAME</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-STORE_NAME" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">name</span> <span class="pre">=</span> <span class="pre">STACK.pop()</span></code>. <em>namei</em> is the index of <em>name</em> in the attribute
- <a class="reference internal" href="../reference/datamodel.html#codeobject.co_names" title="codeobject.co_names"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_names</span></code></a> of the <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a>.
- The compiler tries to use <a class="reference internal" href="#opcode-STORE_FAST"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_FAST</span></code></a> or <a class="reference internal" href="#opcode-STORE_GLOBAL"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_GLOBAL</span></code></a> if possible.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_NAME">
- <span class="sig-name descname"><span class="pre">DELETE_NAME</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DELETE_NAME" title="Link to this definition">¶</a></dt>
- <dd><p>Implements <code class="docutils literal notranslate"><span class="pre">del</span> <span class="pre">name</span></code>, where <em>namei</em> is the index into <a class="reference internal" href="../reference/datamodel.html#codeobject.co_names" title="codeobject.co_names"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_names</span></code></a>
- attribute of the <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-UNPACK_SEQUENCE">
- <span class="sig-name descname"><span class="pre">UNPACK_SEQUENCE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-UNPACK_SEQUENCE" title="Link to this definition">¶</a></dt>
- <dd><p>Unpacks <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> into <em>count</em> individual values, which are put onto the stack
- right-to-left. Require there to be exactly <em>count</em> values.:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">==</span> <span class="n">count</span><span class="p">)</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()[:</span><span class="o">-</span><span class="n">count</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-UNPACK_EX">
- <span class="sig-name descname"><span class="pre">UNPACK_EX</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">counts</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-UNPACK_EX" title="Link to this definition">¶</a></dt>
- <dd><p>Implements assignment with a starred target: Unpacks an iterable in <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>
- into individual values, where the total number of values can be smaller than the
- number of items in the iterable: one of the new values will be a list of all
- leftover items.</p>
- <p>The number of values before and after the list value is limited to 255.</p>
- <p>The number of values before the list value is encoded in the argument of the
- opcode. The number of values after the list if any is encoded using an
- <code class="docutils literal notranslate"><span class="pre">EXTENDED_ARG</span></code>. As a consequence, the argument can be seen as a two bytes values
- where the low byte of <em>counts</em> is the number of values before the list value, the
- high byte of <em>counts</em> the number of values after it.</p>
- <p>The extracted values are put onto the stack right-to-left, i.e. <code class="docutils literal notranslate"><span class="pre">a,</span> <span class="pre">*b,</span> <span class="pre">c</span> <span class="pre">=</span> <span class="pre">d</span></code>
- will be stored after execution as <code class="docutils literal notranslate"><span class="pre">STACK.extend((a,</span> <span class="pre">b,</span> <span class="pre">c))</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_ATTR">
- <span class="sig-name descname"><span class="pre">STORE_ATTR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-STORE_ATTR" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">value</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">obj</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">value</span>
- </pre></div>
- </div>
- <p>where <em>namei</em> is the index of name in <a class="reference internal" href="../reference/datamodel.html#codeobject.co_names" title="codeobject.co_names"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_names</span></code></a> of the
- <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_ATTR">
- <span class="sig-name descname"><span class="pre">DELETE_ATTR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DELETE_ATTR" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="k">del</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
- </pre></div>
- </div>
- <p>where <em>namei</em> is the index of name into <a class="reference internal" href="../reference/datamodel.html#codeobject.co_names" title="codeobject.co_names"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_names</span></code></a> of the
- <a class="reference internal" href="../reference/datamodel.html#code-objects"><span class="std std-ref">code object</span></a>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_GLOBAL">
- <span class="sig-name descname"><span class="pre">STORE_GLOBAL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-STORE_GLOBAL" title="Link to this definition">¶</a></dt>
- <dd><p>Works as <a class="reference internal" href="#opcode-STORE_NAME"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_NAME</span></code></a>, but stores the name as a global.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_GLOBAL">
- <span class="sig-name descname"><span class="pre">DELETE_GLOBAL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DELETE_GLOBAL" title="Link to this definition">¶</a></dt>
- <dd><p>Works as <a class="reference internal" href="#opcode-DELETE_NAME"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">DELETE_NAME</span></code></a>, but deletes a global name.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_CONST">
- <span class="sig-name descname"><span class="pre">LOAD_CONST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">consti</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_CONST" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes <code class="docutils literal notranslate"><span class="pre">co_consts[consti]</span></code> onto the stack.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_NAME">
- <span class="sig-name descname"><span class="pre">LOAD_NAME</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_NAME" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes the value associated with <code class="docutils literal notranslate"><span class="pre">co_names[namei]</span></code> onto the stack.
- The name is looked up within the locals, then the globals, then the builtins.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_LOCALS">
- <span class="sig-name descname"><span class="pre">LOAD_LOCALS</span></span><a class="headerlink" href="#opcode-LOAD_LOCALS" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a reference to the locals dictionary onto the stack. This is used
- to prepare namespace dictionaries for <a class="reference internal" href="#opcode-LOAD_FROM_DICT_OR_DEREF"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_FROM_DICT_OR_DEREF</span></code></a>
- and <a class="reference internal" href="#opcode-LOAD_FROM_DICT_OR_GLOBALS"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_FROM_DICT_OR_GLOBALS</span></code></a>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_FROM_DICT_OR_GLOBALS">
- <span class="sig-name descname"><span class="pre">LOAD_FROM_DICT_OR_GLOBALS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_FROM_DICT_OR_GLOBALS" title="Link to this definition">¶</a></dt>
- <dd><p>Pops a mapping off the stack and looks up the value for <code class="docutils literal notranslate"><span class="pre">co_names[namei]</span></code>.
- If the name is not found there, looks it up in the globals and then the builtins,
- similar to <a class="reference internal" href="#opcode-LOAD_GLOBAL"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_GLOBAL</span></code></a>.
- This is used for loading global variables in
- <a class="reference internal" href="../reference/executionmodel.html#annotation-scopes"><span class="std std-ref">annotation scopes</span></a> within class bodies.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_TUPLE">
- <span class="sig-name descname"><span class="pre">BUILD_TUPLE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_TUPLE" title="Link to this definition">¶</a></dt>
- <dd><p>Creates a tuple consuming <em>count</em> items from the stack, and pushes the
- resulting tuple onto the stack.:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">assert</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span>
- <span class="n">STACK</span><span class="p">,</span> <span class="n">values</span> <span class="o">=</span> <span class="n">STACK</span><span class="p">[:</span><span class="o">-</span><span class="n">count</span><span class="p">],</span> <span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">count</span><span class="p">:]</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">values</span><span class="p">))</span>
- </pre></div>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_LIST">
- <span class="sig-name descname"><span class="pre">BUILD_LIST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_LIST" title="Link to this definition">¶</a></dt>
- <dd><p>Works as <a class="reference internal" href="#opcode-BUILD_TUPLE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">BUILD_TUPLE</span></code></a>, but creates a list.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_SET">
- <span class="sig-name descname"><span class="pre">BUILD_SET</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_SET" title="Link to this definition">¶</a></dt>
- <dd><p>Works as <a class="reference internal" href="#opcode-BUILD_TUPLE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">BUILD_TUPLE</span></code></a>, but creates a set.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_MAP">
- <span class="sig-name descname"><span class="pre">BUILD_MAP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_MAP" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a new dictionary object onto the stack. Pops <code class="docutils literal notranslate"><span class="pre">2</span> <span class="pre">*</span> <span class="pre">count</span></code> items
- so that the dictionary holds <em>count</em> entries:
- <code class="docutils literal notranslate"><span class="pre">{...,</span> <span class="pre">STACK[-4]:</span> <span class="pre">STACK[-3],</span> <span class="pre">STACK[-2]:</span> <span class="pre">STACK[-1]}</span></code>.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.5: </span>The dictionary is created from stack items instead of creating an
- empty dictionary pre-sized to hold <em>count</em> items.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_CONST_KEY_MAP">
- <span class="sig-name descname"><span class="pre">BUILD_CONST_KEY_MAP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_CONST_KEY_MAP" title="Link to this definition">¶</a></dt>
- <dd><p>The version of <a class="reference internal" href="#opcode-BUILD_MAP"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">BUILD_MAP</span></code></a> specialized for constant keys. Pops the
- top element on the stack which contains a tuple of keys, then starting from
- <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>, pops <em>count</em> values to form values in the built dictionary.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.6.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_STRING">
- <span class="sig-name descname"><span class="pre">BUILD_STRING</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_STRING" title="Link to this definition">¶</a></dt>
- <dd><p>Concatenates <em>count</em> strings from the stack and pushes the resulting string
- onto the stack.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.6.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LIST_EXTEND">
- <span class="sig-name descname"><span class="pre">LIST_EXTEND</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LIST_EXTEND" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">seq</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">list</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">seq</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to build lists.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SET_UPDATE">
- <span class="sig-name descname"><span class="pre">SET_UPDATE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SET_UPDATE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">seq</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">set</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="n">seq</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to build sets.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DICT_UPDATE">
- <span class="sig-name descname"><span class="pre">DICT_UPDATE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DICT_UPDATE" title="Link to this definition">¶</a></dt>
- <dd><p>Implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="nb">dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">STACK</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">],</span> <span class="nb">map</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>Used to build dicts.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DICT_MERGE">
- <span class="sig-name descname"><span class="pre">DICT_MERGE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DICT_MERGE" title="Link to this definition">¶</a></dt>
- <dd><p>Like <a class="reference internal" href="#opcode-DICT_UPDATE"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">DICT_UPDATE</span></code></a> but raises an exception for duplicate keys.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_ATTR">
- <span class="sig-name descname"><span class="pre">LOAD_ATTR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_ATTR" title="Link to this definition">¶</a></dt>
- <dd><p>If the low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code> is not set, this replaces <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> with
- <code class="docutils literal notranslate"><span class="pre">getattr(STACK[-1],</span> <span class="pre">co_names[namei>>1])</span></code>.</p>
- <p>If the low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code> is set, this will attempt to load a method named
- <code class="docutils literal notranslate"><span class="pre">co_names[namei>>1]</span></code> from the <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> object. <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is popped.
- This bytecode distinguishes two cases: if <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> has a method with the
- correct name, the bytecode pushes the unbound method and <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>.
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> will be used as the first argument (<code class="docutils literal notranslate"><span class="pre">self</span></code>) by <a class="reference internal" href="#opcode-CALL"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CALL</span></code></a>
- when calling the unbound method. Otherwise, <code class="docutils literal notranslate"><span class="pre">NULL</span></code> and the object returned by
- the attribute lookup are pushed.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>If the low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code> is set, then a <code class="docutils literal notranslate"><span class="pre">NULL</span></code> or <code class="docutils literal notranslate"><span class="pre">self</span></code> is
- pushed to the stack before the attribute or unbound method respectively.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_SUPER_ATTR">
- <span class="sig-name descname"><span class="pre">LOAD_SUPER_ATTR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_SUPER_ATTR" title="Link to this definition">¶</a></dt>
- <dd><p>This opcode implements <a class="reference internal" href="functions.html#super" title="super"><code class="xref py py-func docutils literal notranslate"><span class="pre">super()</span></code></a>, both in its zero-argument and
- two-argument forms (e.g. <code class="docutils literal notranslate"><span class="pre">super().method()</span></code>, <code class="docutils literal notranslate"><span class="pre">super().attr</span></code> and
- <code class="docutils literal notranslate"><span class="pre">super(cls,</span> <span class="pre">self).method()</span></code>, <code class="docutils literal notranslate"><span class="pre">super(cls,</span> <span class="pre">self).attr</span></code>).</p>
- <p>It pops three values from the stack (from top of stack down):
- - <code class="docutils literal notranslate"><span class="pre">self</span></code>: the first argument to the current method
- - <code class="docutils literal notranslate"><span class="pre">cls</span></code>: the class within which the current method was defined
- - the global <code class="docutils literal notranslate"><span class="pre">super</span></code></p>
- <p>With respect to its argument, it works similarly to <a class="reference internal" href="#opcode-LOAD_ATTR"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_ATTR</span></code></a>,
- except that <code class="docutils literal notranslate"><span class="pre">namei</span></code> is shifted left by 2 bits instead of 1.</p>
- <p>The low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code> signals to attempt a method load, as with
- <a class="reference internal" href="#opcode-LOAD_ATTR"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_ATTR</span></code></a>, which results in pushing <code class="docutils literal notranslate"><span class="pre">NULL</span></code> and the loaded method.
- When it is unset a single value is pushed to the stack.</p>
- <p>The second-low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code>, if set, means that this was a two-argument
- call to <a class="reference internal" href="functions.html#super" title="super"><code class="xref py py-func docutils literal notranslate"><span class="pre">super()</span></code></a> (unset means zero-argument).</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-COMPARE_OP">
- <span class="sig-name descname"><span class="pre">COMPARE_OP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">opname</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-COMPARE_OP" title="Link to this definition">¶</a></dt>
- <dd><p>Performs a Boolean operation. The operation name can be found in
- <code class="docutils literal notranslate"><span class="pre">cmp_op[opname]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-IS_OP">
- <span class="sig-name descname"><span class="pre">IS_OP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">invert</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-IS_OP" title="Link to this definition">¶</a></dt>
- <dd><p>Performs <code class="docutils literal notranslate"><span class="pre">is</span></code> comparison, or <code class="docutils literal notranslate"><span class="pre">is</span> <span class="pre">not</span></code> if <code class="docutils literal notranslate"><span class="pre">invert</span></code> is 1.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CONTAINS_OP">
- <span class="sig-name descname"><span class="pre">CONTAINS_OP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">invert</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-CONTAINS_OP" title="Link to this definition">¶</a></dt>
- <dd><p>Performs <code class="docutils literal notranslate"><span class="pre">in</span></code> comparison, or <code class="docutils literal notranslate"><span class="pre">not</span> <span class="pre">in</span></code> if <code class="docutils literal notranslate"><span class="pre">invert</span></code> is 1.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.9.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-IMPORT_NAME">
- <span class="sig-name descname"><span class="pre">IMPORT_NAME</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-IMPORT_NAME" title="Link to this definition">¶</a></dt>
- <dd><p>Imports the module <code class="docutils literal notranslate"><span class="pre">co_names[namei]</span></code>. <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> and <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> are
- popped and provide the <em>fromlist</em> and <em>level</em> arguments of <a class="reference internal" href="functions.html#import__" title="__import__"><code class="xref py py-func docutils literal notranslate"><span class="pre">__import__()</span></code></a>.
- The module object is pushed onto the stack. The current namespace is not affected: for a proper import statement, a subsequent <a class="reference internal" href="#opcode-STORE_FAST"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_FAST</span></code></a> instruction
- modifies the namespace.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-IMPORT_FROM">
- <span class="sig-name descname"><span class="pre">IMPORT_FROM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-IMPORT_FROM" title="Link to this definition">¶</a></dt>
- <dd><p>Loads the attribute <code class="docutils literal notranslate"><span class="pre">co_names[namei]</span></code> from the module found in <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>.
- The resulting object is pushed onto the stack, to be subsequently stored by a
- <a class="reference internal" href="#opcode-STORE_FAST"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">STORE_FAST</span></code></a> instruction.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-JUMP_FORWARD">
- <span class="sig-name descname"><span class="pre">JUMP_FORWARD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-JUMP_FORWARD" title="Link to this definition">¶</a></dt>
- <dd><p>Increments bytecode counter by <em>delta</em>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-JUMP_BACKWARD">
- <span class="sig-name descname"><span class="pre">JUMP_BACKWARD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-JUMP_BACKWARD" title="Link to this definition">¶</a></dt>
- <dd><p>Decrements bytecode counter by <em>delta</em>. Checks for interrupts.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-JUMP_BACKWARD_NO_INTERRUPT">
- <span class="sig-name descname"><span class="pre">JUMP_BACKWARD_NO_INTERRUPT</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-JUMP_BACKWARD_NO_INTERRUPT" title="Link to this definition">¶</a></dt>
- <dd><p>Decrements bytecode counter by <em>delta</em>. Does not check for interrupts.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_JUMP_IF_TRUE">
- <span class="sig-name descname"><span class="pre">POP_JUMP_IF_TRUE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-POP_JUMP_IF_TRUE" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is true, increments the bytecode counter by <em>delta</em>.
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is popped.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>The oparg is now a relative delta rather than an absolute target.
- This opcode is a pseudo-instruction, replaced in final bytecode by
- the directed versions (forward/backward).</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>This is no longer a pseudo-instruction.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_JUMP_IF_FALSE">
- <span class="sig-name descname"><span class="pre">POP_JUMP_IF_FALSE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-POP_JUMP_IF_FALSE" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is false, increments the bytecode counter by <em>delta</em>.
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is popped.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>The oparg is now a relative delta rather than an absolute target.
- This opcode is a pseudo-instruction, replaced in final bytecode by
- the directed versions (forward/backward).</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>This is no longer a pseudo-instruction.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_JUMP_IF_NOT_NONE">
- <span class="sig-name descname"><span class="pre">POP_JUMP_IF_NOT_NONE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-POP_JUMP_IF_NOT_NONE" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is not <code class="docutils literal notranslate"><span class="pre">None</span></code>, increments the bytecode counter by <em>delta</em>.
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is popped.</p>
- <p>This opcode is a pseudo-instruction, replaced in final bytecode by
- the directed versions (forward/backward).</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>This is no longer a pseudo-instruction.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_JUMP_IF_NONE">
- <span class="sig-name descname"><span class="pre">POP_JUMP_IF_NONE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-POP_JUMP_IF_NONE" title="Link to this definition">¶</a></dt>
- <dd><p>If <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is <code class="docutils literal notranslate"><span class="pre">None</span></code>, increments the bytecode counter by <em>delta</em>.
- <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is popped.</p>
- <p>This opcode is a pseudo-instruction, replaced in final bytecode by
- the directed versions (forward/backward).</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>This is no longer a pseudo-instruction.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-FOR_ITER">
- <span class="sig-name descname"><span class="pre">FOR_ITER</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-FOR_ITER" title="Link to this definition">¶</a></dt>
- <dd><p><code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is an <a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></a>. Call its <a class="reference internal" href="stdtypes.html#iterator.__next__" title="iterator.__next__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__next__()</span></code></a> method.
- If this yields a new value, push it on the stack (leaving the iterator below
- it). If the iterator indicates it is exhausted then the byte code counter is
- incremented by <em>delta</em>.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>Up until 3.11 the iterator was popped when it was exhausted.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_GLOBAL">
- <span class="sig-name descname"><span class="pre">LOAD_GLOBAL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">namei</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_GLOBAL" title="Link to this definition">¶</a></dt>
- <dd><p>Loads the global named <code class="docutils literal notranslate"><span class="pre">co_names[namei>>1]</span></code> onto the stack.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>If the low bit of <code class="docutils literal notranslate"><span class="pre">namei</span></code> is set, then a <code class="docutils literal notranslate"><span class="pre">NULL</span></code> is pushed to the
- stack before the global variable.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_FAST">
- <span class="sig-name descname"><span class="pre">LOAD_FAST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">var_num</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_FAST" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a reference to the local <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code> onto the stack.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>This opcode is now only used in situations where the local variable is
- guaranteed to be initialized. It cannot raise <a class="reference internal" href="exceptions.html#UnboundLocalError" title="UnboundLocalError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">UnboundLocalError</span></code></a>.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_FAST_CHECK">
- <span class="sig-name descname"><span class="pre">LOAD_FAST_CHECK</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">var_num</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_FAST_CHECK" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a reference to the local <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code> onto the stack,
- raising an <a class="reference internal" href="exceptions.html#UnboundLocalError" title="UnboundLocalError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">UnboundLocalError</span></code></a> if the local variable has not been
- initialized.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_FAST_AND_CLEAR">
- <span class="sig-name descname"><span class="pre">LOAD_FAST_AND_CLEAR</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">var_num</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_FAST_AND_CLEAR" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a reference to the local <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code> onto the stack (or
- pushes <code class="docutils literal notranslate"><span class="pre">NULL</span></code> onto the stack if the local variable has not been
- initialized) and sets <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code> to <code class="docutils literal notranslate"><span class="pre">NULL</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_FAST">
- <span class="sig-name descname"><span class="pre">STORE_FAST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">var_num</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-STORE_FAST" title="Link to this definition">¶</a></dt>
- <dd><p>Stores <code class="docutils literal notranslate"><span class="pre">STACK.pop()</span></code> into the local <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_FAST">
- <span class="sig-name descname"><span class="pre">DELETE_FAST</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">var_num</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DELETE_FAST" title="Link to this definition">¶</a></dt>
- <dd><p>Deletes local <code class="docutils literal notranslate"><span class="pre">co_varnames[var_num]</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MAKE_CELL">
- <span class="sig-name descname"><span class="pre">MAKE_CELL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-MAKE_CELL" title="Link to this definition">¶</a></dt>
- <dd><p>Creates a new cell in slot <code class="docutils literal notranslate"><span class="pre">i</span></code>. If that slot is nonempty then
- that value is stored into the new cell.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_CLOSURE">
- <span class="sig-name descname"><span class="pre">LOAD_CLOSURE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_CLOSURE" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a reference to the cell contained in slot <code class="docutils literal notranslate"><span class="pre">i</span></code> of the “fast locals”
- storage. The name of the variable is <code class="docutils literal notranslate"><span class="pre">co_fastlocalnames[i]</span></code>.</p>
- <p>Note that <code class="docutils literal notranslate"><span class="pre">LOAD_CLOSURE</span></code> is effectively an alias for <code class="docutils literal notranslate"><span class="pre">LOAD_FAST</span></code>.
- It exists to keep bytecode a little more readable.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span><code class="docutils literal notranslate"><span class="pre">i</span></code> is no longer offset by the length of <code class="docutils literal notranslate"><span class="pre">co_varnames</span></code>.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_DEREF">
- <span class="sig-name descname"><span class="pre">LOAD_DEREF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_DEREF" title="Link to this definition">¶</a></dt>
- <dd><p>Loads the cell contained in slot <code class="docutils literal notranslate"><span class="pre">i</span></code> of the “fast locals” storage.
- Pushes a reference to the object the cell contains on the stack.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span><code class="docutils literal notranslate"><span class="pre">i</span></code> is no longer offset by the length of <a class="reference internal" href="../reference/datamodel.html#codeobject.co_varnames" title="codeobject.co_varnames"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_varnames</span></code></a>.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_FROM_DICT_OR_DEREF">
- <span class="sig-name descname"><span class="pre">LOAD_FROM_DICT_OR_DEREF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-LOAD_FROM_DICT_OR_DEREF" title="Link to this definition">¶</a></dt>
- <dd><p>Pops a mapping off the stack and looks up the name associated with
- slot <code class="docutils literal notranslate"><span class="pre">i</span></code> of the “fast locals” storage in this mapping.
- If the name is not found there, loads it from the cell contained in
- slot <code class="docutils literal notranslate"><span class="pre">i</span></code>, similar to <a class="reference internal" href="#opcode-LOAD_DEREF"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_DEREF</span></code></a>. This is used for loading
- free variables in class bodies (which previously used
- <code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_CLASSDEREF</span></code>) and in
- <a class="reference internal" href="../reference/executionmodel.html#annotation-scopes"><span class="std std-ref">annotation scopes</span></a> within class bodies.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-STORE_DEREF">
- <span class="sig-name descname"><span class="pre">STORE_DEREF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-STORE_DEREF" title="Link to this definition">¶</a></dt>
- <dd><p>Stores <code class="docutils literal notranslate"><span class="pre">STACK.pop()</span></code> into the cell contained in slot <code class="docutils literal notranslate"><span class="pre">i</span></code> of the “fast locals”
- storage.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span><code class="docutils literal notranslate"><span class="pre">i</span></code> is no longer offset by the length of <a class="reference internal" href="../reference/datamodel.html#codeobject.co_varnames" title="codeobject.co_varnames"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_varnames</span></code></a>.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-DELETE_DEREF">
- <span class="sig-name descname"><span class="pre">DELETE_DEREF</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">i</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-DELETE_DEREF" title="Link to this definition">¶</a></dt>
- <dd><p>Empties the cell contained in slot <code class="docutils literal notranslate"><span class="pre">i</span></code> of the “fast locals” storage.
- Used by the <a class="reference internal" href="../reference/simple_stmts.html#del"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">del</span></code></a> statement.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.2.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span><code class="docutils literal notranslate"><span class="pre">i</span></code> is no longer offset by the length of <a class="reference internal" href="../reference/datamodel.html#codeobject.co_varnames" title="codeobject.co_varnames"><code class="xref py py-attr docutils literal notranslate"><span class="pre">co_varnames</span></code></a>.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-COPY_FREE_VARS">
- <span class="sig-name descname"><span class="pre">COPY_FREE_VARS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">n</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-COPY_FREE_VARS" title="Link to this definition">¶</a></dt>
- <dd><p>Copies the <code class="docutils literal notranslate"><span class="pre">n</span></code> free variables from the closure into the frame.
- Removes the need for special code on the caller’s side when calling
- closures.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RAISE_VARARGS">
- <span class="sig-name descname"><span class="pre">RAISE_VARARGS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">argc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-RAISE_VARARGS" title="Link to this definition">¶</a></dt>
- <dd><p>Raises an exception using one of the 3 forms of the <code class="docutils literal notranslate"><span class="pre">raise</span></code> statement,
- depending on the value of <em>argc</em>:</p>
- <ul class="simple">
- <li><p>0: <code class="docutils literal notranslate"><span class="pre">raise</span></code> (re-raise previous exception)</p></li>
- <li><p>1: <code class="docutils literal notranslate"><span class="pre">raise</span> <span class="pre">STACK[-1]</span></code> (raise exception instance or type at <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>)</p></li>
- <li><p>2: <code class="docutils literal notranslate"><span class="pre">raise</span> <span class="pre">STACK[-2]</span> <span class="pre">from</span> <span class="pre">STACK[-1]</span></code> (raise exception instance or type at
- <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> with <code class="docutils literal notranslate"><span class="pre">__cause__</span></code> set to <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>)</p></li>
- </ul>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CALL">
- <span class="sig-name descname"><span class="pre">CALL</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">argc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-CALL" title="Link to this definition">¶</a></dt>
- <dd><p>Calls a callable object with the number of arguments specified by <code class="docutils literal notranslate"><span class="pre">argc</span></code>,
- including the named arguments specified by the preceding
- <a class="reference internal" href="#opcode-KW_NAMES"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">KW_NAMES</span></code></a>, if any.
- On the stack are (in ascending order), either:</p>
- <ul class="simple">
- <li><p>NULL</p></li>
- <li><p>The callable</p></li>
- <li><p>The positional arguments</p></li>
- <li><p>The named arguments</p></li>
- </ul>
- <p>or:</p>
- <ul class="simple">
- <li><p>The callable</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">self</span></code></p></li>
- <li><p>The remaining positional arguments</p></li>
- <li><p>The named arguments</p></li>
- </ul>
- <p><code class="docutils literal notranslate"><span class="pre">argc</span></code> is the total of the positional and named arguments, excluding
- <code class="docutils literal notranslate"><span class="pre">self</span></code> when a <code class="docutils literal notranslate"><span class="pre">NULL</span></code> is not present.</p>
- <p><code class="docutils literal notranslate"><span class="pre">CALL</span></code> pops all arguments and the callable object off the stack,
- calls the callable object with those arguments, and pushes the return value
- returned by the callable object.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CALL_FUNCTION_EX">
- <span class="sig-name descname"><span class="pre">CALL_FUNCTION_EX</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">flags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-CALL_FUNCTION_EX" title="Link to this definition">¶</a></dt>
- <dd><p>Calls a callable object with variable set of positional and keyword
- arguments. If the lowest bit of <em>flags</em> is set, the top of the stack
- contains a mapping object containing additional keyword arguments.
- Before the callable is called, the mapping object and iterable object
- are each “unpacked” and their contents passed in as keyword and
- positional arguments respectively.
- <code class="docutils literal notranslate"><span class="pre">CALL_FUNCTION_EX</span></code> pops all arguments and the callable object off the stack,
- calls the callable object with those arguments, and pushes the return value
- returned by the callable object.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.6.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-PUSH_NULL">
- <span class="sig-name descname"><span class="pre">PUSH_NULL</span></span><a class="headerlink" href="#opcode-PUSH_NULL" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a <code class="docutils literal notranslate"><span class="pre">NULL</span></code> to the stack.
- Used in the call sequence to match the <code class="docutils literal notranslate"><span class="pre">NULL</span></code> pushed by
- <a class="reference internal" href="#opcode-LOAD_METHOD"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">LOAD_METHOD</span></code></a> for non-method calls.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-KW_NAMES">
- <span class="sig-name descname"><span class="pre">KW_NAMES</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">consti</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-KW_NAMES" title="Link to this definition">¶</a></dt>
- <dd><p>Prefixes <a class="reference internal" href="#opcode-CALL"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CALL</span></code></a>.
- Stores a reference to <code class="docutils literal notranslate"><span class="pre">co_consts[consti]</span></code> into an internal variable
- for use by <a class="reference internal" href="#opcode-CALL"><code class="xref std std-opcode docutils literal notranslate"><span class="pre">CALL</span></code></a>. <code class="docutils literal notranslate"><span class="pre">co_consts[consti]</span></code> must be a tuple of strings.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MAKE_FUNCTION">
- <span class="sig-name descname"><span class="pre">MAKE_FUNCTION</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">flags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-MAKE_FUNCTION" title="Link to this definition">¶</a></dt>
- <dd><p>Pushes a new function object on the stack. From bottom to top, the consumed
- stack must consist of values if the argument carries a specified flag value</p>
- <ul class="simple">
- <li><p><code class="docutils literal notranslate"><span class="pre">0x01</span></code> a tuple of default values for positional-only and
- positional-or-keyword parameters in positional order</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">0x02</span></code> a dictionary of keyword-only parameters’ default values</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">0x04</span></code> a tuple of strings containing parameters’ annotations</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">0x08</span></code> a tuple containing cells for free variables, making a closure</p></li>
- <li><p>the code associated with the function (at <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>)</p></li>
- </ul>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.10: </span>Flag value <code class="docutils literal notranslate"><span class="pre">0x04</span></code> is a tuple of strings instead of dictionary</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Qualified name at <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> was removed.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-BUILD_SLICE">
- <span class="sig-name descname"><span class="pre">BUILD_SLICE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">argc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-BUILD_SLICE" title="Link to this definition">¶</a></dt>
- <dd><p id="index-1">Pushes a slice object on the stack. <em>argc</em> must be 2 or 3. If it is 2, implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">end</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">slice</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">))</span>
- </pre></div>
- </div>
- <p>if it is 3, implements:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">step</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">end</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">slice</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">))</span>
- </pre></div>
- </div>
- <p>See the <a class="reference internal" href="functions.html#slice" title="slice"><code class="xref py py-func docutils literal notranslate"><span class="pre">slice()</span></code></a> built-in function for more information.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-EXTENDED_ARG">
- <span class="sig-name descname"><span class="pre">EXTENDED_ARG</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">ext</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-EXTENDED_ARG" title="Link to this definition">¶</a></dt>
- <dd><p>Prefixes any opcode which has an argument too big to fit into the default one
- byte. <em>ext</em> holds an additional byte which act as higher bits in the argument.
- For each opcode, at most three prefixal <code class="docutils literal notranslate"><span class="pre">EXTENDED_ARG</span></code> are allowed, forming
- an argument from two-byte to four-byte.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-FORMAT_VALUE">
- <span class="sig-name descname"><span class="pre">FORMAT_VALUE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">flags</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-FORMAT_VALUE" title="Link to this definition">¶</a></dt>
- <dd><p>Used for implementing formatted literal strings (f-strings). Pops
- an optional <em>fmt_spec</em> from the stack, then a required <em>value</em>.
- <em>flags</em> is interpreted as follows:</p>
- <ul class="simple">
- <li><p><code class="docutils literal notranslate"><span class="pre">(flags</span> <span class="pre">&</span> <span class="pre">0x03)</span> <span class="pre">==</span> <span class="pre">0x00</span></code>: <em>value</em> is formatted as-is.</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">(flags</span> <span class="pre">&</span> <span class="pre">0x03)</span> <span class="pre">==</span> <span class="pre">0x01</span></code>: call <a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal notranslate"><span class="pre">str()</span></code></a> on <em>value</em> before
- formatting it.</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">(flags</span> <span class="pre">&</span> <span class="pre">0x03)</span> <span class="pre">==</span> <span class="pre">0x02</span></code>: call <a class="reference internal" href="functions.html#repr" title="repr"><code class="xref py py-func docutils literal notranslate"><span class="pre">repr()</span></code></a> on <em>value</em> before
- formatting it.</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">(flags</span> <span class="pre">&</span> <span class="pre">0x03)</span> <span class="pre">==</span> <span class="pre">0x03</span></code>: call <a class="reference internal" href="functions.html#ascii" title="ascii"><code class="xref py py-func docutils literal notranslate"><span class="pre">ascii()</span></code></a> on <em>value</em> before
- formatting it.</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">(flags</span> <span class="pre">&</span> <span class="pre">0x04)</span> <span class="pre">==</span> <span class="pre">0x04</span></code>: pop <em>fmt_spec</em> from the stack and use
- it, else use an empty <em>fmt_spec</em>.</p></li>
- </ul>
- <p>Formatting is performed using <a class="reference internal" href="../c-api/object.html#c.PyObject_Format" title="PyObject_Format"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyObject_Format()</span></code></a>. The
- result is pushed on the stack.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.6.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-MATCH_CLASS">
- <span class="sig-name descname"><span class="pre">MATCH_CLASS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">count</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-MATCH_CLASS" title="Link to this definition">¶</a></dt>
- <dd><p><code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> is a tuple of keyword attribute names, <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> is the class
- being matched against, and <code class="docutils literal notranslate"><span class="pre">STACK[-3]</span></code> is the match subject. <em>count</em> is the
- number of positional sub-patterns.</p>
- <p>Pop <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>, <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code>, and <code class="docutils literal notranslate"><span class="pre">STACK[-3]</span></code>. If <code class="docutils literal notranslate"><span class="pre">STACK[-3]</span></code> is an
- instance of <code class="docutils literal notranslate"><span class="pre">STACK[-2]</span></code> and has the positional and keyword attributes
- required by <em>count</em> and <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code>, push a tuple of extracted attributes.
- Otherwise, push <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.10.</span></p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>Previously, this instruction also pushed a boolean value indicating
- success (<code class="docutils literal notranslate"><span class="pre">True</span></code>) or failure (<code class="docutils literal notranslate"><span class="pre">False</span></code>).</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RESUME">
- <span class="sig-name descname"><span class="pre">RESUME</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">where</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-RESUME" title="Link to this definition">¶</a></dt>
- <dd><p>A no-op. Performs internal tracing, debugging and optimization checks.</p>
- <p>The <code class="docutils literal notranslate"><span class="pre">where</span></code> operand marks where the <code class="docutils literal notranslate"><span class="pre">RESUME</span></code> occurs:</p>
- <ul class="simple">
- <li><p><code class="docutils literal notranslate"><span class="pre">0</span></code> The start of a function, which is neither a generator, coroutine
- nor an async generator</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">1</span></code> After a <code class="docutils literal notranslate"><span class="pre">yield</span></code> expression</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">2</span></code> After a <code class="docutils literal notranslate"><span class="pre">yield</span> <span class="pre">from</span></code> expression</p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">3</span></code> After an <code class="docutils literal notranslate"><span class="pre">await</span></code> expression</p></li>
- </ul>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-RETURN_GENERATOR">
- <span class="sig-name descname"><span class="pre">RETURN_GENERATOR</span></span><a class="headerlink" href="#opcode-RETURN_GENERATOR" title="Link to this definition">¶</a></dt>
- <dd><p>Create a generator, coroutine, or async generator from the current frame.
- Used as first opcode of in code object for the above mentioned callables.
- Clear the current frame and return the newly created generator.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SEND">
- <span class="sig-name descname"><span class="pre">SEND</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">delta</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SEND" title="Link to this definition">¶</a></dt>
- <dd><p>Equivalent to <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span> <span class="pre">=</span> <span class="pre">STACK[-2].send(STACK[-1])</span></code>. Used in <code class="docutils literal notranslate"><span class="pre">yield</span> <span class="pre">from</span></code>
- and <code class="docutils literal notranslate"><span class="pre">await</span></code> statements.</p>
- <p>If the call raises <a class="reference internal" href="exceptions.html#StopIteration" title="StopIteration"><code class="xref py py-exc docutils literal notranslate"><span class="pre">StopIteration</span></code></a>, pop the top value from the stack,
- push the exception’s <code class="docutils literal notranslate"><span class="pre">value</span></code> attribute, and increment the bytecode counter
- by <em>delta</em>.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.11.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-HAVE_ARGUMENT">
- <span class="sig-name descname"><span class="pre">HAVE_ARGUMENT</span></span><a class="headerlink" href="#opcode-HAVE_ARGUMENT" title="Link to this definition">¶</a></dt>
- <dd><p>This is not really an opcode. It identifies the dividing line between
- opcodes in the range [0,255] which don’t use their argument and those
- that do (<code class="docutils literal notranslate"><span class="pre"><</span> <span class="pre">HAVE_ARGUMENT</span></code> and <code class="docutils literal notranslate"><span class="pre">>=</span> <span class="pre">HAVE_ARGUMENT</span></code>, respectively).</p>
- <p>If your application uses pseudo instructions, use the <a class="reference internal" href="#dis.hasarg" title="dis.hasarg"><code class="xref py py-data docutils literal notranslate"><span class="pre">hasarg</span></code></a>
- collection instead.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6: </span>Now every instruction has an argument, but opcodes <code class="docutils literal notranslate"><span class="pre"><</span> <span class="pre">HAVE_ARGUMENT</span></code>
- ignore it. Before, only opcodes <code class="docutils literal notranslate"><span class="pre">>=</span> <span class="pre">HAVE_ARGUMENT</span></code> had an argument.</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>Pseudo instructions were added to the <a class="reference internal" href="#module-dis" title="dis: Disassembler for Python bytecode."><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code></a> module, and for them
- it is not true that comparison with <code class="docutils literal notranslate"><span class="pre">HAVE_ARGUMENT</span></code> indicates whether
- they use their arg.</p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CALL_INTRINSIC_1">
- <span class="sig-name descname"><span class="pre">CALL_INTRINSIC_1</span></span><a class="headerlink" href="#opcode-CALL_INTRINSIC_1" title="Link to this definition">¶</a></dt>
- <dd><p>Calls an intrinsic function with one argument. Passes <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> as the
- argument and sets <code class="docutils literal notranslate"><span class="pre">STACK[-1]</span></code> to the result. Used to implement
- functionality that is not performance critical.</p>
- <p>The operand determines which intrinsic function is called:</p>
- <table class="docutils align-default">
- <thead>
- <tr class="row-odd"><th class="head"><p>Operand</p></th>
- <th class="head"><p>Description</p></th>
- </tr>
- </thead>
- <tbody>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_1_INVALID</span></code></p></td>
- <td><p>Not valid</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_PRINT</span></code></p></td>
- <td><p>Prints the argument to standard
- out. Used in the REPL.</p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_IMPORT_STAR</span></code></p></td>
- <td><p>Performs <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">*</span></code> for the
- named module.</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_STOPITERATION_ERROR</span></code></p></td>
- <td><p>Extracts the return value from a
- <code class="docutils literal notranslate"><span class="pre">StopIteration</span></code> exception.</p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_ASYNC_GEN_WRAP</span></code></p></td>
- <td><p>Wraps an aync generator value</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_UNARY_POSITIVE</span></code></p></td>
- <td><p>Performs the unary <code class="docutils literal notranslate"><span class="pre">+</span></code>
- operation</p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_LIST_TO_TUPLE</span></code></p></td>
- <td><p>Converts a list to a tuple</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_TYPEVAR</span></code></p></td>
- <td><p>Creates a <a class="reference internal" href="typing.html#typing.TypeVar" title="typing.TypeVar"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.TypeVar</span></code></a></p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_PARAMSPEC</span></code></p></td>
- <td><p>Creates a
- <a class="reference internal" href="typing.html#typing.ParamSpec" title="typing.ParamSpec"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.ParamSpec</span></code></a></p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_TYPEVARTUPLE</span></code></p></td>
- <td><p>Creates a
- <a class="reference internal" href="typing.html#typing.TypeVarTuple" title="typing.TypeVarTuple"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.TypeVarTuple</span></code></a></p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_SUBSCRIPT_GENERIC</span></code></p></td>
- <td><p>Returns <a class="reference internal" href="typing.html#typing.Generic" title="typing.Generic"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.Generic</span></code></a>
- subscripted with the argument</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_TYPEALIAS</span></code></p></td>
- <td><p>Creates a
- <a class="reference internal" href="typing.html#typing.TypeAliasType" title="typing.TypeAliasType"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.TypeAliasType</span></code></a>;
- used in the <a class="reference internal" href="../reference/simple_stmts.html#type"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">type</span></code></a>
- statement. The argument is a tuple
- of the type alias’s name,
- type parameters, and value.</p></td>
- </tr>
- </tbody>
- </table>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-CALL_INTRINSIC_2">
- <span class="sig-name descname"><span class="pre">CALL_INTRINSIC_2</span></span><a class="headerlink" href="#opcode-CALL_INTRINSIC_2" title="Link to this definition">¶</a></dt>
- <dd><p>Calls an intrinsic function with two arguments. Used to implement functionality
- that is not performance critical:</p>
- <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">arg2</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">arg1</span> <span class="o">=</span> <span class="n">STACK</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
- <span class="n">result</span> <span class="o">=</span> <span class="n">intrinsic2</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">)</span>
- <span class="n">STACK</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
- </pre></div>
- </div>
- <p>The operand determines which intrinsic function is called:</p>
- <table class="docutils align-default">
- <thead>
- <tr class="row-odd"><th class="head"><p>Operand</p></th>
- <th class="head"><p>Description</p></th>
- </tr>
- </thead>
- <tbody>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_2_INVALID</span></code></p></td>
- <td><p>Not valid</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_PREP_RERAISE_STAR</span></code></p></td>
- <td><p>Calculates the
- <a class="reference internal" href="exceptions.html#ExceptionGroup" title="ExceptionGroup"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ExceptionGroup</span></code></a> to raise
- from a <code class="docutils literal notranslate"><span class="pre">try-except*</span></code>.</p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_TYPEVAR_WITH_BOUND</span></code></p></td>
- <td><p>Creates a <a class="reference internal" href="typing.html#typing.TypeVar" title="typing.TypeVar"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.TypeVar</span></code></a>
- with a bound.</p></td>
- </tr>
- <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_TYPEVAR_WITH_CONSTRAINTS</span></code></p></td>
- <td><p>Creates a
- <a class="reference internal" href="typing.html#typing.TypeVar" title="typing.TypeVar"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.TypeVar</span></code></a> with
- constraints.</p></td>
- </tr>
- <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">INTRINSIC_SET_FUNCTION_TYPE_PARAMS</span></code></p></td>
- <td><p>Sets the <code class="docutils literal notranslate"><span class="pre">__type_params__</span></code>
- attribute of a function.</p></td>
- </tr>
- </tbody>
- </table>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <p><strong>Pseudo-instructions</strong></p>
- <p>These opcodes do not appear in Python bytecode. They are used by the compiler
- but are replaced by real opcodes or removed before bytecode is generated.</p>
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SETUP_FINALLY">
- <span class="sig-name descname"><span class="pre">SETUP_FINALLY</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">target</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SETUP_FINALLY" title="Link to this definition">¶</a></dt>
- <dd><p>Set up an exception handler for the following code block. If an exception
- occurs, the value stack level is restored to its current state and control
- is transferred to the exception handler at <code class="docutils literal notranslate"><span class="pre">target</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SETUP_CLEANUP">
- <span class="sig-name descname"><span class="pre">SETUP_CLEANUP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">target</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SETUP_CLEANUP" title="Link to this definition">¶</a></dt>
- <dd><p>Like <code class="docutils literal notranslate"><span class="pre">SETUP_FINALLY</span></code>, but in case of an exception also pushes the last
- instruction (<code class="docutils literal notranslate"><span class="pre">lasti</span></code>) to the stack so that <code class="docutils literal notranslate"><span class="pre">RERAISE</span></code> can restore it.
- If an exception occurs, the value stack level and the last instruction on
- the frame are restored to their current state, and control is transferred
- to the exception handler at <code class="docutils literal notranslate"><span class="pre">target</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-SETUP_WITH">
- <span class="sig-name descname"><span class="pre">SETUP_WITH</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">target</span></em><span class="sig-paren">)</span><a class="headerlink" href="#opcode-SETUP_WITH" title="Link to this definition">¶</a></dt>
- <dd><p>Like <code class="docutils literal notranslate"><span class="pre">SETUP_CLEANUP</span></code>, but in case of an exception one more item is popped
- from the stack before control is transferred to the exception handler at
- <code class="docutils literal notranslate"><span class="pre">target</span></code>.</p>
- <p>This variant is used in <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> and <a class="reference internal" href="../reference/compound_stmts.html#async-with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">with</span></code></a>
- constructs, which push the return value of the context manager’s
- <a class="reference internal" href="../reference/datamodel.html#object.__enter__" title="object.__enter__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__enter__()</span></code></a> or <a class="reference internal" href="../reference/datamodel.html#object.__aenter__" title="object.__aenter__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__aenter__()</span></code></a> to the stack.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-POP_BLOCK">
- <span class="sig-name descname"><span class="pre">POP_BLOCK</span></span><a class="headerlink" href="#opcode-POP_BLOCK" title="Link to this definition">¶</a></dt>
- <dd><p>Marks the end of the code block associated with the last <code class="docutils literal notranslate"><span class="pre">SETUP_FINALLY</span></code>,
- <code class="docutils literal notranslate"><span class="pre">SETUP_CLEANUP</span></code> or <code class="docutils literal notranslate"><span class="pre">SETUP_WITH</span></code>.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-JUMP">
- <span class="sig-name descname"><span class="pre">JUMP</span></span><a class="headerlink" href="#opcode-JUMP" title="Link to this definition">¶</a></dt>
- <dd></dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-JUMP_NO_INTERRUPT">
- <span class="sig-name descname"><span class="pre">JUMP_NO_INTERRUPT</span></span><a class="headerlink" href="#opcode-JUMP_NO_INTERRUPT" title="Link to this definition">¶</a></dt>
- <dd><p>Undirected relative jump instructions which are replaced by their
- directed (forward/backward) counterparts by the assembler.</p>
- </dd></dl>
-
- <dl class="std opcode">
- <dt class="sig sig-object std" id="opcode-LOAD_METHOD">
- <span class="sig-name descname"><span class="pre">LOAD_METHOD</span></span><a class="headerlink" href="#opcode-LOAD_METHOD" title="Link to this definition">¶</a></dt>
- <dd><p>Optimized unbound method lookup. Emitted as a <code class="docutils literal notranslate"><span class="pre">LOAD_ATTR</span></code> opcode
- with a flag set in the arg.</p>
- </dd></dl>
-
- </section>
- <section id="opcode-collections">
- <span id="id1"></span><h2>Opcode collections<a class="headerlink" href="#opcode-collections" title="Link to this heading">¶</a></h2>
- <p>These collections are provided for automatic introspection of bytecode
- instructions:</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.12: </span>The collections now contain pseudo instructions and instrumented
- instructions as well. These are opcodes with values <code class="docutils literal notranslate"><span class="pre">>=</span> <span class="pre">MIN_PSEUDO_OPCODE</span></code>
- and <code class="docutils literal notranslate"><span class="pre">>=</span> <span class="pre">MIN_INSTRUMENTED_OPCODE</span></code>.</p>
- </div>
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.opname">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">opname</span></span><a class="headerlink" href="#dis.opname" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of operation names, indexable using the bytecode.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.opmap">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">opmap</span></span><a class="headerlink" href="#dis.opmap" title="Link to this definition">¶</a></dt>
- <dd><p>Dictionary mapping operation names to bytecodes.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.cmp_op">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">cmp_op</span></span><a class="headerlink" href="#dis.cmp_op" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of all compare operation names.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasarg">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasarg</span></span><a class="headerlink" href="#dis.hasarg" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that use their argument.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasconst">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasconst</span></span><a class="headerlink" href="#dis.hasconst" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that access a constant.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasfree">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasfree</span></span><a class="headerlink" href="#dis.hasfree" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that access a free variable. ‘free’ in this
- context refers to names in the current scope that are referenced by inner
- scopes or names in outer scopes that are referenced from this scope. It does
- <em>not</em> include references to global or builtin scopes.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasname">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasname</span></span><a class="headerlink" href="#dis.hasname" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that access an attribute by name.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasjrel">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasjrel</span></span><a class="headerlink" href="#dis.hasjrel" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that have a relative jump target.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasjabs">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasjabs</span></span><a class="headerlink" href="#dis.hasjabs" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that have an absolute jump target.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.haslocal">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">haslocal</span></span><a class="headerlink" href="#dis.haslocal" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that access a local variable.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hascompare">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hascompare</span></span><a class="headerlink" href="#dis.hascompare" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes of Boolean operations.</p>
- </dd></dl>
-
- <dl class="py data">
- <dt class="sig sig-object py" id="dis.hasexc">
- <span class="sig-prename descclassname"><span class="pre">dis.</span></span><span class="sig-name descname"><span class="pre">hasexc</span></span><a class="headerlink" href="#dis.hasexc" title="Link to this definition">¶</a></dt>
- <dd><p>Sequence of bytecodes that set an exception handler.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.12.</span></p>
- </div>
- </dd></dl>
-
- </section>
- </section>
-
-
- <div class="clearer"></div>
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="../contents.html">Table of Contents</a></h3>
- <ul>
- <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code> — Disassembler for Python bytecode</a><ul>
- <li><a class="reference internal" href="#command-line-interface">Command-line interface</a></li>
- <li><a class="reference internal" href="#bytecode-analysis">Bytecode analysis</a></li>
- <li><a class="reference internal" href="#analysis-functions">Analysis functions</a></li>
- <li><a class="reference internal" href="#python-bytecode-instructions">Python Bytecode Instructions</a></li>
- <li><a class="reference internal" href="#opcode-collections">Opcode collections</a></li>
- </ul>
- </li>
- </ul>
-
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="compileall.html"
- title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">compileall</span></code> — Byte-compile Python libraries</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="pickletools.html"
- title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pickletools</span></code> — Tools for pickle developers</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/library/dis.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 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="pickletools.html" title="pickletools — Tools for pickle developers"
- >next</a> |</li>
- <li class="right" >
- <a href="compileall.html" title="compileall — Byte-compile Python libraries"
- >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.12.3 Documentation</a> »
- </li>
-
- <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
- <li class="nav-item nav-item-2"><a href="language.html" >Python Language Services</a> »</li>
- <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">dis</span></code> — Disassembler for Python bytecode</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-2024, 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 09, 2024 (13:47 UTC).
-
- <a href="/bugs.html">Found a bug</a>?
-
- <br />
-
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
- </div>
-
- </body>
- </html>
|