1801 lines
130 KiB
HTML
1801 lines
130 KiB
HTML
|
|
|||
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" />
|
|||
|
<title>inspect — Inspect live objects — Python 3.7.4 documentation</title>
|
|||
|
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
|||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|||
|
|
|||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/language_data.js"></script>
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
|||
|
|
|||
|
<link rel="search" type="application/opensearchdescription+xml"
|
|||
|
title="Search within Python 3.7.4 documentation"
|
|||
|
href="../_static/opensearch.xml"/>
|
|||
|
<link rel="author" title="About these documents" href="../about.html" />
|
|||
|
<link rel="index" title="Index" href="../genindex.html" />
|
|||
|
<link rel="search" title="Search" href="../search.html" />
|
|||
|
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
|||
|
<link rel="next" title="site — Site-specific configuration hook" href="site.html" />
|
|||
|
<link rel="prev" title="gc — Garbage Collector interface" href="gc.html" />
|
|||
|
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
|||
|
<link rel="canonical" href="https://docs.python.org/3/library/inspect.html" />
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/switchers.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen {
|
|||
|
table.full-width-table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
</head><body>
|
|||
|
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
accesskey="I">index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="site.html" title="site — Site-specific configuration hook"
|
|||
|
accesskey="N">next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="gc.html" title="gc — Garbage Collector interface"
|
|||
|
accesskey="P">previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="python.html" accesskey="U">Python Runtime Services</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="document">
|
|||
|
<div class="documentwrapper">
|
|||
|
<div class="bodywrapper">
|
|||
|
<div class="body" role="main">
|
|||
|
|
|||
|
<div class="section" id="module-inspect">
|
|||
|
<span id="inspect-inspect-live-objects"></span><h1><a class="reference internal" href="#module-inspect" title="inspect: Extract information and source code from live objects."><code class="xref py py-mod docutils literal notranslate"><span class="pre">inspect</span></code></a> — Inspect live objects<a class="headerlink" href="#module-inspect" title="Permalink to this headline">¶</a></h1>
|
|||
|
<p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.7/Lib/inspect.py">Lib/inspect.py</a></p>
|
|||
|
<hr class="docutils" />
|
|||
|
<p>The <a class="reference internal" href="#module-inspect" title="inspect: Extract information and source code from live objects."><code class="xref py py-mod docutils literal notranslate"><span class="pre">inspect</span></code></a> module provides several useful functions to help get
|
|||
|
information about live objects such as modules, classes, methods, functions,
|
|||
|
tracebacks, frame objects, and code objects. For example, it can help you
|
|||
|
examine the contents of a class, retrieve the source code of a method, extract
|
|||
|
and format the argument list for a function, or get all the information you need
|
|||
|
to display a detailed traceback.</p>
|
|||
|
<p>There are four main kinds of services provided by this module: type checking,
|
|||
|
getting source code, inspecting classes and functions, and examining the
|
|||
|
interpreter stack.</p>
|
|||
|
<div class="section" id="types-and-members">
|
|||
|
<span id="inspect-types"></span><h2>Types and members<a class="headerlink" href="#types-and-members" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>The <a class="reference internal" href="#inspect.getmembers" title="inspect.getmembers"><code class="xref py py-func docutils literal notranslate"><span class="pre">getmembers()</span></code></a> function retrieves the members of an object such as a
|
|||
|
class or module. The functions whose names begin with “is” are mainly
|
|||
|
provided as convenient choices for the second argument to <a class="reference internal" href="#inspect.getmembers" title="inspect.getmembers"><code class="xref py py-func docutils literal notranslate"><span class="pre">getmembers()</span></code></a>.
|
|||
|
They also help you determine when you can expect to find the following special
|
|||
|
attributes:</p>
|
|||
|
<table class="docutils align-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 19%" />
|
|||
|
<col style="width: 33%" />
|
|||
|
<col style="width: 47%" />
|
|||
|
</colgroup>
|
|||
|
<thead>
|
|||
|
<tr class="row-odd"><th class="head"><p>Type</p></th>
|
|||
|
<th class="head"><p>Attribute</p></th>
|
|||
|
<th class="head"><p>Description</p></th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="row-even"><td><p>module</p></td>
|
|||
|
<td><p>__doc__</p></td>
|
|||
|
<td><p>documentation string</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__file__</p></td>
|
|||
|
<td><p>filename (missing for
|
|||
|
built-in modules)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>class</p></td>
|
|||
|
<td><p>__doc__</p></td>
|
|||
|
<td><p>documentation string</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>name with which this
|
|||
|
class was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__module__</p></td>
|
|||
|
<td><p>name of module in which
|
|||
|
this class was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>method</p></td>
|
|||
|
<td><p>__doc__</p></td>
|
|||
|
<td><p>documentation string</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>name with which this
|
|||
|
method was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__func__</p></td>
|
|||
|
<td><p>function object
|
|||
|
containing implementation
|
|||
|
of method</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__self__</p></td>
|
|||
|
<td><p>instance to which this
|
|||
|
method is bound, or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">None</span></code></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>function</p></td>
|
|||
|
<td><p>__doc__</p></td>
|
|||
|
<td><p>documentation string</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>name with which this
|
|||
|
function was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__code__</p></td>
|
|||
|
<td><p>code object containing
|
|||
|
compiled function
|
|||
|
<a class="reference internal" href="../glossary.html#term-bytecode"><span class="xref std std-term">bytecode</span></a></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__defaults__</p></td>
|
|||
|
<td><p>tuple of any default
|
|||
|
values for positional or
|
|||
|
keyword parameters</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__kwdefaults__</p></td>
|
|||
|
<td><p>mapping of any default
|
|||
|
values for keyword-only
|
|||
|
parameters</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__globals__</p></td>
|
|||
|
<td><p>global namespace in which
|
|||
|
this function was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__annotations__</p></td>
|
|||
|
<td><p>mapping of parameters
|
|||
|
names to annotations;
|
|||
|
<code class="docutils literal notranslate"><span class="pre">"return"</span></code> key is
|
|||
|
reserved for return
|
|||
|
annotations.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>traceback</p></td>
|
|||
|
<td><p>tb_frame</p></td>
|
|||
|
<td><p>frame object at this
|
|||
|
level</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>tb_lasti</p></td>
|
|||
|
<td><p>index of last attempted
|
|||
|
instruction in bytecode</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>tb_lineno</p></td>
|
|||
|
<td><p>current line number in
|
|||
|
Python source code</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>tb_next</p></td>
|
|||
|
<td><p>next inner traceback
|
|||
|
object (called by this
|
|||
|
level)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>frame</p></td>
|
|||
|
<td><p>f_back</p></td>
|
|||
|
<td><p>next outer frame object
|
|||
|
(this frame’s caller)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>f_builtins</p></td>
|
|||
|
<td><p>builtins namespace seen
|
|||
|
by this frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>f_code</p></td>
|
|||
|
<td><p>code object being
|
|||
|
executed in this frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>f_globals</p></td>
|
|||
|
<td><p>global namespace seen by
|
|||
|
this frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>f_lasti</p></td>
|
|||
|
<td><p>index of last attempted
|
|||
|
instruction in bytecode</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>f_lineno</p></td>
|
|||
|
<td><p>current line number in
|
|||
|
Python source code</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>f_locals</p></td>
|
|||
|
<td><p>local namespace seen by
|
|||
|
this frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>f_trace</p></td>
|
|||
|
<td><p>tracing function for this
|
|||
|
frame, or <code class="docutils literal notranslate"><span class="pre">None</span></code></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>code</p></td>
|
|||
|
<td><p>co_argcount</p></td>
|
|||
|
<td><p>number of arguments (not
|
|||
|
including keyword only
|
|||
|
arguments, * or **
|
|||
|
args)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_code</p></td>
|
|||
|
<td><p>string of raw compiled
|
|||
|
bytecode</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_cellvars</p></td>
|
|||
|
<td><p>tuple of names of cell
|
|||
|
variables (referenced by
|
|||
|
containing scopes)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_consts</p></td>
|
|||
|
<td><p>tuple of constants used
|
|||
|
in the bytecode</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_filename</p></td>
|
|||
|
<td><p>name of file in which
|
|||
|
this code object was
|
|||
|
created</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_firstlineno</p></td>
|
|||
|
<td><p>number of first line in
|
|||
|
Python source code</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_flags</p></td>
|
|||
|
<td><p>bitmap of <code class="docutils literal notranslate"><span class="pre">CO_*</span></code> flags,
|
|||
|
read more <a class="reference internal" href="#inspect-module-co-flags"><span class="std std-ref">here</span></a></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_lnotab</p></td>
|
|||
|
<td><p>encoded mapping of line
|
|||
|
numbers to bytecode
|
|||
|
indices</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_freevars</p></td>
|
|||
|
<td><p>tuple of names of free
|
|||
|
variables (referenced via
|
|||
|
a function’s closure)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_kwonlyargcount</p></td>
|
|||
|
<td><p>number of keyword only
|
|||
|
arguments (not including
|
|||
|
** arg)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_name</p></td>
|
|||
|
<td><p>name with which this code
|
|||
|
object was defined</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_names</p></td>
|
|||
|
<td><p>tuple of names of local
|
|||
|
variables</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_nlocals</p></td>
|
|||
|
<td><p>number of local variables</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>co_stacksize</p></td>
|
|||
|
<td><p>virtual machine stack
|
|||
|
space required</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>co_varnames</p></td>
|
|||
|
<td><p>tuple of names of
|
|||
|
arguments and local
|
|||
|
variables</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>generator</p></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>gi_frame</p></td>
|
|||
|
<td><p>frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>gi_running</p></td>
|
|||
|
<td><p>is the generator running?</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>gi_code</p></td>
|
|||
|
<td><p>code</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>gi_yieldfrom</p></td>
|
|||
|
<td><p>object being iterated by
|
|||
|
<code class="docutils literal notranslate"><span class="pre">yield</span> <span class="pre">from</span></code>, or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">None</span></code></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>coroutine</p></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>cr_await</p></td>
|
|||
|
<td><p>object being awaited on,
|
|||
|
or <code class="docutils literal notranslate"><span class="pre">None</span></code></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>cr_frame</p></td>
|
|||
|
<td><p>frame</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>cr_running</p></td>
|
|||
|
<td><p>is the coroutine running?</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>cr_code</p></td>
|
|||
|
<td><p>code</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>cr_origin</p></td>
|
|||
|
<td><p>where coroutine was
|
|||
|
created, or <code class="docutils literal notranslate"><span class="pre">None</span></code>. See
|
|||
|
<a class="reference internal" href="sys.html#sys.set_coroutine_origin_tracking_depth" title="sys.set_coroutine_origin_tracking_depth"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.set_coroutine_origin_tracking_depth()</span></code></a></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>builtin</p></td>
|
|||
|
<td><p>__doc__</p></td>
|
|||
|
<td><p>documentation string</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__name__</p></td>
|
|||
|
<td><p>original name of this
|
|||
|
function or method</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td></td>
|
|||
|
<td><p>__qualname__</p></td>
|
|||
|
<td><p>qualified name</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td></td>
|
|||
|
<td><p>__self__</p></td>
|
|||
|
<td><p>instance to which a
|
|||
|
method is bound, or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">None</span></code></p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Add <code class="docutils literal notranslate"><span class="pre">__qualname__</span></code> and <code class="docutils literal notranslate"><span class="pre">gi_yieldfrom</span></code> attributes to generators.</p>
|
|||
|
<p>The <code class="docutils literal notranslate"><span class="pre">__name__</span></code> attribute of generators is now set from the function
|
|||
|
name, instead of the code name, and it can now be modified.</p>
|
|||
|
</div>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.7: </span>Add <code class="docutils literal notranslate"><span class="pre">cr_origin</span></code> attribute to coroutines.</p>
|
|||
|
</div>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getmembers">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getmembers</code><span class="sig-paren">(</span><em>object</em><span class="optional">[</span>, <em>predicate</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getmembers" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return all the members of an object in a list of (name, value) pairs sorted by
|
|||
|
name. If the optional <em>predicate</em> argument is supplied, only members for which
|
|||
|
the predicate returns a true value are included.</p>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p><a class="reference internal" href="#inspect.getmembers" title="inspect.getmembers"><code class="xref py py-func docutils literal notranslate"><span class="pre">getmembers()</span></code></a> will only return class attributes defined in the
|
|||
|
metaclass when the argument is a class and those attributes have been
|
|||
|
listed in the metaclass’ custom <a class="reference internal" href="../reference/datamodel.html#object.__dir__" title="object.__dir__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__dir__()</span></code></a>.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getmodulename">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getmodulename</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getmodulename" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return the name of the module named by the file <em>path</em>, without including the
|
|||
|
names of enclosing packages. The file extension is checked against all of
|
|||
|
the entries in <a class="reference internal" href="importlib.html#importlib.machinery.all_suffixes" title="importlib.machinery.all_suffixes"><code class="xref py py-func docutils literal notranslate"><span class="pre">importlib.machinery.all_suffixes()</span></code></a>. If it matches,
|
|||
|
the final path component is returned with the extension removed.
|
|||
|
Otherwise, <code class="docutils literal notranslate"><span class="pre">None</span></code> is returned.</p>
|
|||
|
<p>Note that this function <em>only</em> returns a meaningful name for actual
|
|||
|
Python modules - paths that potentially refer to Python packages will
|
|||
|
still return <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.3: </span>The function is based directly on <a class="reference internal" href="importlib.html#module-importlib" title="importlib: The implementation of the import machinery."><code class="xref py py-mod docutils literal notranslate"><span class="pre">importlib</span></code></a>.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.ismodule">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">ismodule</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.ismodule" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a module.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isclass">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isclass</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isclass" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a class, whether built-in or created in Python
|
|||
|
code.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.ismethod">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">ismethod</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.ismethod" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a bound method written in Python.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isfunction">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isfunction</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isfunction" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a Python function, which includes functions
|
|||
|
created by a <a class="reference internal" href="../glossary.html#term-lambda"><span class="xref std std-term">lambda</span></a> expression.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isgeneratorfunction">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isgeneratorfunction</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isgeneratorfunction" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a Python generator function.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isgenerator">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isgenerator</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isgenerator" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a generator.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.iscoroutinefunction">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">iscoroutinefunction</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.iscoroutinefunction" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a <a class="reference internal" href="../glossary.html#term-coroutine-function"><span class="xref std std-term">coroutine function</span></a>
|
|||
|
(a function defined with an <a class="reference internal" href="../reference/compound_stmts.html#async-def"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">def</span></code></a> syntax).</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.iscoroutine">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">iscoroutine</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.iscoroutine" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a <a class="reference internal" href="../glossary.html#term-coroutine"><span class="xref std std-term">coroutine</span></a> created by an
|
|||
|
<a class="reference internal" href="../reference/compound_stmts.html#async-def"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">def</span></code></a> function.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isawaitable">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isawaitable</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isawaitable" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object can be used in <a class="reference internal" href="../reference/expressions.html#await"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">await</span></code></a> expression.</p>
|
|||
|
<p>Can also be used to distinguish generator-based coroutines from regular
|
|||
|
generators:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">gen</span><span class="p">():</span>
|
|||
|
<span class="k">yield</span>
|
|||
|
<span class="nd">@types</span><span class="o">.</span><span class="n">coroutine</span>
|
|||
|
<span class="k">def</span> <span class="nf">gen_coro</span><span class="p">():</span>
|
|||
|
<span class="k">yield</span>
|
|||
|
|
|||
|
<span class="k">assert</span> <span class="ow">not</span> <span class="n">isawaitable</span><span class="p">(</span><span class="n">gen</span><span class="p">())</span>
|
|||
|
<span class="k">assert</span> <span class="n">isawaitable</span><span class="p">(</span><span class="n">gen_coro</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>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isasyncgenfunction">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isasyncgenfunction</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isasyncgenfunction" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is an <a class="reference internal" href="../glossary.html#term-asynchronous-generator"><span class="xref std std-term">asynchronous generator</span></a> function,
|
|||
|
for example:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">async</span> <span class="k">def</span> <span class="nf">agen</span><span class="p">():</span>
|
|||
|
<span class="gp">... </span> <span class="k">yield</span> <span class="mi">1</span>
|
|||
|
<span class="gp">...</span>
|
|||
|
<span class="gp">>>> </span><span class="n">inspect</span><span class="o">.</span><span class="n">isasyncgenfunction</span><span class="p">(</span><span class="n">agen</span><span class="p">)</span>
|
|||
|
<span class="go">True</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.6.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isasyncgen">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isasyncgen</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isasyncgen" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is an <a class="reference internal" href="../glossary.html#term-asynchronous-generator-iterator"><span class="xref std std-term">asynchronous generator iterator</span></a>
|
|||
|
created by an <a class="reference internal" href="../glossary.html#term-asynchronous-generator"><span class="xref std std-term">asynchronous generator</span></a> function.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.6.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.istraceback">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">istraceback</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.istraceback" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a traceback.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isframe">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isframe</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isframe" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a frame.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.iscode">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">iscode</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.iscode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a code.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isbuiltin">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isbuiltin</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isbuiltin" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a built-in function or a bound built-in method.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isroutine">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isroutine</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isroutine" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a user-defined or built-in function or method.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isabstract">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isabstract</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isabstract" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is an abstract base class.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.ismethoddescriptor">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">ismethoddescriptor</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.ismethoddescriptor" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a method descriptor, but not if
|
|||
|
<a class="reference internal" href="#inspect.ismethod" title="inspect.ismethod"><code class="xref py py-func docutils literal notranslate"><span class="pre">ismethod()</span></code></a>, <a class="reference internal" href="#inspect.isclass" title="inspect.isclass"><code class="xref py py-func docutils literal notranslate"><span class="pre">isclass()</span></code></a>, <a class="reference internal" href="#inspect.isfunction" title="inspect.isfunction"><code class="xref py py-func docutils literal notranslate"><span class="pre">isfunction()</span></code></a> or <a class="reference internal" href="#inspect.isbuiltin" title="inspect.isbuiltin"><code class="xref py py-func docutils literal notranslate"><span class="pre">isbuiltin()</span></code></a>
|
|||
|
are true.</p>
|
|||
|
<p>This, for example, is true of <code class="docutils literal notranslate"><span class="pre">int.__add__</span></code>. An object passing this test
|
|||
|
has a <a class="reference internal" href="../reference/datamodel.html#object.__get__" title="object.__get__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__get__()</span></code></a> method but not a <a class="reference internal" href="../reference/datamodel.html#object.__set__" title="object.__set__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__set__()</span></code></a>
|
|||
|
method, but beyond that the set of attributes varies. A
|
|||
|
<a class="reference internal" href="stdtypes.html#definition.__name__" title="definition.__name__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__name__</span></code></a> attribute is usually
|
|||
|
sensible, and <code class="xref py py-attr docutils literal notranslate"><span class="pre">__doc__</span></code> often is.</p>
|
|||
|
<p>Methods implemented via descriptors that also pass one of the other tests
|
|||
|
return false from the <a class="reference internal" href="#inspect.ismethoddescriptor" title="inspect.ismethoddescriptor"><code class="xref py py-func docutils literal notranslate"><span class="pre">ismethoddescriptor()</span></code></a> test, simply because the
|
|||
|
other tests promise more – you can, e.g., count on having the
|
|||
|
<code class="xref py py-attr docutils literal notranslate"><span class="pre">__func__</span></code> attribute (etc) when an object passes <a class="reference internal" href="#inspect.ismethod" title="inspect.ismethod"><code class="xref py py-func docutils literal notranslate"><span class="pre">ismethod()</span></code></a>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isdatadescriptor">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isdatadescriptor</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isdatadescriptor" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a data descriptor.</p>
|
|||
|
<p>Data descriptors have both a <a class="reference internal" href="../reference/datamodel.html#object.__get__" title="object.__get__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__get__</span></code></a> and a <a class="reference internal" href="../reference/datamodel.html#object.__set__" title="object.__set__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__set__</span></code></a> method.
|
|||
|
Examples are properties (defined in Python), getsets, and members. The
|
|||
|
latter two are defined in C and there are more specific tests available for
|
|||
|
those types, which is robust across Python implementations. Typically, data
|
|||
|
descriptors will also have <a class="reference internal" href="stdtypes.html#definition.__name__" title="definition.__name__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__name__</span></code></a> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">__doc__</span></code> attributes
|
|||
|
(properties, getsets, and members have both of these attributes), but this is
|
|||
|
not guaranteed.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.isgetsetdescriptor">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">isgetsetdescriptor</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.isgetsetdescriptor" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a getset descriptor.</p>
|
|||
|
<div class="impl-detail compound">
|
|||
|
<p><strong>CPython implementation detail:</strong> getsets are attributes defined in extension modules via
|
|||
|
<a class="reference internal" href="../c-api/structures.html#c.PyGetSetDef" title="PyGetSetDef"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyGetSetDef</span></code></a> structures. For Python implementations without such
|
|||
|
types, this method will always return <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.ismemberdescriptor">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">ismemberdescriptor</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.ismemberdescriptor" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return true if the object is a member descriptor.</p>
|
|||
|
<div class="impl-detail compound">
|
|||
|
<p><strong>CPython implementation detail:</strong> Member descriptors are attributes defined in extension modules via
|
|||
|
<a class="reference internal" href="../c-api/structures.html#c.PyMemberDef" title="PyMemberDef"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyMemberDef</span></code></a> structures. For Python implementations without such
|
|||
|
types, this method will always return <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="retrieving-source-code">
|
|||
|
<span id="inspect-source"></span><h2>Retrieving source code<a class="headerlink" href="#retrieving-source-code" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getdoc">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getdoc</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getdoc" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the documentation string for an object, cleaned up with <a class="reference internal" href="#inspect.cleandoc" title="inspect.cleandoc"><code class="xref py py-func docutils literal notranslate"><span class="pre">cleandoc()</span></code></a>.
|
|||
|
If the documentation string for an object is not provided and the object is
|
|||
|
a class, a method, a property or a descriptor, retrieve the documentation
|
|||
|
string from the inheritance hierarchy.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Documentation strings are now inherited if not overridden.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getcomments">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getcomments</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getcomments" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return in a single string any lines of comments immediately preceding the
|
|||
|
object’s source code (for a class, function, or method), or at the top of the
|
|||
|
Python source file (if the object is a module). If the object’s source code
|
|||
|
is unavailable, return <code class="docutils literal notranslate"><span class="pre">None</span></code>. This could happen if the object has been
|
|||
|
defined in C or the interactive shell.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getfile">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getfile</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getfile" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return the name of the (text or binary) file in which an object was defined.
|
|||
|
This will fail with a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> if the object is a built-in module,
|
|||
|
class, or function.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getmodule">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getmodule</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getmodule" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Try to guess which module an object was defined in.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getsourcefile">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getsourcefile</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getsourcefile" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return the name of the Python source file in which an object was defined. This
|
|||
|
will fail with a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> if the object is a built-in module, class, or
|
|||
|
function.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getsourcelines">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getsourcelines</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getsourcelines" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a list of source lines and starting line number for an object. The
|
|||
|
argument may be a module, class, method, function, traceback, frame, or code
|
|||
|
object. The source code is returned as a list of the lines corresponding to the
|
|||
|
object and the line number indicates where in the original source file the first
|
|||
|
line of code was found. An <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> is raised if the source code cannot
|
|||
|
be retrieved.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.3: </span><a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> is raised instead of <a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IOError</span></code></a>, now an alias of the
|
|||
|
former.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getsource">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getsource</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getsource" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return the text of the source code for an object. The argument may be a module,
|
|||
|
class, method, function, traceback, frame, or code object. The source code is
|
|||
|
returned as a single string. An <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> is raised if the source code
|
|||
|
cannot be retrieved.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.3: </span><a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> is raised instead of <a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IOError</span></code></a>, now an alias of the
|
|||
|
former.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.cleandoc">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">cleandoc</code><span class="sig-paren">(</span><em>doc</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.cleandoc" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Clean up indentation from docstrings that are indented to line up with blocks
|
|||
|
of code.</p>
|
|||
|
<p>All leading whitespace is removed from the first line. Any leading whitespace
|
|||
|
that can be uniformly removed from the second line onwards is removed. Empty
|
|||
|
lines at the beginning and end are subsequently removed. Also, all tabs are
|
|||
|
expanded to spaces.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="introspecting-callables-with-the-signature-object">
|
|||
|
<span id="inspect-signature-object"></span><h2>Introspecting callables with the Signature object<a class="headerlink" href="#introspecting-callables-with-the-signature-object" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
|||
|
</div>
|
|||
|
<p>The Signature object represents the call signature of a callable object and its
|
|||
|
return annotation. To retrieve a Signature object, use the <a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a>
|
|||
|
function.</p>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.signature">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">signature</code><span class="sig-paren">(</span><em>callable</em>, <em>*</em>, <em>follow_wrapped=True</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.signature" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a <a class="reference internal" href="#inspect.Signature" title="inspect.Signature"><code class="xref py py-class docutils literal notranslate"><span class="pre">Signature</span></code></a> object for the given <code class="docutils literal notranslate"><span class="pre">callable</span></code>:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">inspect</span> <span class="k">import</span> <span class="n">signature</span>
|
|||
|
<span class="gp">>>> </span><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="k">pass</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="n">sig</span> <span class="o">=</span> <span class="n">signature</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">sig</span><span class="p">)</span>
|
|||
|
<span class="go">'(a, *, b:int, **kwargs)'</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">sig</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s1">'b'</span><span class="p">])</span>
|
|||
|
<span class="go">'b:int'</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="n">sig</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s1">'b'</span><span class="p">]</span><span class="o">.</span><span class="n">annotation</span>
|
|||
|
<span class="go"><class 'int'></span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>Accepts a wide range of Python callables, from plain functions and classes to
|
|||
|
<a class="reference internal" href="functools.html#functools.partial" title="functools.partial"><code class="xref py py-func docutils literal notranslate"><span class="pre">functools.partial()</span></code></a> objects.</p>
|
|||
|
<p>Raises <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if no signature can be provided, and
|
|||
|
<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> if that type of object is not supported.</p>
|
|||
|
<p>A slash(/) in the signature of a function denotes that the parameters prior
|
|||
|
to it are positional-only. For more info, see
|
|||
|
<a class="reference internal" href="../faq/programming.html#faq-positional-only-arguments"><span class="std std-ref">the FAQ entry on positional-only parameters</span></a>.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5: </span><code class="docutils literal notranslate"><span class="pre">follow_wrapped</span></code> parameter. Pass <code class="docutils literal notranslate"><span class="pre">False</span></code> to get a signature of
|
|||
|
<code class="docutils literal notranslate"><span class="pre">callable</span></code> specifically (<code class="docutils literal notranslate"><span class="pre">callable.__wrapped__</span></code> will not be used to
|
|||
|
unwrap decorated callables.)</p>
|
|||
|
</div>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>Some callables may not be introspectable in certain implementations of
|
|||
|
Python. For example, in CPython, some built-in functions defined in
|
|||
|
C provide no metadata about their arguments.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="class">
|
|||
|
<dt id="inspect.Signature">
|
|||
|
<em class="property">class </em><code class="descclassname">inspect.</code><code class="descname">Signature</code><span class="sig-paren">(</span><em>parameters=None</em>, <em>*</em>, <em>return_annotation=Signature.empty</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Signature" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A Signature object represents the call signature of a function and its return
|
|||
|
annotation. For each parameter accepted by the function it stores a
|
|||
|
<a class="reference internal" href="#inspect.Parameter" title="inspect.Parameter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Parameter</span></code></a> object in its <a class="reference internal" href="#inspect.Signature.parameters" title="inspect.Signature.parameters"><code class="xref py py-attr docutils literal notranslate"><span class="pre">parameters</span></code></a> collection.</p>
|
|||
|
<p>The optional <em>parameters</em> argument is a sequence of <a class="reference internal" href="#inspect.Parameter" title="inspect.Parameter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Parameter</span></code></a>
|
|||
|
objects, which is validated to check that there are no parameters with
|
|||
|
duplicate names, and that the parameters are in the right order, i.e.
|
|||
|
positional-only first, then positional-or-keyword, and that parameters with
|
|||
|
defaults follow parameters without defaults.</p>
|
|||
|
<p>The optional <em>return_annotation</em> argument, can be an arbitrary Python object,
|
|||
|
is the “return” annotation of the callable.</p>
|
|||
|
<p>Signature objects are <em>immutable</em>. Use <a class="reference internal" href="#inspect.Signature.replace" title="inspect.Signature.replace"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.replace()</span></code></a> to make a
|
|||
|
modified copy.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Signature objects are picklable and hashable.</p>
|
|||
|
</div>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Signature.empty">
|
|||
|
<code class="descname">empty</code><a class="headerlink" href="#inspect.Signature.empty" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A special class-level marker to specify absence of a return annotation.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Signature.parameters">
|
|||
|
<code class="descname">parameters</code><a class="headerlink" href="#inspect.Signature.parameters" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>An ordered mapping of parameters’ names to the corresponding
|
|||
|
<a class="reference internal" href="#inspect.Parameter" title="inspect.Parameter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Parameter</span></code></a> objects. Parameters appear in strict definition
|
|||
|
order, including keyword-only parameters.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.7: </span>Python only explicitly guaranteed that it preserved the declaration
|
|||
|
order of keyword-only parameters as of version 3.7, although in practice
|
|||
|
this order had always been preserved in Python 3.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Signature.return_annotation">
|
|||
|
<code class="descname">return_annotation</code><a class="headerlink" href="#inspect.Signature.return_annotation" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The “return” annotation for the callable. If the callable has no “return”
|
|||
|
annotation, this attribute is set to <a class="reference internal" href="#inspect.Signature.empty" title="inspect.Signature.empty"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Signature.empty</span></code></a>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="inspect.Signature.bind">
|
|||
|
<code class="descname">bind</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Signature.bind" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Create a mapping from positional and keyword arguments to parameters.
|
|||
|
Returns <a class="reference internal" href="#inspect.BoundArguments" title="inspect.BoundArguments"><code class="xref py py-class docutils literal notranslate"><span class="pre">BoundArguments</span></code></a> if <code class="docutils literal notranslate"><span class="pre">*args</span></code> and <code class="docutils literal notranslate"><span class="pre">**kwargs</span></code> match the
|
|||
|
signature, or raises a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="inspect.Signature.bind_partial">
|
|||
|
<code class="descname">bind_partial</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Signature.bind_partial" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Works the same way as <a class="reference internal" href="#inspect.Signature.bind" title="inspect.Signature.bind"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind()</span></code></a>, but allows the omission of
|
|||
|
some required arguments (mimics <a class="reference internal" href="functools.html#functools.partial" title="functools.partial"><code class="xref py py-func docutils literal notranslate"><span class="pre">functools.partial()</span></code></a> behavior.)
|
|||
|
Returns <a class="reference internal" href="#inspect.BoundArguments" title="inspect.BoundArguments"><code class="xref py py-class docutils literal notranslate"><span class="pre">BoundArguments</span></code></a>, or raises a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> if the
|
|||
|
passed arguments do not match the signature.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="inspect.Signature.replace">
|
|||
|
<code class="descname">replace</code><span class="sig-paren">(</span><em>*[, parameters][, return_annotation]</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Signature.replace" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Create a new Signature instance based on the instance replace was invoked
|
|||
|
on. It is possible to pass different <code class="docutils literal notranslate"><span class="pre">parameters</span></code> and/or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">return_annotation</span></code> to override the corresponding properties of the base
|
|||
|
signature. To remove return_annotation from the copied Signature, pass in
|
|||
|
<a class="reference internal" href="#inspect.Signature.empty" title="inspect.Signature.empty"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Signature.empty</span></code></a>.</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="k">pass</span>
|
|||
|
<span class="gp">>>> </span><span class="n">sig</span> <span class="o">=</span> <span class="n">signature</span><span class="p">(</span><span class="n">test</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="n">new_sig</span> <span class="o">=</span> <span class="n">sig</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">return_annotation</span><span class="o">=</span><span class="s2">"new return anno"</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">new_sig</span><span class="p">)</span>
|
|||
|
<span class="go">"(a, b) -> 'new return anno'"</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="classmethod">
|
|||
|
<dt id="inspect.Signature.from_callable">
|
|||
|
<em class="property">classmethod </em><code class="descname">from_callable</code><span class="sig-paren">(</span><em>obj</em>, <em>*</em>, <em>follow_wrapped=True</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Signature.from_callable" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a <a class="reference internal" href="#inspect.Signature" title="inspect.Signature"><code class="xref py py-class docutils literal notranslate"><span class="pre">Signature</span></code></a> (or its subclass) object for a given callable
|
|||
|
<code class="docutils literal notranslate"><span class="pre">obj</span></code>. Pass <code class="docutils literal notranslate"><span class="pre">follow_wrapped=False</span></code> to get a signature of <code class="docutils literal notranslate"><span class="pre">obj</span></code>
|
|||
|
without unwrapping its <code class="docutils literal notranslate"><span class="pre">__wrapped__</span></code> chain.</p>
|
|||
|
<p>This method simplifies subclassing of <a class="reference internal" href="#inspect.Signature" title="inspect.Signature"><code class="xref py py-class docutils literal notranslate"><span class="pre">Signature</span></code></a>:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">MySignature</span><span class="p">(</span><span class="n">Signature</span><span class="p">):</span>
|
|||
|
<span class="k">pass</span>
|
|||
|
<span class="n">sig</span> <span class="o">=</span> <span class="n">MySignature</span><span class="o">.</span><span class="n">from_callable</span><span class="p">(</span><span class="nb">min</span><span class="p">)</span>
|
|||
|
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sig</span><span class="p">,</span> <span class="n">MySignature</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>
|
|||
|
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="class">
|
|||
|
<dt id="inspect.Parameter">
|
|||
|
<em class="property">class </em><code class="descclassname">inspect.</code><code class="descname">Parameter</code><span class="sig-paren">(</span><em>name</em>, <em>kind</em>, <em>*</em>, <em>default=Parameter.empty</em>, <em>annotation=Parameter.empty</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Parameter" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Parameter objects are <em>immutable</em>. Instead of modifying a Parameter object,
|
|||
|
you can use <a class="reference internal" href="#inspect.Parameter.replace" title="inspect.Parameter.replace"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Parameter.replace()</span></code></a> to create a modified copy.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Parameter objects are picklable and hashable.</p>
|
|||
|
</div>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Parameter.empty">
|
|||
|
<code class="descname">empty</code><a class="headerlink" href="#inspect.Parameter.empty" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A special class-level marker to specify absence of default values and
|
|||
|
annotations.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Parameter.name">
|
|||
|
<code class="descname">name</code><a class="headerlink" href="#inspect.Parameter.name" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The name of the parameter as a string. The name must be a valid
|
|||
|
Python identifier.</p>
|
|||
|
<div class="impl-detail compound">
|
|||
|
<p class="compound-first"><strong>CPython implementation detail:</strong> CPython generates implicit parameter names of the form <code class="docutils literal notranslate"><span class="pre">.0</span></code> on the
|
|||
|
code objects used to implement comprehensions and generator
|
|||
|
expressions.</p>
|
|||
|
<div class="compound-last versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.6: </span>These parameter names are exposed by this module as names like
|
|||
|
<code class="docutils literal notranslate"><span class="pre">implicit0</span></code>.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Parameter.default">
|
|||
|
<code class="descname">default</code><a class="headerlink" href="#inspect.Parameter.default" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The default value for the parameter. If the parameter has no default
|
|||
|
value, this attribute is set to <a class="reference internal" href="#inspect.Parameter.empty" title="inspect.Parameter.empty"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Parameter.empty</span></code></a>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Parameter.annotation">
|
|||
|
<code class="descname">annotation</code><a class="headerlink" href="#inspect.Parameter.annotation" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The annotation for the parameter. If the parameter has no annotation,
|
|||
|
this attribute is set to <a class="reference internal" href="#inspect.Parameter.empty" title="inspect.Parameter.empty"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Parameter.empty</span></code></a>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.Parameter.kind">
|
|||
|
<code class="descname">kind</code><a class="headerlink" href="#inspect.Parameter.kind" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Describes how argument values are bound to the parameter. Possible values
|
|||
|
(accessible via <a class="reference internal" href="#inspect.Parameter" title="inspect.Parameter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Parameter</span></code></a>, like <code class="docutils literal notranslate"><span class="pre">Parameter.KEYWORD_ONLY</span></code>):</p>
|
|||
|
<table class="docutils align-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 34%" />
|
|||
|
<col style="width: 66%" />
|
|||
|
</colgroup>
|
|||
|
<thead>
|
|||
|
<tr class="row-odd"><th class="head"><p>Name</p></th>
|
|||
|
<th class="head"><p>Meaning</p></th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="row-even"><td><p><em>POSITIONAL_ONLY</em></p></td>
|
|||
|
<td><p>Value must be supplied as a positional
|
|||
|
argument.</p>
|
|||
|
<p>Python has no explicit syntax for defining
|
|||
|
positional-only parameters, but many built-in
|
|||
|
and extension module functions (especially
|
|||
|
those that accept only one or two parameters)
|
|||
|
accept them.</p>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><em>POSITIONAL_OR_KEYWORD</em></p></td>
|
|||
|
<td><p>Value may be supplied as either a keyword or
|
|||
|
positional argument (this is the standard
|
|||
|
binding behaviour for functions implemented
|
|||
|
in Python.)</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><em>VAR_POSITIONAL</em></p></td>
|
|||
|
<td><p>A tuple of positional arguments that aren’t
|
|||
|
bound to any other parameter. This
|
|||
|
corresponds to a <code class="docutils literal notranslate"><span class="pre">*args</span></code> parameter in a
|
|||
|
Python function definition.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><em>KEYWORD_ONLY</em></p></td>
|
|||
|
<td><p>Value must be supplied as a keyword argument.
|
|||
|
Keyword only parameters are those which
|
|||
|
appear after a <code class="docutils literal notranslate"><span class="pre">*</span></code> or <code class="docutils literal notranslate"><span class="pre">*args</span></code> entry in a
|
|||
|
Python function definition.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><em>VAR_KEYWORD</em></p></td>
|
|||
|
<td><p>A dict of keyword arguments that aren’t bound
|
|||
|
to any other parameter. This corresponds to a
|
|||
|
<code class="docutils literal notranslate"><span class="pre">**kwargs</span></code> parameter in a Python function
|
|||
|
definition.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>Example: print all keyword-only arguments without default values:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="k">pass</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="n">sig</span> <span class="o">=</span> <span class="n">signature</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">sig</span><span class="o">.</span><span class="n">parameters</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
|||
|
<span class="gp">... </span> <span class="k">if</span> <span class="p">(</span><span class="n">param</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="n">param</span><span class="o">.</span><span class="n">KEYWORD_ONLY</span> <span class="ow">and</span>
|
|||
|
<span class="gp">... </span> <span class="n">param</span><span class="o">.</span><span class="n">default</span> <span class="ow">is</span> <span class="n">param</span><span class="o">.</span><span class="n">empty</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Parameter:'</span><span class="p">,</span> <span class="n">param</span><span class="p">)</span>
|
|||
|
<span class="go">Parameter: c</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="inspect.Parameter.replace">
|
|||
|
<code class="descname">replace</code><span class="sig-paren">(</span><em>*[, name][, kind][, default][, annotation]</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.Parameter.replace" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><blockquote>
|
|||
|
<div><p>Create a new Parameter instance based on the instance replaced was invoked
|
|||
|
on. To override a <a class="reference internal" href="#inspect.Parameter" title="inspect.Parameter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Parameter</span></code></a> attribute, pass the corresponding
|
|||
|
argument. To remove a default value or/and an annotation from a
|
|||
|
Parameter, pass <a class="reference internal" href="#inspect.Parameter.empty" title="inspect.Parameter.empty"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Parameter.empty</span></code></a>.</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">inspect</span> <span class="k">import</span> <span class="n">Parameter</span>
|
|||
|
<span class="gp">>>> </span><span class="n">param</span> <span class="o">=</span> <span class="n">Parameter</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">,</span> <span class="n">Parameter</span><span class="o">.</span><span class="n">KEYWORD_ONLY</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
|
|||
|
<span class="go">'foo=42'</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">param</span><span class="o">.</span><span class="n">replace</span><span class="p">())</span> <span class="c1"># Will create a shallow copy of 'param'</span>
|
|||
|
<span class="go">'foo=42'</span>
|
|||
|
|
|||
|
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">param</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">Parameter</span><span class="o">.</span><span class="n">empty</span><span class="p">,</span> <span class="n">annotation</span><span class="o">=</span><span class="s1">'spam'</span><span class="p">))</span>
|
|||
|
<span class="go">"foo:'spam'"</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div></blockquote>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.4: </span>In Python 3.3 Parameter objects were allowed to have <code class="docutils literal notranslate"><span class="pre">name</span></code> set
|
|||
|
to <code class="docutils literal notranslate"><span class="pre">None</span></code> if their <code class="docutils literal notranslate"><span class="pre">kind</span></code> was set to <code class="docutils literal notranslate"><span class="pre">POSITIONAL_ONLY</span></code>.
|
|||
|
This is no longer permitted.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="class">
|
|||
|
<dt id="inspect.BoundArguments">
|
|||
|
<em class="property">class </em><code class="descclassname">inspect.</code><code class="descname">BoundArguments</code><a class="headerlink" href="#inspect.BoundArguments" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Result of a <a class="reference internal" href="#inspect.Signature.bind" title="inspect.Signature.bind"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind()</span></code></a> or <a class="reference internal" href="#inspect.Signature.bind_partial" title="inspect.Signature.bind_partial"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind_partial()</span></code></a> call.
|
|||
|
Holds the mapping of arguments to the function’s parameters.</p>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.BoundArguments.arguments">
|
|||
|
<code class="descname">arguments</code><a class="headerlink" href="#inspect.BoundArguments.arguments" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>An ordered, mutable mapping (<a class="reference internal" href="collections.html#collections.OrderedDict" title="collections.OrderedDict"><code class="xref py py-class docutils literal notranslate"><span class="pre">collections.OrderedDict</span></code></a>) of
|
|||
|
parameters’ names to arguments’ values. Contains only explicitly bound
|
|||
|
arguments. Changes in <a class="reference internal" href="#inspect.BoundArguments.arguments" title="inspect.BoundArguments.arguments"><code class="xref py py-attr docutils literal notranslate"><span class="pre">arguments</span></code></a> will reflect in <a class="reference internal" href="#inspect.BoundArguments.args" title="inspect.BoundArguments.args"><code class="xref py py-attr docutils literal notranslate"><span class="pre">args</span></code></a> and
|
|||
|
<a class="reference internal" href="#inspect.BoundArguments.kwargs" title="inspect.BoundArguments.kwargs"><code class="xref py py-attr docutils literal notranslate"><span class="pre">kwargs</span></code></a>.</p>
|
|||
|
<p>Should be used in conjunction with <a class="reference internal" href="#inspect.Signature.parameters" title="inspect.Signature.parameters"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Signature.parameters</span></code></a> for any
|
|||
|
argument processing purposes.</p>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>Arguments for which <a class="reference internal" href="#inspect.Signature.bind" title="inspect.Signature.bind"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind()</span></code></a> or
|
|||
|
<a class="reference internal" href="#inspect.Signature.bind_partial" title="inspect.Signature.bind_partial"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind_partial()</span></code></a> relied on a default value are skipped.
|
|||
|
However, if needed, use <a class="reference internal" href="#inspect.BoundArguments.apply_defaults" title="inspect.BoundArguments.apply_defaults"><code class="xref py py-meth docutils literal notranslate"><span class="pre">BoundArguments.apply_defaults()</span></code></a> to add
|
|||
|
them.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.BoundArguments.args">
|
|||
|
<code class="descname">args</code><a class="headerlink" href="#inspect.BoundArguments.args" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A tuple of positional arguments values. Dynamically computed from the
|
|||
|
<a class="reference internal" href="#inspect.BoundArguments.arguments" title="inspect.BoundArguments.arguments"><code class="xref py py-attr docutils literal notranslate"><span class="pre">arguments</span></code></a> attribute.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.BoundArguments.kwargs">
|
|||
|
<code class="descname">kwargs</code><a class="headerlink" href="#inspect.BoundArguments.kwargs" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A dict of keyword arguments values. Dynamically computed from the
|
|||
|
<a class="reference internal" href="#inspect.BoundArguments.arguments" title="inspect.BoundArguments.arguments"><code class="xref py py-attr docutils literal notranslate"><span class="pre">arguments</span></code></a> attribute.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="inspect.BoundArguments.signature">
|
|||
|
<code class="descname">signature</code><a class="headerlink" href="#inspect.BoundArguments.signature" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A reference to the parent <a class="reference internal" href="#inspect.Signature" title="inspect.Signature"><code class="xref py py-class docutils literal notranslate"><span class="pre">Signature</span></code></a> object.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="inspect.BoundArguments.apply_defaults">
|
|||
|
<code class="descname">apply_defaults</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inspect.BoundArguments.apply_defaults" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Set default values for missing arguments.</p>
|
|||
|
<p>For variable-positional arguments (<code class="docutils literal notranslate"><span class="pre">*args</span></code>) the default is an
|
|||
|
empty tuple.</p>
|
|||
|
<p>For variable-keyword arguments (<code class="docutils literal notranslate"><span class="pre">**kwargs</span></code>) the default is an
|
|||
|
empty dict.</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="s1">'ham'</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">pass</span>
|
|||
|
<span class="gp">>>> </span><span class="n">ba</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">signature</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s1">'spam'</span><span class="p">)</span>
|
|||
|
<span class="gp">>>> </span><span class="n">ba</span><span class="o">.</span><span class="n">apply_defaults</span><span class="p">()</span>
|
|||
|
<span class="gp">>>> </span><span class="n">ba</span><span class="o">.</span><span class="n">arguments</span>
|
|||
|
<span class="go">OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>The <a class="reference internal" href="#inspect.BoundArguments.args" title="inspect.BoundArguments.args"><code class="xref py py-attr docutils literal notranslate"><span class="pre">args</span></code></a> and <a class="reference internal" href="#inspect.BoundArguments.kwargs" title="inspect.BoundArguments.kwargs"><code class="xref py py-attr docutils literal notranslate"><span class="pre">kwargs</span></code></a> properties can be used to invoke
|
|||
|
functions:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|||
|
<span class="o">...</span>
|
|||
|
|
|||
|
<span class="n">sig</span> <span class="o">=</span> <span class="n">signature</span><span class="p">(</span><span class="n">test</span><span class="p">)</span>
|
|||
|
<span class="n">ba</span> <span class="o">=</span> <span class="n">sig</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
|||
|
<span class="n">test</span><span class="p">(</span><span class="o">*</span><span class="n">ba</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">ba</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<div class="admonition seealso">
|
|||
|
<p class="admonition-title">See also</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt><span class="target" id="index-0"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0362"><strong>PEP 362</strong></a> - Function Signature Object.</dt><dd><p>The detailed specification, implementation details and examples.</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="classes-and-functions">
|
|||
|
<span id="inspect-classes-functions"></span><h2>Classes and functions<a class="headerlink" href="#classes-and-functions" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getclasstree">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getclasstree</code><span class="sig-paren">(</span><em>classes</em>, <em>unique=False</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getclasstree" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Arrange the given list of classes into a hierarchy of nested lists. Where a
|
|||
|
nested list appears, it contains classes derived from the class whose entry
|
|||
|
immediately precedes the list. Each entry is a 2-tuple containing a class and a
|
|||
|
tuple of its base classes. If the <em>unique</em> argument is true, exactly one entry
|
|||
|
appears in the returned structure for each class in the given list. Otherwise,
|
|||
|
classes using multiple inheritance and their descendants will appear multiple
|
|||
|
times.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getargspec">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getargspec</code><span class="sig-paren">(</span><em>func</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getargspec" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the names and default values of a Python function’s parameters. A
|
|||
|
<a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a> <code class="docutils literal notranslate"><span class="pre">ArgSpec(args,</span> <span class="pre">varargs,</span> <span class="pre">keywords,</span> <span class="pre">defaults)</span></code> is
|
|||
|
returned. <em>args</em> is a list of the parameter names. <em>varargs</em> and <em>keywords</em>
|
|||
|
are the names of the <code class="docutils literal notranslate"><span class="pre">*</span></code> and <code class="docutils literal notranslate"><span class="pre">**</span></code> parameters or <code class="docutils literal notranslate"><span class="pre">None</span></code>. <em>defaults</em> is a
|
|||
|
tuple of default argument values or <code class="docutils literal notranslate"><span class="pre">None</span></code> if there are no default
|
|||
|
arguments; if this tuple has <em>n</em> elements, they correspond to the last
|
|||
|
<em>n</em> elements listed in <em>args</em>.</p>
|
|||
|
<div class="deprecated">
|
|||
|
<p><span class="versionmodified deprecated">Deprecated since version 3.0: </span>Use <a class="reference internal" href="#inspect.getfullargspec" title="inspect.getfullargspec"><code class="xref py py-func docutils literal notranslate"><span class="pre">getfullargspec()</span></code></a> for an updated API that is usually a drop-in
|
|||
|
replacement, but also correctly handles function annotations and
|
|||
|
keyword-only parameters.</p>
|
|||
|
<p>Alternatively, use <a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a> and
|
|||
|
<a class="reference internal" href="#inspect-signature-object"><span class="std std-ref">Signature Object</span></a>, which provide a
|
|||
|
more structured introspection API for callables.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getfullargspec">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getfullargspec</code><span class="sig-paren">(</span><em>func</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getfullargspec" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the names and default values of a Python function’s parameters. A
|
|||
|
<a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a> is returned:</p>
|
|||
|
<p><code class="docutils literal notranslate"><span class="pre">FullArgSpec(args,</span> <span class="pre">varargs,</span> <span class="pre">varkw,</span> <span class="pre">defaults,</span> <span class="pre">kwonlyargs,</span> <span class="pre">kwonlydefaults,</span>
|
|||
|
<span class="pre">annotations)</span></code></p>
|
|||
|
<p><em>args</em> is a list of the positional parameter names.
|
|||
|
<em>varargs</em> is the name of the <code class="docutils literal notranslate"><span class="pre">*</span></code> parameter or <code class="docutils literal notranslate"><span class="pre">None</span></code> if arbitrary
|
|||
|
positional arguments are not accepted.
|
|||
|
<em>varkw</em> is the name of the <code class="docutils literal notranslate"><span class="pre">**</span></code> parameter or <code class="docutils literal notranslate"><span class="pre">None</span></code> if arbitrary
|
|||
|
keyword arguments are not accepted.
|
|||
|
<em>defaults</em> is an <em>n</em>-tuple of default argument values corresponding to the
|
|||
|
last <em>n</em> positional parameters, or <code class="docutils literal notranslate"><span class="pre">None</span></code> if there are no such defaults
|
|||
|
defined.
|
|||
|
<em>kwonlyargs</em> is a list of keyword-only parameter names in declaration order.
|
|||
|
<em>kwonlydefaults</em> is a dictionary mapping parameter names from <em>kwonlyargs</em>
|
|||
|
to the default values used if no argument is supplied.
|
|||
|
<em>annotations</em> is a dictionary mapping parameter names to annotations.
|
|||
|
The special key <code class="docutils literal notranslate"><span class="pre">"return"</span></code> is used to report the function return value
|
|||
|
annotation (if any).</p>
|
|||
|
<p>Note that <a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a> and
|
|||
|
<a class="reference internal" href="#inspect-signature-object"><span class="std std-ref">Signature Object</span></a> provide the recommended
|
|||
|
API for callable introspection, and support additional behaviours (like
|
|||
|
positional-only arguments) that are sometimes encountered in extension module
|
|||
|
APIs. This function is retained primarily for use in code that needs to
|
|||
|
maintain compatibility with the Python 2 <code class="docutils literal notranslate"><span class="pre">inspect</span></code> module API.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.4: </span>This function is now based on <a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a>, but still ignores
|
|||
|
<code class="docutils literal notranslate"><span class="pre">__wrapped__</span></code> attributes and includes the already bound first
|
|||
|
parameter in the signature output for bound methods.</p>
|
|||
|
</div>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.6: </span>This method was previously documented as deprecated in favour of
|
|||
|
<a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a> in Python 3.5, but that decision has been reversed
|
|||
|
in order to restore a clearly supported standard interface for
|
|||
|
single-source Python 2/3 code migrating away from the legacy
|
|||
|
<a class="reference internal" href="#inspect.getargspec" title="inspect.getargspec"><code class="xref py py-func docutils literal notranslate"><span class="pre">getargspec()</span></code></a> API.</p>
|
|||
|
</div>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.7: </span>Python only explicitly guaranteed that it preserved the declaration
|
|||
|
order of keyword-only parameters as of version 3.7, although in practice
|
|||
|
this order had always been preserved in Python 3.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getargvalues">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getargvalues</code><span class="sig-paren">(</span><em>frame</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getargvalues" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get information about arguments passed into a particular frame. A
|
|||
|
<a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a> <code class="docutils literal notranslate"><span class="pre">ArgInfo(args,</span> <span class="pre">varargs,</span> <span class="pre">keywords,</span> <span class="pre">locals)</span></code> is
|
|||
|
returned. <em>args</em> is a list of the argument names. <em>varargs</em> and <em>keywords</em>
|
|||
|
are the names of the <code class="docutils literal notranslate"><span class="pre">*</span></code> and <code class="docutils literal notranslate"><span class="pre">**</span></code> arguments or <code class="docutils literal notranslate"><span class="pre">None</span></code>. <em>locals</em> is the
|
|||
|
locals dictionary of the given frame.</p>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>This function was inadvertently marked as deprecated in Python 3.5.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.formatargspec">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">formatargspec</code><span class="sig-paren">(</span><em>args</em><span class="optional">[</span>, <em>varargs</em>, <em>varkw</em>, <em>defaults</em>, <em>kwonlyargs</em>, <em>kwonlydefaults</em>, <em>annotations</em><span class="optional">[</span>, <em>formatarg</em>, <em>formatvarargs</em>, <em>formatvarkw</em>, <em>formatvalue</em>, <em>formatreturns</em>, <em>formatannotations</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#inspect.formatargspec" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Format a pretty argument spec from the values returned by
|
|||
|
<a class="reference internal" href="#inspect.getfullargspec" title="inspect.getfullargspec"><code class="xref py py-func docutils literal notranslate"><span class="pre">getfullargspec()</span></code></a>.</p>
|
|||
|
<p>The first seven arguments are (<code class="docutils literal notranslate"><span class="pre">args</span></code>, <code class="docutils literal notranslate"><span class="pre">varargs</span></code>, <code class="docutils literal notranslate"><span class="pre">varkw</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">defaults</span></code>, <code class="docutils literal notranslate"><span class="pre">kwonlyargs</span></code>, <code class="docutils literal notranslate"><span class="pre">kwonlydefaults</span></code>, <code class="docutils literal notranslate"><span class="pre">annotations</span></code>).</p>
|
|||
|
<p>The other six arguments are functions that are called to turn argument names,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">*</span></code> argument name, <code class="docutils literal notranslate"><span class="pre">**</span></code> argument name, default values, return annotation
|
|||
|
and individual annotations into strings, respectively.</p>
|
|||
|
<p>For example:</p>
|
|||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">inspect</span> <span class="k">import</span> <span class="n">formatargspec</span><span class="p">,</span> <span class="n">getfullargspec</span>
|
|||
|
<span class="gp">>>> </span><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">float</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="k">pass</span>
|
|||
|
<span class="gp">...</span>
|
|||
|
<span class="gp">>>> </span><span class="n">formatargspec</span><span class="p">(</span><span class="o">*</span><span class="n">getfullargspec</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
|||
|
<span class="go">'(a: int, b: float)'</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<div class="deprecated">
|
|||
|
<p><span class="versionmodified deprecated">Deprecated since version 3.5: </span>Use <a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a> and
|
|||
|
<a class="reference internal" href="#inspect-signature-object"><span class="std std-ref">Signature Object</span></a>, which provide a
|
|||
|
better introspecting API for callables.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.formatargvalues">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">formatargvalues</code><span class="sig-paren">(</span><em>args</em><span class="optional">[</span>, <em>varargs</em>, <em>varkw</em>, <em>locals</em>, <em>formatarg</em>, <em>formatvarargs</em>, <em>formatvarkw</em>, <em>formatvalue</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#inspect.formatargvalues" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Format a pretty argument spec from the four values returned by
|
|||
|
<a class="reference internal" href="#inspect.getargvalues" title="inspect.getargvalues"><code class="xref py py-func docutils literal notranslate"><span class="pre">getargvalues()</span></code></a>. The format* arguments are the corresponding optional
|
|||
|
formatting functions that are called to turn names and values into strings.</p>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>This function was inadvertently marked as deprecated in Python 3.5.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getmro">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getmro</code><span class="sig-paren">(</span><em>cls</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getmro" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a tuple of class cls’s base classes, including cls, in method resolution
|
|||
|
order. No class appears more than once in this tuple. Note that the method
|
|||
|
resolution order depends on cls’s type. Unless a very peculiar user-defined
|
|||
|
metatype is in use, cls will be the first element of the tuple.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getcallargs">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getcallargs</code><span class="sig-paren">(</span><em>func</em>, <em>*args</em>, <em>**kwds</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getcallargs" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Bind the <em>args</em> and <em>kwds</em> to the argument names of the Python function or
|
|||
|
method <em>func</em>, as if it was called with them. For bound methods, bind also the
|
|||
|
first argument (typically named <code class="docutils literal notranslate"><span class="pre">self</span></code>) to the associated instance. A dict
|
|||
|
is returned, mapping the argument names (including the names of the <code class="docutils literal notranslate"><span class="pre">*</span></code> and
|
|||
|
<code class="docutils literal notranslate"><span class="pre">**</span></code> arguments, if any) to their values from <em>args</em> and <em>kwds</em>. In case of
|
|||
|
invoking <em>func</em> incorrectly, i.e. whenever <code class="docutils literal notranslate"><span class="pre">func(*args,</span> <span class="pre">**kwds)</span></code> would raise
|
|||
|
an exception because of incompatible signature, an exception of the same type
|
|||
|
and the same or similar message is raised. For example:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">inspect</span> <span class="k">import</span> <span class="n">getcallargs</span>
|
|||
|
<span class="gp">>>> </span><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="o">*</span><span class="n">pos</span><span class="p">,</span> <span class="o">**</span><span class="n">named</span><span class="p">):</span>
|
|||
|
<span class="gp">... </span> <span class="k">pass</span>
|
|||
|
<span class="gp">>>> </span><span class="n">getcallargs</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">==</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'named'</span><span class="p">:</span> <span class="p">{},</span> <span class="s1">'b'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'pos'</span><span class="p">:</span> <span class="p">(</span><span class="mi">3</span><span class="p">,)}</span>
|
|||
|
<span class="go">True</span>
|
|||
|
<span class="gp">>>> </span><span class="n">getcallargs</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span> <span class="o">==</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'named'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'x'</span><span class="p">:</span> <span class="mi">4</span><span class="p">},</span> <span class="s1">'b'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'pos'</span><span class="p">:</span> <span class="p">()}</span>
|
|||
|
<span class="go">True</span>
|
|||
|
<span class="gp">>>> </span><span class="n">getcallargs</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|||
|
<span class="gt">Traceback (most recent call last):</span>
|
|||
|
<span class="c">...</span>
|
|||
|
<span class="gr">TypeError</span>: <span class="n">f() missing 1 required positional argument: 'a'</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.2.</span></p>
|
|||
|
</div>
|
|||
|
<div class="deprecated">
|
|||
|
<p><span class="versionmodified deprecated">Deprecated since version 3.5: </span>Use <a class="reference internal" href="#inspect.Signature.bind" title="inspect.Signature.bind"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind()</span></code></a> and <a class="reference internal" href="#inspect.Signature.bind_partial" title="inspect.Signature.bind_partial"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Signature.bind_partial()</span></code></a> instead.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getclosurevars">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getclosurevars</code><span class="sig-paren">(</span><em>func</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getclosurevars" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the mapping of external name references in a Python function or
|
|||
|
method <em>func</em> to their current values. A
|
|||
|
<a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a> <code class="docutils literal notranslate"><span class="pre">ClosureVars(nonlocals,</span> <span class="pre">globals,</span> <span class="pre">builtins,</span> <span class="pre">unbound)</span></code>
|
|||
|
is returned. <em>nonlocals</em> maps referenced names to lexical closure
|
|||
|
variables, <em>globals</em> to the function’s module globals and <em>builtins</em> to
|
|||
|
the builtins visible from the function body. <em>unbound</em> is the set of names
|
|||
|
referenced in the function that could not be resolved at all given the
|
|||
|
current module globals and builtins.</p>
|
|||
|
<p><a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> is raised if <em>func</em> is not a Python function or method.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.unwrap">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">unwrap</code><span class="sig-paren">(</span><em>func</em>, <em>*</em>, <em>stop=None</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.unwrap" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the object wrapped by <em>func</em>. It follows the chain of <code class="xref py py-attr docutils literal notranslate"><span class="pre">__wrapped__</span></code>
|
|||
|
attributes returning the last object in the chain.</p>
|
|||
|
<p><em>stop</em> is an optional callback accepting an object in the wrapper chain
|
|||
|
as its sole argument that allows the unwrapping to be terminated early if
|
|||
|
the callback returns a true value. If the callback never returns a true
|
|||
|
value, the last object in the chain is returned as usual. For example,
|
|||
|
<a class="reference internal" href="#inspect.signature" title="inspect.signature"><code class="xref py py-func docutils literal notranslate"><span class="pre">signature()</span></code></a> uses this to stop unwrapping if any object in the
|
|||
|
chain has a <code class="docutils literal notranslate"><span class="pre">__signature__</span></code> attribute defined.</p>
|
|||
|
<p><a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised if a cycle is encountered.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.4.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="the-interpreter-stack">
|
|||
|
<span id="inspect-stack"></span><h2>The interpreter stack<a class="headerlink" href="#the-interpreter-stack" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>When the following functions return “frame records,” each record is a
|
|||
|
<a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">FrameInfo(frame,</span> <span class="pre">filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code>.
|
|||
|
The tuple contains the frame object, the filename, the line number of the
|
|||
|
current line,
|
|||
|
the function name, a list of lines of context from the source code, and the
|
|||
|
index of the current line within that list.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Return a named tuple instead of a tuple.</p>
|
|||
|
</div>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>Keeping references to frame objects, as found in the first element of the frame
|
|||
|
records these functions return, can cause your program to create reference
|
|||
|
cycles. Once a reference cycle has been created, the lifespan of all objects
|
|||
|
which can be accessed from the objects which form the cycle can become much
|
|||
|
longer even if Python’s optional cycle detector is enabled. If such cycles must
|
|||
|
be created, it is important to ensure they are explicitly broken to avoid the
|
|||
|
delayed destruction of objects and increased memory consumption which occurs.</p>
|
|||
|
<p>Though the cycle detector will catch these, destruction of the frames (and local
|
|||
|
variables) can be made deterministic by removing the cycle in a
|
|||
|
<a class="reference internal" href="../reference/compound_stmts.html#finally"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">finally</span></code></a> clause. This is also important if the cycle detector was
|
|||
|
disabled when Python was compiled or using <a class="reference internal" href="gc.html#gc.disable" title="gc.disable"><code class="xref py py-func docutils literal notranslate"><span class="pre">gc.disable()</span></code></a>. For example:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">handle_stackframe_without_leak</span><span class="p">():</span>
|
|||
|
<span class="n">frame</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">()</span>
|
|||
|
<span class="k">try</span><span class="p">:</span>
|
|||
|
<span class="c1"># do something with the frame</span>
|
|||
|
<span class="k">finally</span><span class="p">:</span>
|
|||
|
<span class="k">del</span> <span class="n">frame</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>If you want to keep the frame around (for example to print a traceback
|
|||
|
later), you can also break reference cycles by using the
|
|||
|
<a class="reference internal" href="../reference/datamodel.html#frame.clear" title="frame.clear"><code class="xref py py-meth docutils literal notranslate"><span class="pre">frame.clear()</span></code></a> method.</p>
|
|||
|
</div>
|
|||
|
<p>The optional <em>context</em> argument supported by most of these functions specifies
|
|||
|
the number of lines of context to return, which are centered around the current
|
|||
|
line.</p>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getframeinfo">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getframeinfo</code><span class="sig-paren">(</span><em>frame</em>, <em>context=1</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getframeinfo" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get information about a frame or traceback object. A <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">Traceback(filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code> is returned.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getouterframes">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getouterframes</code><span class="sig-paren">(</span><em>frame</em>, <em>context=1</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getouterframes" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get a list of frame records for a frame and all outer frames. These frames
|
|||
|
represent the calls that lead to the creation of <em>frame</em>. The first entry in the
|
|||
|
returned list represents <em>frame</em>; the last entry represents the outermost call
|
|||
|
on <em>frame</em>’s stack.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>A list of <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuples</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">FrameInfo(frame,</span> <span class="pre">filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code>
|
|||
|
is returned.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getinnerframes">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getinnerframes</code><span class="sig-paren">(</span><em>traceback</em>, <em>context=1</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getinnerframes" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get a list of frame records for a traceback’s frame and all inner frames. These
|
|||
|
frames represent calls made as a consequence of <em>frame</em>. The first entry in the
|
|||
|
list represents <em>traceback</em>; the last entry represents where the exception was
|
|||
|
raised.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>A list of <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuples</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">FrameInfo(frame,</span> <span class="pre">filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code>
|
|||
|
is returned.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.currentframe">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">currentframe</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inspect.currentframe" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return the frame object for the caller’s stack frame.</p>
|
|||
|
<div class="impl-detail compound">
|
|||
|
<p><strong>CPython implementation detail:</strong> This function relies on Python stack frame support in the interpreter,
|
|||
|
which isn’t guaranteed to exist in all implementations of Python. If
|
|||
|
running in an implementation without Python stack frame support this
|
|||
|
function returns <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.stack">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">stack</code><span class="sig-paren">(</span><em>context=1</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.stack" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a list of frame records for the caller’s stack. The first entry in the
|
|||
|
returned list represents the caller; the last entry represents the outermost
|
|||
|
call on the stack.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>A list of <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuples</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">FrameInfo(frame,</span> <span class="pre">filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code>
|
|||
|
is returned.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.trace">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">trace</code><span class="sig-paren">(</span><em>context=1</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.trace" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Return a list of frame records for the stack between the current frame and the
|
|||
|
frame in which an exception currently being handled was raised in. The first
|
|||
|
entry in the list represents the caller; the last entry represents where the
|
|||
|
exception was raised.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>A list of <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuples</span></a>
|
|||
|
<code class="docutils literal notranslate"><span class="pre">FrameInfo(frame,</span> <span class="pre">filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span> <span class="pre">code_context,</span> <span class="pre">index)</span></code>
|
|||
|
is returned.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="fetching-attributes-statically">
|
|||
|
<h2>Fetching attributes statically<a class="headerlink" href="#fetching-attributes-statically" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>Both <a class="reference internal" href="functions.html#getattr" title="getattr"><code class="xref py py-func docutils literal notranslate"><span class="pre">getattr()</span></code></a> and <a class="reference internal" href="functions.html#hasattr" title="hasattr"><code class="xref py py-func docutils literal notranslate"><span class="pre">hasattr()</span></code></a> can trigger code execution when
|
|||
|
fetching or checking for the existence of attributes. Descriptors, like
|
|||
|
properties, will be invoked and <a class="reference internal" href="../reference/datamodel.html#object.__getattr__" title="object.__getattr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getattr__()</span></code></a> and <a class="reference internal" href="../reference/datamodel.html#object.__getattribute__" title="object.__getattribute__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getattribute__()</span></code></a>
|
|||
|
may be called.</p>
|
|||
|
<p>For cases where you want passive introspection, like documentation tools, this
|
|||
|
can be inconvenient. <a class="reference internal" href="#inspect.getattr_static" title="inspect.getattr_static"><code class="xref py py-func docutils literal notranslate"><span class="pre">getattr_static()</span></code></a> has the same signature as <a class="reference internal" href="functions.html#getattr" title="getattr"><code class="xref py py-func docutils literal notranslate"><span class="pre">getattr()</span></code></a>
|
|||
|
but avoids executing code when it fetches attributes.</p>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getattr_static">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getattr_static</code><span class="sig-paren">(</span><em>obj</em>, <em>attr</em>, <em>default=None</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getattr_static" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Retrieve attributes without triggering dynamic lookup via the
|
|||
|
descriptor protocol, <a class="reference internal" href="../reference/datamodel.html#object.__getattr__" title="object.__getattr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getattr__()</span></code></a> or <a class="reference internal" href="../reference/datamodel.html#object.__getattribute__" title="object.__getattribute__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getattribute__()</span></code></a>.</p>
|
|||
|
<p>Note: this function may not be able to retrieve all attributes
|
|||
|
that getattr can fetch (like dynamically created attributes)
|
|||
|
and may find attributes that getattr can’t (like descriptors
|
|||
|
that raise AttributeError). It can also return descriptors objects
|
|||
|
instead of instance members.</p>
|
|||
|
<p>If the instance <a class="reference internal" href="stdtypes.html#object.__dict__" title="object.__dict__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__dict__</span></code></a> is shadowed by another member (for
|
|||
|
example a property) then this function will be unable to find instance
|
|||
|
members.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.2.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p><a class="reference internal" href="#inspect.getattr_static" title="inspect.getattr_static"><code class="xref py py-func docutils literal notranslate"><span class="pre">getattr_static()</span></code></a> does not resolve descriptors, for example slot descriptors or
|
|||
|
getset descriptors on objects implemented in C. The descriptor object
|
|||
|
is returned instead of the underlying attribute.</p>
|
|||
|
<p>You can handle these with code like the following. Note that
|
|||
|
for arbitrary getset descriptors invoking these may trigger
|
|||
|
code execution:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># example code for resolving the builtin descriptor types</span>
|
|||
|
<span class="k">class</span> <span class="nc">_foo</span><span class="p">:</span>
|
|||
|
<span class="vm">__slots__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'foo'</span><span class="p">]</span>
|
|||
|
|
|||
|
<span class="n">slot_descriptor</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">_foo</span><span class="o">.</span><span class="n">foo</span><span class="p">)</span>
|
|||
|
<span class="n">getset_descriptor</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|||
|
<span class="n">wrapper_descriptor</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s1">'__add__'</span><span class="p">])</span>
|
|||
|
<span class="n">descriptor_types</span> <span class="o">=</span> <span class="p">(</span><span class="n">slot_descriptor</span><span class="p">,</span> <span class="n">getset_descriptor</span><span class="p">,</span> <span class="n">wrapper_descriptor</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">getattr_static</span><span class="p">(</span><span class="n">some_object</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">)</span>
|
|||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="ow">in</span> <span class="n">descriptor_types</span><span class="p">:</span>
|
|||
|
<span class="k">try</span><span class="p">:</span>
|
|||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="fm">__get__</span><span class="p">()</span>
|
|||
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|||
|
<span class="c1"># descriptors can raise AttributeError to</span>
|
|||
|
<span class="c1"># indicate there is no underlying value</span>
|
|||
|
<span class="c1"># in which case the descriptor itself will</span>
|
|||
|
<span class="c1"># have to do</span>
|
|||
|
<span class="k">pass</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="current-state-of-generators-and-coroutines">
|
|||
|
<h2>Current State of Generators and Coroutines<a class="headerlink" href="#current-state-of-generators-and-coroutines" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>When implementing coroutine schedulers and for other advanced uses of
|
|||
|
generators, it is useful to determine whether a generator is currently
|
|||
|
executing, is waiting to start or resume or execution, or has already
|
|||
|
terminated. <a class="reference internal" href="#inspect.getgeneratorstate" title="inspect.getgeneratorstate"><code class="xref py py-func docutils literal notranslate"><span class="pre">getgeneratorstate()</span></code></a> allows the current state of a
|
|||
|
generator to be determined easily.</p>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getgeneratorstate">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getgeneratorstate</code><span class="sig-paren">(</span><em>generator</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getgeneratorstate" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get current state of a generator-iterator.</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt>Possible states are:</dt><dd><ul class="simple">
|
|||
|
<li><p>GEN_CREATED: Waiting to start execution.</p></li>
|
|||
|
<li><p>GEN_RUNNING: Currently being executed by the interpreter.</p></li>
|
|||
|
<li><p>GEN_SUSPENDED: Currently suspended at a yield expression.</p></li>
|
|||
|
<li><p>GEN_CLOSED: Execution has completed.</p></li>
|
|||
|
</ul>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.2.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getcoroutinestate">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getcoroutinestate</code><span class="sig-paren">(</span><em>coroutine</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getcoroutinestate" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get current state of a coroutine object. The function is intended to be
|
|||
|
used with coroutine objects created by <a class="reference internal" href="../reference/compound_stmts.html#async-def"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">def</span></code></a> functions, but
|
|||
|
will accept any coroutine-like object that has <code class="docutils literal notranslate"><span class="pre">cr_running</span></code> and
|
|||
|
<code class="docutils literal notranslate"><span class="pre">cr_frame</span></code> attributes.</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt>Possible states are:</dt><dd><ul class="simple">
|
|||
|
<li><p>CORO_CREATED: Waiting to start execution.</p></li>
|
|||
|
<li><p>CORO_RUNNING: Currently being executed by the interpreter.</p></li>
|
|||
|
<li><p>CORO_SUSPENDED: Currently suspended at an await expression.</p></li>
|
|||
|
<li><p>CORO_CLOSED: Execution has completed.</p></li>
|
|||
|
</ul>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>The current internal state of the generator can also be queried. This is
|
|||
|
mostly useful for testing purposes, to ensure that internal state is being
|
|||
|
updated as expected:</p>
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getgeneratorlocals">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getgeneratorlocals</code><span class="sig-paren">(</span><em>generator</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getgeneratorlocals" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Get the mapping of live local variables in <em>generator</em> to their current
|
|||
|
values. A dictionary is returned that maps from variable names to values.
|
|||
|
This is the equivalent of calling <a class="reference internal" href="functions.html#locals" title="locals"><code class="xref py py-func docutils literal notranslate"><span class="pre">locals()</span></code></a> in the body of the
|
|||
|
generator, and all the same caveats apply.</p>
|
|||
|
<p>If <em>generator</em> is a <a class="reference internal" href="../glossary.html#term-generator"><span class="xref std std-term">generator</span></a> with no currently associated frame,
|
|||
|
then an empty dictionary is returned. <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> is raised if
|
|||
|
<em>generator</em> is not a Python generator object.</p>
|
|||
|
<div class="impl-detail compound">
|
|||
|
<p><strong>CPython implementation detail:</strong> This function relies on the generator exposing a Python stack frame
|
|||
|
for introspection, which isn’t guaranteed to be the case in all
|
|||
|
implementations of Python. In such cases, this function will always
|
|||
|
return an empty dictionary.</p>
|
|||
|
</div>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="inspect.getcoroutinelocals">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">getcoroutinelocals</code><span class="sig-paren">(</span><em>coroutine</em><span class="sig-paren">)</span><a class="headerlink" href="#inspect.getcoroutinelocals" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This function is analogous to <a class="reference internal" href="#inspect.getgeneratorlocals" title="inspect.getgeneratorlocals"><code class="xref py py-func docutils literal notranslate"><span class="pre">getgeneratorlocals()</span></code></a>, but
|
|||
|
works for coroutine objects created by <a class="reference internal" href="../reference/compound_stmts.html#async-def"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">async</span> <span class="pre">def</span></code></a> functions.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="code-objects-bit-flags">
|
|||
|
<span id="inspect-module-co-flags"></span><h2>Code Objects Bit Flags<a class="headerlink" href="#code-objects-bit-flags" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>Python code objects have a <code class="docutils literal notranslate"><span class="pre">co_flags</span></code> attribute, which is a bitmap of
|
|||
|
the following flags:</p>
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_OPTIMIZED">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_OPTIMIZED</code><a class="headerlink" href="#inspect.CO_OPTIMIZED" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The code object is optimized, using fast locals.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_NEWLOCALS">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_NEWLOCALS</code><a class="headerlink" href="#inspect.CO_NEWLOCALS" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>If set, a new dict will be created for the frame’s <code class="docutils literal notranslate"><span class="pre">f_locals</span></code> when
|
|||
|
the code object is executed.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_VARARGS">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_VARARGS</code><a class="headerlink" href="#inspect.CO_VARARGS" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The code object has a variable positional parameter (<code class="docutils literal notranslate"><span class="pre">*args</span></code>-like).</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_VARKEYWORDS">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_VARKEYWORDS</code><a class="headerlink" href="#inspect.CO_VARKEYWORDS" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The code object has a variable keyword parameter (<code class="docutils literal notranslate"><span class="pre">**kwargs</span></code>-like).</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_NESTED">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_NESTED</code><a class="headerlink" href="#inspect.CO_NESTED" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is set when the code object is a nested function.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_GENERATOR">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_GENERATOR</code><a class="headerlink" href="#inspect.CO_GENERATOR" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is set when the code object is a generator function, i.e.
|
|||
|
a generator object is returned when the code object is executed.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_NOFREE">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_NOFREE</code><a class="headerlink" href="#inspect.CO_NOFREE" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is set if there are no free or cell variables.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_COROUTINE">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_COROUTINE</code><a class="headerlink" href="#inspect.CO_COROUTINE" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is set when the code object is a coroutine function.
|
|||
|
When the code object is executed it returns a coroutine object.
|
|||
|
See <span class="target" id="index-1"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0492"><strong>PEP 492</strong></a> for more details.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_ITERABLE_COROUTINE">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_ITERABLE_COROUTINE</code><a class="headerlink" href="#inspect.CO_ITERABLE_COROUTINE" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is used to transform generators into generator-based
|
|||
|
coroutines. Generator objects with this flag can be used in
|
|||
|
<code class="docutils literal notranslate"><span class="pre">await</span></code> expression, and can <code class="docutils literal notranslate"><span class="pre">yield</span> <span class="pre">from</span></code> coroutine objects.
|
|||
|
See <span class="target" id="index-2"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0492"><strong>PEP 492</strong></a> for more details.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="data">
|
|||
|
<dt id="inspect.CO_ASYNC_GENERATOR">
|
|||
|
<code class="descclassname">inspect.</code><code class="descname">CO_ASYNC_GENERATOR</code><a class="headerlink" href="#inspect.CO_ASYNC_GENERATOR" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The flag is set when the code object is an asynchronous generator
|
|||
|
function. When the code object is executed it returns an
|
|||
|
asynchronous generator object. See <span class="target" id="index-3"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0525"><strong>PEP 525</strong></a> for more details.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.6.</span></p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>The flags are specific to CPython, and may not be defined in other
|
|||
|
Python implementations. Furthermore, the flags are an implementation
|
|||
|
detail, and can be removed or deprecated in future Python releases.
|
|||
|
It’s recommended to use public APIs from the <a class="reference internal" href="#module-inspect" title="inspect: Extract information and source code from live objects."><code class="xref py py-mod docutils literal notranslate"><span class="pre">inspect</span></code></a> module
|
|||
|
for any introspection needs.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="command-line-interface">
|
|||
|
<span id="inspect-module-cli"></span><h2>Command Line Interface<a class="headerlink" href="#command-line-interface" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>The <a class="reference internal" href="#module-inspect" title="inspect: Extract information and source code from live objects."><code class="xref py py-mod docutils literal notranslate"><span class="pre">inspect</span></code></a> module also provides a basic introspection capability
|
|||
|
from the command line.</p>
|
|||
|
<p>By default, accepts the name of a module and prints the source of that
|
|||
|
module. A class or function within the module can be printed instead by
|
|||
|
appended a colon and the qualified name of the target object.</p>
|
|||
|
<dl class="cmdoption">
|
|||
|
<dt id="cmdoption-inspect-details">
|
|||
|
<code class="descname">--details</code><code class="descclassname"></code><a class="headerlink" href="#cmdoption-inspect-details" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Print information about the specified object rather than the source code</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|||
|
<div class="sphinxsidebarwrapper">
|
|||
|
<h3><a href="../contents.html">Table of Contents</a></h3>
|
|||
|
<ul>
|
|||
|
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">inspect</span></code> — Inspect live objects</a><ul>
|
|||
|
<li><a class="reference internal" href="#types-and-members">Types and members</a></li>
|
|||
|
<li><a class="reference internal" href="#retrieving-source-code">Retrieving source code</a></li>
|
|||
|
<li><a class="reference internal" href="#introspecting-callables-with-the-signature-object">Introspecting callables with the Signature object</a></li>
|
|||
|
<li><a class="reference internal" href="#classes-and-functions">Classes and functions</a></li>
|
|||
|
<li><a class="reference internal" href="#the-interpreter-stack">The interpreter stack</a></li>
|
|||
|
<li><a class="reference internal" href="#fetching-attributes-statically">Fetching attributes statically</a></li>
|
|||
|
<li><a class="reference internal" href="#current-state-of-generators-and-coroutines">Current State of Generators and Coroutines</a></li>
|
|||
|
<li><a class="reference internal" href="#code-objects-bit-flags">Code Objects Bit Flags</a></li>
|
|||
|
<li><a class="reference internal" href="#command-line-interface">Command Line Interface</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<h4>Previous topic</h4>
|
|||
|
<p class="topless"><a href="gc.html"
|
|||
|
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">gc</span></code> — Garbage Collector interface</a></p>
|
|||
|
<h4>Next topic</h4>
|
|||
|
<p class="topless"><a href="site.html"
|
|||
|
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code> — Site-specific configuration hook</a></p>
|
|||
|
<div role="note" aria-label="source link">
|
|||
|
<h3>This Page</h3>
|
|||
|
<ul class="this-page-menu">
|
|||
|
<li><a href="../bugs.html">Report a Bug</a></li>
|
|||
|
<li>
|
|||
|
<a href="https://github.com/python/cpython/blob/3.7/Doc/library/inspect.rst"
|
|||
|
rel="nofollow">Show Source
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="clearer"></div>
|
|||
|
</div>
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
>index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="site.html" title="site — Site-specific configuration hook"
|
|||
|
>next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="gc.html" title="gc — Garbage Collector interface"
|
|||
|
>previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="python.html" >Python Runtime Services</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div class="footer">
|
|||
|
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
|||
|
<br />
|
|||
|
The Python Software Foundation is a non-profit corporation.
|
|||
|
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
|||
|
<br />
|
|||
|
Last updated on Jul 13, 2019.
|
|||
|
<a href="../bugs.html">Found a bug</a>?
|
|||
|
<br />
|
|||
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
|||
|
</div>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|