17db96d56Sopenharmony_ci:mod:`inspect` --- Inspect live objects 27db96d56Sopenharmony_ci======================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: inspect 57db96d56Sopenharmony_ci :synopsis: Extract information and source code from live objects. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Ka-Ping Yee <ping@lfw.org> 87db96d56Sopenharmony_ci.. sectionauthor:: Ka-Ping Yee <ping@lfw.org> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/inspect.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe :mod:`inspect` module provides several useful functions to help get 157db96d56Sopenharmony_ciinformation about live objects such as modules, classes, methods, functions, 167db96d56Sopenharmony_citracebacks, frame objects, and code objects. For example, it can help you 177db96d56Sopenharmony_ciexamine the contents of a class, retrieve the source code of a method, extract 187db96d56Sopenharmony_ciand format the argument list for a function, or get all the information you need 197db96d56Sopenharmony_cito display a detailed traceback. 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ciThere are four main kinds of services provided by this module: type checking, 227db96d56Sopenharmony_cigetting source code, inspecting classes and functions, and examining the 237db96d56Sopenharmony_ciinterpreter stack. 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci.. _inspect-types: 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ciTypes and members 297db96d56Sopenharmony_ci----------------- 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ciThe :func:`getmembers` function retrieves the members of an object such as a 327db96d56Sopenharmony_ciclass or module. The functions whose names begin with "is" are mainly 337db96d56Sopenharmony_ciprovided as convenient choices for the second argument to :func:`getmembers`. 347db96d56Sopenharmony_ciThey also help you determine when you can expect to find the following special 357db96d56Sopenharmony_ciattributes (see :ref:`import-mod-attrs` for module attributes): 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci.. this function name is too big to fit in the ascii-art table below 387db96d56Sopenharmony_ci.. |coroutine-origin-link| replace:: :func:`sys.set_coroutine_origin_tracking_depth` 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 417db96d56Sopenharmony_ci| Type | Attribute | Description | 427db96d56Sopenharmony_ci+===========+===================+===========================+ 437db96d56Sopenharmony_ci| class | __doc__ | documentation string | 447db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 457db96d56Sopenharmony_ci| | __name__ | name with which this | 467db96d56Sopenharmony_ci| | | class was defined | 477db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 487db96d56Sopenharmony_ci| | __qualname__ | qualified name | 497db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 507db96d56Sopenharmony_ci| | __module__ | name of module in which | 517db96d56Sopenharmony_ci| | | this class was defined | 527db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 537db96d56Sopenharmony_ci| method | __doc__ | documentation string | 547db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 557db96d56Sopenharmony_ci| | __name__ | name with which this | 567db96d56Sopenharmony_ci| | | method was defined | 577db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 587db96d56Sopenharmony_ci| | __qualname__ | qualified name | 597db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 607db96d56Sopenharmony_ci| | __func__ | function object | 617db96d56Sopenharmony_ci| | | containing implementation | 627db96d56Sopenharmony_ci| | | of method | 637db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 647db96d56Sopenharmony_ci| | __self__ | instance to which this | 657db96d56Sopenharmony_ci| | | method is bound, or | 667db96d56Sopenharmony_ci| | | ``None`` | 677db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 687db96d56Sopenharmony_ci| | __module__ | name of module in which | 697db96d56Sopenharmony_ci| | | this method was defined | 707db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 717db96d56Sopenharmony_ci| function | __doc__ | documentation string | 727db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 737db96d56Sopenharmony_ci| | __name__ | name with which this | 747db96d56Sopenharmony_ci| | | function was defined | 757db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 767db96d56Sopenharmony_ci| | __qualname__ | qualified name | 777db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 787db96d56Sopenharmony_ci| | __code__ | code object containing | 797db96d56Sopenharmony_ci| | | compiled function | 807db96d56Sopenharmony_ci| | | :term:`bytecode` | 817db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 827db96d56Sopenharmony_ci| | __defaults__ | tuple of any default | 837db96d56Sopenharmony_ci| | | values for positional or | 847db96d56Sopenharmony_ci| | | keyword parameters | 857db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 867db96d56Sopenharmony_ci| | __kwdefaults__ | mapping of any default | 877db96d56Sopenharmony_ci| | | values for keyword-only | 887db96d56Sopenharmony_ci| | | parameters | 897db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 907db96d56Sopenharmony_ci| | __globals__ | global namespace in which | 917db96d56Sopenharmony_ci| | | this function was defined | 927db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 937db96d56Sopenharmony_ci| | __builtins__ | builtins namespace | 947db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 957db96d56Sopenharmony_ci| | __annotations__ | mapping of parameters | 967db96d56Sopenharmony_ci| | | names to annotations; | 977db96d56Sopenharmony_ci| | | ``"return"`` key is | 987db96d56Sopenharmony_ci| | | reserved for return | 997db96d56Sopenharmony_ci| | | annotations. | 1007db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1017db96d56Sopenharmony_ci| | __module__ | name of module in which | 1027db96d56Sopenharmony_ci| | | this function was defined | 1037db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1047db96d56Sopenharmony_ci| traceback | tb_frame | frame object at this | 1057db96d56Sopenharmony_ci| | | level | 1067db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1077db96d56Sopenharmony_ci| | tb_lasti | index of last attempted | 1087db96d56Sopenharmony_ci| | | instruction in bytecode | 1097db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1107db96d56Sopenharmony_ci| | tb_lineno | current line number in | 1117db96d56Sopenharmony_ci| | | Python source code | 1127db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1137db96d56Sopenharmony_ci| | tb_next | next inner traceback | 1147db96d56Sopenharmony_ci| | | object (called by this | 1157db96d56Sopenharmony_ci| | | level) | 1167db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1177db96d56Sopenharmony_ci| frame | f_back | next outer frame object | 1187db96d56Sopenharmony_ci| | | (this frame's caller) | 1197db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1207db96d56Sopenharmony_ci| | f_builtins | builtins namespace seen | 1217db96d56Sopenharmony_ci| | | by this frame | 1227db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1237db96d56Sopenharmony_ci| | f_code | code object being | 1247db96d56Sopenharmony_ci| | | executed in this frame | 1257db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1267db96d56Sopenharmony_ci| | f_globals | global namespace seen by | 1277db96d56Sopenharmony_ci| | | this frame | 1287db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1297db96d56Sopenharmony_ci| | f_lasti | index of last attempted | 1307db96d56Sopenharmony_ci| | | instruction in bytecode | 1317db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1327db96d56Sopenharmony_ci| | f_lineno | current line number in | 1337db96d56Sopenharmony_ci| | | Python source code | 1347db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1357db96d56Sopenharmony_ci| | f_locals | local namespace seen by | 1367db96d56Sopenharmony_ci| | | this frame | 1377db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1387db96d56Sopenharmony_ci| | f_trace | tracing function for this | 1397db96d56Sopenharmony_ci| | | frame, or ``None`` | 1407db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1417db96d56Sopenharmony_ci| code | co_argcount | number of arguments (not | 1427db96d56Sopenharmony_ci| | | including keyword only | 1437db96d56Sopenharmony_ci| | | arguments, \* or \*\* | 1447db96d56Sopenharmony_ci| | | args) | 1457db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1467db96d56Sopenharmony_ci| | co_code | string of raw compiled | 1477db96d56Sopenharmony_ci| | | bytecode | 1487db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1497db96d56Sopenharmony_ci| | co_cellvars | tuple of names of cell | 1507db96d56Sopenharmony_ci| | | variables (referenced by | 1517db96d56Sopenharmony_ci| | | containing scopes) | 1527db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1537db96d56Sopenharmony_ci| | co_consts | tuple of constants used | 1547db96d56Sopenharmony_ci| | | in the bytecode | 1557db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1567db96d56Sopenharmony_ci| | co_filename | name of file in which | 1577db96d56Sopenharmony_ci| | | this code object was | 1587db96d56Sopenharmony_ci| | | created | 1597db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1607db96d56Sopenharmony_ci| | co_firstlineno | number of first line in | 1617db96d56Sopenharmony_ci| | | Python source code | 1627db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1637db96d56Sopenharmony_ci| | co_flags | bitmap of ``CO_*`` flags, | 1647db96d56Sopenharmony_ci| | | read more :ref:`here | 1657db96d56Sopenharmony_ci| | | <inspect-module-co-flags>`| 1667db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1677db96d56Sopenharmony_ci| | co_lnotab | encoded mapping of line | 1687db96d56Sopenharmony_ci| | | numbers to bytecode | 1697db96d56Sopenharmony_ci| | | indices | 1707db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1717db96d56Sopenharmony_ci| | co_freevars | tuple of names of free | 1727db96d56Sopenharmony_ci| | | variables (referenced via | 1737db96d56Sopenharmony_ci| | | a function's closure) | 1747db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1757db96d56Sopenharmony_ci| | co_posonlyargcount| number of positional only | 1767db96d56Sopenharmony_ci| | | arguments | 1777db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1787db96d56Sopenharmony_ci| | co_kwonlyargcount | number of keyword only | 1797db96d56Sopenharmony_ci| | | arguments (not including | 1807db96d56Sopenharmony_ci| | | \*\* arg) | 1817db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1827db96d56Sopenharmony_ci| | co_name | name with which this code | 1837db96d56Sopenharmony_ci| | | object was defined | 1847db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1857db96d56Sopenharmony_ci| | co_qualname | fully qualified name with | 1867db96d56Sopenharmony_ci| | | which this code object | 1877db96d56Sopenharmony_ci| | | was defined | 1887db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1897db96d56Sopenharmony_ci| | co_names | tuple of names other | 1907db96d56Sopenharmony_ci| | | than arguments and | 1917db96d56Sopenharmony_ci| | | function locals | 1927db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1937db96d56Sopenharmony_ci| | co_nlocals | number of local variables | 1947db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1957db96d56Sopenharmony_ci| | co_stacksize | virtual machine stack | 1967db96d56Sopenharmony_ci| | | space required | 1977db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 1987db96d56Sopenharmony_ci| | co_varnames | tuple of names of | 1997db96d56Sopenharmony_ci| | | arguments and local | 2007db96d56Sopenharmony_ci| | | variables | 2017db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2027db96d56Sopenharmony_ci| generator | __name__ | name | 2037db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2047db96d56Sopenharmony_ci| | __qualname__ | qualified name | 2057db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2067db96d56Sopenharmony_ci| | gi_frame | frame | 2077db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2087db96d56Sopenharmony_ci| | gi_running | is the generator running? | 2097db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2107db96d56Sopenharmony_ci| | gi_code | code | 2117db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2127db96d56Sopenharmony_ci| | gi_yieldfrom | object being iterated by | 2137db96d56Sopenharmony_ci| | | ``yield from``, or | 2147db96d56Sopenharmony_ci| | | ``None`` | 2157db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2167db96d56Sopenharmony_ci| coroutine | __name__ | name | 2177db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2187db96d56Sopenharmony_ci| | __qualname__ | qualified name | 2197db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2207db96d56Sopenharmony_ci| | cr_await | object being awaited on, | 2217db96d56Sopenharmony_ci| | | or ``None`` | 2227db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2237db96d56Sopenharmony_ci| | cr_frame | frame | 2247db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2257db96d56Sopenharmony_ci| | cr_running | is the coroutine running? | 2267db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2277db96d56Sopenharmony_ci| | cr_code | code | 2287db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2297db96d56Sopenharmony_ci| | cr_origin | where coroutine was | 2307db96d56Sopenharmony_ci| | | created, or ``None``. See | 2317db96d56Sopenharmony_ci| | | |coroutine-origin-link| | 2327db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2337db96d56Sopenharmony_ci| builtin | __doc__ | documentation string | 2347db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2357db96d56Sopenharmony_ci| | __name__ | original name of this | 2367db96d56Sopenharmony_ci| | | function or method | 2377db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2387db96d56Sopenharmony_ci| | __qualname__ | qualified name | 2397db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2407db96d56Sopenharmony_ci| | __self__ | instance to which a | 2417db96d56Sopenharmony_ci| | | method is bound, or | 2427db96d56Sopenharmony_ci| | | ``None`` | 2437db96d56Sopenharmony_ci+-----------+-------------------+---------------------------+ 2447db96d56Sopenharmony_ci 2457db96d56Sopenharmony_ci.. versionchanged:: 3.5 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci Add ``__qualname__`` and ``gi_yieldfrom`` attributes to generators. 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci The ``__name__`` attribute of generators is now set from the function 2507db96d56Sopenharmony_ci name, instead of the code name, and it can now be modified. 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci.. versionchanged:: 3.7 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci Add ``cr_origin`` attribute to coroutines. 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci.. versionchanged:: 3.10 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_ci Add ``__builtins__`` attribute to functions. 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci.. function:: getmembers(object[, predicate]) 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci Return all the members of an object in a list of ``(name, value)`` 2637db96d56Sopenharmony_ci pairs sorted by name. If the optional *predicate* argument—which will be 2647db96d56Sopenharmony_ci called with the ``value`` object of each member—is supplied, only members 2657db96d56Sopenharmony_ci for which the predicate returns a true value are included. 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci .. note:: 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci :func:`getmembers` will only return class attributes defined in the 2707db96d56Sopenharmony_ci metaclass when the argument is a class and those attributes have been 2717db96d56Sopenharmony_ci listed in the metaclass' custom :meth:`__dir__`. 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci.. function:: getmembers_static(object[, predicate]) 2757db96d56Sopenharmony_ci 2767db96d56Sopenharmony_ci Return all the members of an object in a list of ``(name, value)`` 2777db96d56Sopenharmony_ci pairs sorted by name without triggering dynamic lookup via the descriptor 2787db96d56Sopenharmony_ci protocol, __getattr__ or __getattribute__. Optionally, only return members 2797db96d56Sopenharmony_ci that satisfy a given predicate. 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci .. note:: 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci :func:`getmembers_static` may not be able to retrieve all members 2847db96d56Sopenharmony_ci that getmembers can fetch (like dynamically created attributes) 2857db96d56Sopenharmony_ci and may find members that getmembers can't (like descriptors 2867db96d56Sopenharmony_ci that raise AttributeError). It can also return descriptor objects 2877db96d56Sopenharmony_ci instead of instance members in some cases. 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ci .. versionadded:: 3.11 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci.. function:: getmodulename(path) 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci Return the name of the module named by the file *path*, without including the 2957db96d56Sopenharmony_ci names of enclosing packages. The file extension is checked against all of 2967db96d56Sopenharmony_ci the entries in :func:`importlib.machinery.all_suffixes`. If it matches, 2977db96d56Sopenharmony_ci the final path component is returned with the extension removed. 2987db96d56Sopenharmony_ci Otherwise, ``None`` is returned. 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci Note that this function *only* returns a meaningful name for actual 3017db96d56Sopenharmony_ci Python modules - paths that potentially refer to Python packages will 3027db96d56Sopenharmony_ci still return ``None``. 3037db96d56Sopenharmony_ci 3047db96d56Sopenharmony_ci .. versionchanged:: 3.3 3057db96d56Sopenharmony_ci The function is based directly on :mod:`importlib`. 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci.. function:: ismodule(object) 3097db96d56Sopenharmony_ci 3107db96d56Sopenharmony_ci Return ``True`` if the object is a module. 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci.. function:: isclass(object) 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci Return ``True`` if the object is a class, whether built-in or created in Python 3167db96d56Sopenharmony_ci code. 3177db96d56Sopenharmony_ci 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ci.. function:: ismethod(object) 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci Return ``True`` if the object is a bound method written in Python. 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci.. function:: isfunction(object) 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci Return ``True`` if the object is a Python function, which includes functions 3277db96d56Sopenharmony_ci created by a :term:`lambda` expression. 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci.. function:: isgeneratorfunction(object) 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci Return ``True`` if the object is a Python generator function. 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci .. versionchanged:: 3.8 3357db96d56Sopenharmony_ci Functions wrapped in :func:`functools.partial` now return ``True`` if the 3367db96d56Sopenharmony_ci wrapped function is a Python generator function. 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci.. function:: isgenerator(object) 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ci Return ``True`` if the object is a generator. 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci.. function:: iscoroutinefunction(object) 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci Return ``True`` if the object is a :term:`coroutine function` 3477db96d56Sopenharmony_ci (a function defined with an :keyword:`async def` syntax). 3487db96d56Sopenharmony_ci 3497db96d56Sopenharmony_ci .. versionadded:: 3.5 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci .. versionchanged:: 3.8 3527db96d56Sopenharmony_ci Functions wrapped in :func:`functools.partial` now return ``True`` if the 3537db96d56Sopenharmony_ci wrapped function is a :term:`coroutine function`. 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci.. function:: iscoroutine(object) 3577db96d56Sopenharmony_ci 3587db96d56Sopenharmony_ci Return ``True`` if the object is a :term:`coroutine` created by an 3597db96d56Sopenharmony_ci :keyword:`async def` function. 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci .. versionadded:: 3.5 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci 3647db96d56Sopenharmony_ci.. function:: isawaitable(object) 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci Return ``True`` if the object can be used in :keyword:`await` expression. 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci Can also be used to distinguish generator-based coroutines from regular 3697db96d56Sopenharmony_ci generators:: 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci def gen(): 3727db96d56Sopenharmony_ci yield 3737db96d56Sopenharmony_ci @types.coroutine 3747db96d56Sopenharmony_ci def gen_coro(): 3757db96d56Sopenharmony_ci yield 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci assert not isawaitable(gen()) 3787db96d56Sopenharmony_ci assert isawaitable(gen_coro()) 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci .. versionadded:: 3.5 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_ci.. function:: isasyncgenfunction(object) 3847db96d56Sopenharmony_ci 3857db96d56Sopenharmony_ci Return ``True`` if the object is an :term:`asynchronous generator` function, 3867db96d56Sopenharmony_ci for example:: 3877db96d56Sopenharmony_ci 3887db96d56Sopenharmony_ci >>> async def agen(): 3897db96d56Sopenharmony_ci ... yield 1 3907db96d56Sopenharmony_ci ... 3917db96d56Sopenharmony_ci >>> inspect.isasyncgenfunction(agen) 3927db96d56Sopenharmony_ci True 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci .. versionadded:: 3.6 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci .. versionchanged:: 3.8 3977db96d56Sopenharmony_ci Functions wrapped in :func:`functools.partial` now return ``True`` if the 3987db96d56Sopenharmony_ci wrapped function is a :term:`asynchronous generator` function. 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci.. function:: isasyncgen(object) 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci Return ``True`` if the object is an :term:`asynchronous generator iterator` 4047db96d56Sopenharmony_ci created by an :term:`asynchronous generator` function. 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci .. versionadded:: 3.6 4077db96d56Sopenharmony_ci 4087db96d56Sopenharmony_ci.. function:: istraceback(object) 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci Return ``True`` if the object is a traceback. 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_ci.. function:: isframe(object) 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci Return ``True`` if the object is a frame. 4167db96d56Sopenharmony_ci 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_ci.. function:: iscode(object) 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci Return ``True`` if the object is a code. 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci.. function:: isbuiltin(object) 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci Return ``True`` if the object is a built-in function or a bound built-in method. 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ci 4287db96d56Sopenharmony_ci.. function:: ismethodwrapper(object) 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci Return ``True`` if the type of object is a :class:`~types.MethodWrapperType`. 4317db96d56Sopenharmony_ci 4327db96d56Sopenharmony_ci These are instances of :class:`~types.MethodWrapperType`, such as :meth:`~object.__str__`, 4337db96d56Sopenharmony_ci :meth:`~object.__eq__` and :meth:`~object.__repr__`. 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ci .. versionadded:: 3.11 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci 4387db96d56Sopenharmony_ci.. function:: isroutine(object) 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_ci Return ``True`` if the object is a user-defined or built-in function or method. 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci 4437db96d56Sopenharmony_ci.. function:: isabstract(object) 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_ci Return ``True`` if the object is an abstract base class. 4467db96d56Sopenharmony_ci 4477db96d56Sopenharmony_ci 4487db96d56Sopenharmony_ci.. function:: ismethoddescriptor(object) 4497db96d56Sopenharmony_ci 4507db96d56Sopenharmony_ci Return ``True`` if the object is a method descriptor, but not if 4517db96d56Sopenharmony_ci :func:`ismethod`, :func:`isclass`, :func:`isfunction` or :func:`isbuiltin` 4527db96d56Sopenharmony_ci are true. 4537db96d56Sopenharmony_ci 4547db96d56Sopenharmony_ci This, for example, is true of ``int.__add__``. An object passing this test 4557db96d56Sopenharmony_ci has a :meth:`~object.__get__` method but not a :meth:`~object.__set__` 4567db96d56Sopenharmony_ci method, but beyond that the set of attributes varies. A 4577db96d56Sopenharmony_ci :attr:`~definition.__name__` attribute is usually 4587db96d56Sopenharmony_ci sensible, and :attr:`__doc__` often is. 4597db96d56Sopenharmony_ci 4607db96d56Sopenharmony_ci Methods implemented via descriptors that also pass one of the other tests 4617db96d56Sopenharmony_ci return ``False`` from the :func:`ismethoddescriptor` test, simply because the 4627db96d56Sopenharmony_ci other tests promise more -- you can, e.g., count on having the 4637db96d56Sopenharmony_ci :attr:`__func__` attribute (etc) when an object passes :func:`ismethod`. 4647db96d56Sopenharmony_ci 4657db96d56Sopenharmony_ci 4667db96d56Sopenharmony_ci.. function:: isdatadescriptor(object) 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci Return ``True`` if the object is a data descriptor. 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci Data descriptors have a :attr:`~object.__set__` or a :attr:`~object.__delete__` method. 4717db96d56Sopenharmony_ci Examples are properties (defined in Python), getsets, and members. The 4727db96d56Sopenharmony_ci latter two are defined in C and there are more specific tests available for 4737db96d56Sopenharmony_ci those types, which is robust across Python implementations. Typically, data 4747db96d56Sopenharmony_ci descriptors will also have :attr:`~definition.__name__` and :attr:`__doc__` attributes 4757db96d56Sopenharmony_ci (properties, getsets, and members have both of these attributes), but this is 4767db96d56Sopenharmony_ci not guaranteed. 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci 4797db96d56Sopenharmony_ci.. function:: isgetsetdescriptor(object) 4807db96d56Sopenharmony_ci 4817db96d56Sopenharmony_ci Return ``True`` if the object is a getset descriptor. 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci .. impl-detail:: 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci getsets are attributes defined in extension modules via 4867db96d56Sopenharmony_ci :c:type:`PyGetSetDef` structures. For Python implementations without such 4877db96d56Sopenharmony_ci types, this method will always return ``False``. 4887db96d56Sopenharmony_ci 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ci.. function:: ismemberdescriptor(object) 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ci Return ``True`` if the object is a member descriptor. 4937db96d56Sopenharmony_ci 4947db96d56Sopenharmony_ci .. impl-detail:: 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci Member descriptors are attributes defined in extension modules via 4977db96d56Sopenharmony_ci :c:type:`PyMemberDef` structures. For Python implementations without such 4987db96d56Sopenharmony_ci types, this method will always return ``False``. 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci.. _inspect-source: 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ciRetrieving source code 5047db96d56Sopenharmony_ci---------------------- 5057db96d56Sopenharmony_ci 5067db96d56Sopenharmony_ci.. function:: getdoc(object) 5077db96d56Sopenharmony_ci 5087db96d56Sopenharmony_ci Get the documentation string for an object, cleaned up with :func:`cleandoc`. 5097db96d56Sopenharmony_ci If the documentation string for an object is not provided and the object is 5107db96d56Sopenharmony_ci a class, a method, a property or a descriptor, retrieve the documentation 5117db96d56Sopenharmony_ci string from the inheritance hierarchy. 5127db96d56Sopenharmony_ci Return ``None`` if the documentation string is invalid or missing. 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci .. versionchanged:: 3.5 5157db96d56Sopenharmony_ci Documentation strings are now inherited if not overridden. 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci 5187db96d56Sopenharmony_ci.. function:: getcomments(object) 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ci Return in a single string any lines of comments immediately preceding the 5217db96d56Sopenharmony_ci object's source code (for a class, function, or method), or at the top of the 5227db96d56Sopenharmony_ci Python source file (if the object is a module). If the object's source code 5237db96d56Sopenharmony_ci is unavailable, return ``None``. This could happen if the object has been 5247db96d56Sopenharmony_ci defined in C or the interactive shell. 5257db96d56Sopenharmony_ci 5267db96d56Sopenharmony_ci 5277db96d56Sopenharmony_ci.. function:: getfile(object) 5287db96d56Sopenharmony_ci 5297db96d56Sopenharmony_ci Return the name of the (text or binary) file in which an object was defined. 5307db96d56Sopenharmony_ci This will fail with a :exc:`TypeError` if the object is a built-in module, 5317db96d56Sopenharmony_ci class, or function. 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ci.. function:: getmodule(object) 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci Try to guess which module an object was defined in. Return ``None`` 5377db96d56Sopenharmony_ci if the module cannot be determined. 5387db96d56Sopenharmony_ci 5397db96d56Sopenharmony_ci 5407db96d56Sopenharmony_ci.. function:: getsourcefile(object) 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci Return the name of the Python source file in which an object was defined 5437db96d56Sopenharmony_ci or ``None`` if no way can be identified to get the source. This 5447db96d56Sopenharmony_ci will fail with a :exc:`TypeError` if the object is a built-in module, class, or 5457db96d56Sopenharmony_ci function. 5467db96d56Sopenharmony_ci 5477db96d56Sopenharmony_ci 5487db96d56Sopenharmony_ci.. function:: getsourcelines(object) 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci Return a list of source lines and starting line number for an object. The 5517db96d56Sopenharmony_ci argument may be a module, class, method, function, traceback, frame, or code 5527db96d56Sopenharmony_ci object. The source code is returned as a list of the lines corresponding to the 5537db96d56Sopenharmony_ci object and the line number indicates where in the original source file the first 5547db96d56Sopenharmony_ci line of code was found. An :exc:`OSError` is raised if the source code cannot 5557db96d56Sopenharmony_ci be retrieved. 5567db96d56Sopenharmony_ci A :exc:`TypeError` is raised if the object is a built-in module, class, or 5577db96d56Sopenharmony_ci function. 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci .. versionchanged:: 3.3 5607db96d56Sopenharmony_ci :exc:`OSError` is raised instead of :exc:`IOError`, now an alias of the 5617db96d56Sopenharmony_ci former. 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci 5647db96d56Sopenharmony_ci.. function:: getsource(object) 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci Return the text of the source code for an object. The argument may be a module, 5677db96d56Sopenharmony_ci class, method, function, traceback, frame, or code object. The source code is 5687db96d56Sopenharmony_ci returned as a single string. An :exc:`OSError` is raised if the source code 5697db96d56Sopenharmony_ci cannot be retrieved. 5707db96d56Sopenharmony_ci A :exc:`TypeError` is raised if the object is a built-in module, class, or 5717db96d56Sopenharmony_ci function. 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci .. versionchanged:: 3.3 5747db96d56Sopenharmony_ci :exc:`OSError` is raised instead of :exc:`IOError`, now an alias of the 5757db96d56Sopenharmony_ci former. 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci 5787db96d56Sopenharmony_ci.. function:: cleandoc(doc) 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci Clean up indentation from docstrings that are indented to line up with blocks 5817db96d56Sopenharmony_ci of code. 5827db96d56Sopenharmony_ci 5837db96d56Sopenharmony_ci All leading whitespace is removed from the first line. Any leading whitespace 5847db96d56Sopenharmony_ci that can be uniformly removed from the second line onwards is removed. Empty 5857db96d56Sopenharmony_ci lines at the beginning and end are subsequently removed. Also, all tabs are 5867db96d56Sopenharmony_ci expanded to spaces. 5877db96d56Sopenharmony_ci 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ci.. _inspect-signature-object: 5907db96d56Sopenharmony_ci 5917db96d56Sopenharmony_ciIntrospecting callables with the Signature object 5927db96d56Sopenharmony_ci------------------------------------------------- 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci.. versionadded:: 3.3 5957db96d56Sopenharmony_ci 5967db96d56Sopenharmony_ciThe Signature object represents the call signature of a callable object and its 5977db96d56Sopenharmony_cireturn annotation. To retrieve a Signature object, use the :func:`signature` 5987db96d56Sopenharmony_cifunction. 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci.. function:: signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False) 6017db96d56Sopenharmony_ci 6027db96d56Sopenharmony_ci Return a :class:`Signature` object for the given ``callable``:: 6037db96d56Sopenharmony_ci 6047db96d56Sopenharmony_ci >>> from inspect import signature 6057db96d56Sopenharmony_ci >>> def foo(a, *, b:int, **kwargs): 6067db96d56Sopenharmony_ci ... pass 6077db96d56Sopenharmony_ci 6087db96d56Sopenharmony_ci >>> sig = signature(foo) 6097db96d56Sopenharmony_ci 6107db96d56Sopenharmony_ci >>> str(sig) 6117db96d56Sopenharmony_ci '(a, *, b:int, **kwargs)' 6127db96d56Sopenharmony_ci 6137db96d56Sopenharmony_ci >>> str(sig.parameters['b']) 6147db96d56Sopenharmony_ci 'b:int' 6157db96d56Sopenharmony_ci 6167db96d56Sopenharmony_ci >>> sig.parameters['b'].annotation 6177db96d56Sopenharmony_ci <class 'int'> 6187db96d56Sopenharmony_ci 6197db96d56Sopenharmony_ci Accepts a wide range of Python callables, from plain functions and classes to 6207db96d56Sopenharmony_ci :func:`functools.partial` objects. 6217db96d56Sopenharmony_ci 6227db96d56Sopenharmony_ci For objects defined in modules using stringized annotations 6237db96d56Sopenharmony_ci (``from __future__ import annotations``), :func:`signature` will 6247db96d56Sopenharmony_ci attempt to automatically un-stringize the annotations using 6257db96d56Sopenharmony_ci :func:`inspect.get_annotations()`. The 6267db96d56Sopenharmony_ci ``global``, ``locals``, and ``eval_str`` parameters are passed 6277db96d56Sopenharmony_ci into :func:`inspect.get_annotations()` when resolving the 6287db96d56Sopenharmony_ci annotations; see the documentation for :func:`inspect.get_annotations()` 6297db96d56Sopenharmony_ci for instructions on how to use these parameters. 6307db96d56Sopenharmony_ci 6317db96d56Sopenharmony_ci Raises :exc:`ValueError` if no signature can be provided, and 6327db96d56Sopenharmony_ci :exc:`TypeError` if that type of object is not supported. Also, 6337db96d56Sopenharmony_ci if the annotations are stringized, and ``eval_str`` is not false, 6347db96d56Sopenharmony_ci the ``eval()`` call(s) to un-stringize the annotations could 6357db96d56Sopenharmony_ci potentially raise any kind of exception. 6367db96d56Sopenharmony_ci 6377db96d56Sopenharmony_ci A slash(/) in the signature of a function denotes that the parameters prior 6387db96d56Sopenharmony_ci to it are positional-only. For more info, see 6397db96d56Sopenharmony_ci :ref:`the FAQ entry on positional-only parameters <faq-positional-only-arguments>`. 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci .. versionadded:: 3.5 6427db96d56Sopenharmony_ci ``follow_wrapped`` parameter. Pass ``False`` to get a signature of 6437db96d56Sopenharmony_ci ``callable`` specifically (``callable.__wrapped__`` will not be used to 6447db96d56Sopenharmony_ci unwrap decorated callables.) 6457db96d56Sopenharmony_ci 6467db96d56Sopenharmony_ci .. versionadded:: 3.10 6477db96d56Sopenharmony_ci ``globals``, ``locals``, and ``eval_str`` parameters. 6487db96d56Sopenharmony_ci 6497db96d56Sopenharmony_ci .. note:: 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci Some callables may not be introspectable in certain implementations of 6527db96d56Sopenharmony_ci Python. For example, in CPython, some built-in functions defined in 6537db96d56Sopenharmony_ci C provide no metadata about their arguments. 6547db96d56Sopenharmony_ci 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci.. class:: Signature(parameters=None, *, return_annotation=Signature.empty) 6577db96d56Sopenharmony_ci 6587db96d56Sopenharmony_ci A Signature object represents the call signature of a function and its return 6597db96d56Sopenharmony_ci annotation. For each parameter accepted by the function it stores a 6607db96d56Sopenharmony_ci :class:`Parameter` object in its :attr:`parameters` collection. 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci The optional *parameters* argument is a sequence of :class:`Parameter` 6637db96d56Sopenharmony_ci objects, which is validated to check that there are no parameters with 6647db96d56Sopenharmony_ci duplicate names, and that the parameters are in the right order, i.e. 6657db96d56Sopenharmony_ci positional-only first, then positional-or-keyword, and that parameters with 6667db96d56Sopenharmony_ci defaults follow parameters without defaults. 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_ci The optional *return_annotation* argument, can be an arbitrary Python object, 6697db96d56Sopenharmony_ci is the "return" annotation of the callable. 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci Signature objects are *immutable*. Use :meth:`Signature.replace` to make a 6727db96d56Sopenharmony_ci modified copy. 6737db96d56Sopenharmony_ci 6747db96d56Sopenharmony_ci .. versionchanged:: 3.5 6757db96d56Sopenharmony_ci Signature objects are picklable and :term:`hashable`. 6767db96d56Sopenharmony_ci 6777db96d56Sopenharmony_ci .. attribute:: Signature.empty 6787db96d56Sopenharmony_ci 6797db96d56Sopenharmony_ci A special class-level marker to specify absence of a return annotation. 6807db96d56Sopenharmony_ci 6817db96d56Sopenharmony_ci .. attribute:: Signature.parameters 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_ci An ordered mapping of parameters' names to the corresponding 6847db96d56Sopenharmony_ci :class:`Parameter` objects. Parameters appear in strict definition 6857db96d56Sopenharmony_ci order, including keyword-only parameters. 6867db96d56Sopenharmony_ci 6877db96d56Sopenharmony_ci .. versionchanged:: 3.7 6887db96d56Sopenharmony_ci Python only explicitly guaranteed that it preserved the declaration 6897db96d56Sopenharmony_ci order of keyword-only parameters as of version 3.7, although in practice 6907db96d56Sopenharmony_ci this order had always been preserved in Python 3. 6917db96d56Sopenharmony_ci 6927db96d56Sopenharmony_ci .. attribute:: Signature.return_annotation 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci The "return" annotation for the callable. If the callable has no "return" 6957db96d56Sopenharmony_ci annotation, this attribute is set to :attr:`Signature.empty`. 6967db96d56Sopenharmony_ci 6977db96d56Sopenharmony_ci .. method:: Signature.bind(*args, **kwargs) 6987db96d56Sopenharmony_ci 6997db96d56Sopenharmony_ci Create a mapping from positional and keyword arguments to parameters. 7007db96d56Sopenharmony_ci Returns :class:`BoundArguments` if ``*args`` and ``**kwargs`` match the 7017db96d56Sopenharmony_ci signature, or raises a :exc:`TypeError`. 7027db96d56Sopenharmony_ci 7037db96d56Sopenharmony_ci .. method:: Signature.bind_partial(*args, **kwargs) 7047db96d56Sopenharmony_ci 7057db96d56Sopenharmony_ci Works the same way as :meth:`Signature.bind`, but allows the omission of 7067db96d56Sopenharmony_ci some required arguments (mimics :func:`functools.partial` behavior.) 7077db96d56Sopenharmony_ci Returns :class:`BoundArguments`, or raises a :exc:`TypeError` if the 7087db96d56Sopenharmony_ci passed arguments do not match the signature. 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ci .. method:: Signature.replace(*[, parameters][, return_annotation]) 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_ci Create a new Signature instance based on the instance replace was invoked 7137db96d56Sopenharmony_ci on. It is possible to pass different ``parameters`` and/or 7147db96d56Sopenharmony_ci ``return_annotation`` to override the corresponding properties of the base 7157db96d56Sopenharmony_ci signature. To remove return_annotation from the copied Signature, pass in 7167db96d56Sopenharmony_ci :attr:`Signature.empty`. 7177db96d56Sopenharmony_ci 7187db96d56Sopenharmony_ci :: 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_ci >>> def test(a, b): 7217db96d56Sopenharmony_ci ... pass 7227db96d56Sopenharmony_ci >>> sig = signature(test) 7237db96d56Sopenharmony_ci >>> new_sig = sig.replace(return_annotation="new return anno") 7247db96d56Sopenharmony_ci >>> str(new_sig) 7257db96d56Sopenharmony_ci "(a, b) -> 'new return anno'" 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_ci .. classmethod:: Signature.from_callable(obj, *, follow_wrapped=True, globalns=None, localns=None) 7287db96d56Sopenharmony_ci 7297db96d56Sopenharmony_ci Return a :class:`Signature` (or its subclass) object for a given callable 7307db96d56Sopenharmony_ci ``obj``. Pass ``follow_wrapped=False`` to get a signature of ``obj`` 7317db96d56Sopenharmony_ci without unwrapping its ``__wrapped__`` chain. ``globalns`` and 7327db96d56Sopenharmony_ci ``localns`` will be used as the namespaces when resolving annotations. 7337db96d56Sopenharmony_ci 7347db96d56Sopenharmony_ci This method simplifies subclassing of :class:`Signature`:: 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ci class MySignature(Signature): 7377db96d56Sopenharmony_ci pass 7387db96d56Sopenharmony_ci sig = MySignature.from_callable(min) 7397db96d56Sopenharmony_ci assert isinstance(sig, MySignature) 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci .. versionadded:: 3.5 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci .. versionadded:: 3.10 7447db96d56Sopenharmony_ci ``globalns`` and ``localns`` parameters. 7457db96d56Sopenharmony_ci 7467db96d56Sopenharmony_ci 7477db96d56Sopenharmony_ci.. class:: Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty) 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ci Parameter objects are *immutable*. Instead of modifying a Parameter object, 7507db96d56Sopenharmony_ci you can use :meth:`Parameter.replace` to create a modified copy. 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ci .. versionchanged:: 3.5 7537db96d56Sopenharmony_ci Parameter objects are picklable and :term:`hashable`. 7547db96d56Sopenharmony_ci 7557db96d56Sopenharmony_ci .. attribute:: Parameter.empty 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci A special class-level marker to specify absence of default values and 7587db96d56Sopenharmony_ci annotations. 7597db96d56Sopenharmony_ci 7607db96d56Sopenharmony_ci .. attribute:: Parameter.name 7617db96d56Sopenharmony_ci 7627db96d56Sopenharmony_ci The name of the parameter as a string. The name must be a valid 7637db96d56Sopenharmony_ci Python identifier. 7647db96d56Sopenharmony_ci 7657db96d56Sopenharmony_ci .. impl-detail:: 7667db96d56Sopenharmony_ci 7677db96d56Sopenharmony_ci CPython generates implicit parameter names of the form ``.0`` on the 7687db96d56Sopenharmony_ci code objects used to implement comprehensions and generator 7697db96d56Sopenharmony_ci expressions. 7707db96d56Sopenharmony_ci 7717db96d56Sopenharmony_ci .. versionchanged:: 3.6 7727db96d56Sopenharmony_ci These parameter names are exposed by this module as names like 7737db96d56Sopenharmony_ci ``implicit0``. 7747db96d56Sopenharmony_ci 7757db96d56Sopenharmony_ci .. attribute:: Parameter.default 7767db96d56Sopenharmony_ci 7777db96d56Sopenharmony_ci The default value for the parameter. If the parameter has no default 7787db96d56Sopenharmony_ci value, this attribute is set to :attr:`Parameter.empty`. 7797db96d56Sopenharmony_ci 7807db96d56Sopenharmony_ci .. attribute:: Parameter.annotation 7817db96d56Sopenharmony_ci 7827db96d56Sopenharmony_ci The annotation for the parameter. If the parameter has no annotation, 7837db96d56Sopenharmony_ci this attribute is set to :attr:`Parameter.empty`. 7847db96d56Sopenharmony_ci 7857db96d56Sopenharmony_ci .. attribute:: Parameter.kind 7867db96d56Sopenharmony_ci 7877db96d56Sopenharmony_ci Describes how argument values are bound to the parameter. The possible 7887db96d56Sopenharmony_ci values are accessible via :class:`Parameter` (like ``Parameter.KEYWORD_ONLY``), 7897db96d56Sopenharmony_ci and support comparison and ordering, in the following order: 7907db96d56Sopenharmony_ci 7917db96d56Sopenharmony_ci .. tabularcolumns:: |l|L| 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 7947db96d56Sopenharmony_ci | Name | Meaning | 7957db96d56Sopenharmony_ci +========================+==============================================+ 7967db96d56Sopenharmony_ci | *POSITIONAL_ONLY* | Value must be supplied as a positional | 7977db96d56Sopenharmony_ci | | argument. Positional only parameters are | 7987db96d56Sopenharmony_ci | | those which appear before a ``/`` entry (if | 7997db96d56Sopenharmony_ci | | present) in a Python function definition. | 8007db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 8017db96d56Sopenharmony_ci | *POSITIONAL_OR_KEYWORD*| Value may be supplied as either a keyword or | 8027db96d56Sopenharmony_ci | | positional argument (this is the standard | 8037db96d56Sopenharmony_ci | | binding behaviour for functions implemented | 8047db96d56Sopenharmony_ci | | in Python.) | 8057db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 8067db96d56Sopenharmony_ci | *VAR_POSITIONAL* | A tuple of positional arguments that aren't | 8077db96d56Sopenharmony_ci | | bound to any other parameter. This | 8087db96d56Sopenharmony_ci | | corresponds to a ``*args`` parameter in a | 8097db96d56Sopenharmony_ci | | Python function definition. | 8107db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 8117db96d56Sopenharmony_ci | *KEYWORD_ONLY* | Value must be supplied as a keyword argument.| 8127db96d56Sopenharmony_ci | | Keyword only parameters are those which | 8137db96d56Sopenharmony_ci | | appear after a ``*`` or ``*args`` entry in a | 8147db96d56Sopenharmony_ci | | Python function definition. | 8157db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 8167db96d56Sopenharmony_ci | *VAR_KEYWORD* | A dict of keyword arguments that aren't bound| 8177db96d56Sopenharmony_ci | | to any other parameter. This corresponds to a| 8187db96d56Sopenharmony_ci | | ``**kwargs`` parameter in a Python function | 8197db96d56Sopenharmony_ci | | definition. | 8207db96d56Sopenharmony_ci +------------------------+----------------------------------------------+ 8217db96d56Sopenharmony_ci 8227db96d56Sopenharmony_ci Example: print all keyword-only arguments without default values:: 8237db96d56Sopenharmony_ci 8247db96d56Sopenharmony_ci >>> def foo(a, b, *, c, d=10): 8257db96d56Sopenharmony_ci ... pass 8267db96d56Sopenharmony_ci 8277db96d56Sopenharmony_ci >>> sig = signature(foo) 8287db96d56Sopenharmony_ci >>> for param in sig.parameters.values(): 8297db96d56Sopenharmony_ci ... if (param.kind == param.KEYWORD_ONLY and 8307db96d56Sopenharmony_ci ... param.default is param.empty): 8317db96d56Sopenharmony_ci ... print('Parameter:', param) 8327db96d56Sopenharmony_ci Parameter: c 8337db96d56Sopenharmony_ci 8347db96d56Sopenharmony_ci .. attribute:: Parameter.kind.description 8357db96d56Sopenharmony_ci 8367db96d56Sopenharmony_ci Describes a enum value of Parameter.kind. 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci .. versionadded:: 3.8 8397db96d56Sopenharmony_ci 8407db96d56Sopenharmony_ci Example: print all descriptions of arguments:: 8417db96d56Sopenharmony_ci 8427db96d56Sopenharmony_ci >>> def foo(a, b, *, c, d=10): 8437db96d56Sopenharmony_ci ... pass 8447db96d56Sopenharmony_ci 8457db96d56Sopenharmony_ci >>> sig = signature(foo) 8467db96d56Sopenharmony_ci >>> for param in sig.parameters.values(): 8477db96d56Sopenharmony_ci ... print(param.kind.description) 8487db96d56Sopenharmony_ci positional or keyword 8497db96d56Sopenharmony_ci positional or keyword 8507db96d56Sopenharmony_ci keyword-only 8517db96d56Sopenharmony_ci keyword-only 8527db96d56Sopenharmony_ci 8537db96d56Sopenharmony_ci .. method:: Parameter.replace(*[, name][, kind][, default][, annotation]) 8547db96d56Sopenharmony_ci 8557db96d56Sopenharmony_ci Create a new Parameter instance based on the instance replaced was invoked 8567db96d56Sopenharmony_ci on. To override a :class:`Parameter` attribute, pass the corresponding 8577db96d56Sopenharmony_ci argument. To remove a default value or/and an annotation from a 8587db96d56Sopenharmony_ci Parameter, pass :attr:`Parameter.empty`. 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_ci :: 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_ci >>> from inspect import Parameter 8637db96d56Sopenharmony_ci >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) 8647db96d56Sopenharmony_ci >>> str(param) 8657db96d56Sopenharmony_ci 'foo=42' 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci >>> str(param.replace()) # Will create a shallow copy of 'param' 8687db96d56Sopenharmony_ci 'foo=42' 8697db96d56Sopenharmony_ci 8707db96d56Sopenharmony_ci >>> str(param.replace(default=Parameter.empty, annotation='spam')) 8717db96d56Sopenharmony_ci "foo:'spam'" 8727db96d56Sopenharmony_ci 8737db96d56Sopenharmony_ci .. versionchanged:: 3.4 8747db96d56Sopenharmony_ci In Python 3.3 Parameter objects were allowed to have ``name`` set 8757db96d56Sopenharmony_ci to ``None`` if their ``kind`` was set to ``POSITIONAL_ONLY``. 8767db96d56Sopenharmony_ci This is no longer permitted. 8777db96d56Sopenharmony_ci 8787db96d56Sopenharmony_ci.. class:: BoundArguments 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_ci Result of a :meth:`Signature.bind` or :meth:`Signature.bind_partial` call. 8817db96d56Sopenharmony_ci Holds the mapping of arguments to the function's parameters. 8827db96d56Sopenharmony_ci 8837db96d56Sopenharmony_ci .. attribute:: BoundArguments.arguments 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci A mutable mapping of parameters' names to arguments' values. 8867db96d56Sopenharmony_ci Contains only explicitly bound arguments. Changes in :attr:`arguments` 8877db96d56Sopenharmony_ci will reflect in :attr:`args` and :attr:`kwargs`. 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_ci Should be used in conjunction with :attr:`Signature.parameters` for any 8907db96d56Sopenharmony_ci argument processing purposes. 8917db96d56Sopenharmony_ci 8927db96d56Sopenharmony_ci .. note:: 8937db96d56Sopenharmony_ci 8947db96d56Sopenharmony_ci Arguments for which :meth:`Signature.bind` or 8957db96d56Sopenharmony_ci :meth:`Signature.bind_partial` relied on a default value are skipped. 8967db96d56Sopenharmony_ci However, if needed, use :meth:`BoundArguments.apply_defaults` to add 8977db96d56Sopenharmony_ci them. 8987db96d56Sopenharmony_ci 8997db96d56Sopenharmony_ci .. versionchanged:: 3.9 9007db96d56Sopenharmony_ci :attr:`arguments` is now of type :class:`dict`. Formerly, it was of 9017db96d56Sopenharmony_ci type :class:`collections.OrderedDict`. 9027db96d56Sopenharmony_ci 9037db96d56Sopenharmony_ci .. attribute:: BoundArguments.args 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_ci A tuple of positional arguments values. Dynamically computed from the 9067db96d56Sopenharmony_ci :attr:`arguments` attribute. 9077db96d56Sopenharmony_ci 9087db96d56Sopenharmony_ci .. attribute:: BoundArguments.kwargs 9097db96d56Sopenharmony_ci 9107db96d56Sopenharmony_ci A dict of keyword arguments values. Dynamically computed from the 9117db96d56Sopenharmony_ci :attr:`arguments` attribute. 9127db96d56Sopenharmony_ci 9137db96d56Sopenharmony_ci .. attribute:: BoundArguments.signature 9147db96d56Sopenharmony_ci 9157db96d56Sopenharmony_ci A reference to the parent :class:`Signature` object. 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci .. method:: BoundArguments.apply_defaults() 9187db96d56Sopenharmony_ci 9197db96d56Sopenharmony_ci Set default values for missing arguments. 9207db96d56Sopenharmony_ci 9217db96d56Sopenharmony_ci For variable-positional arguments (``*args``) the default is an 9227db96d56Sopenharmony_ci empty tuple. 9237db96d56Sopenharmony_ci 9247db96d56Sopenharmony_ci For variable-keyword arguments (``**kwargs``) the default is an 9257db96d56Sopenharmony_ci empty dict. 9267db96d56Sopenharmony_ci 9277db96d56Sopenharmony_ci :: 9287db96d56Sopenharmony_ci 9297db96d56Sopenharmony_ci >>> def foo(a, b='ham', *args): pass 9307db96d56Sopenharmony_ci >>> ba = inspect.signature(foo).bind('spam') 9317db96d56Sopenharmony_ci >>> ba.apply_defaults() 9327db96d56Sopenharmony_ci >>> ba.arguments 9337db96d56Sopenharmony_ci {'a': 'spam', 'b': 'ham', 'args': ()} 9347db96d56Sopenharmony_ci 9357db96d56Sopenharmony_ci .. versionadded:: 3.5 9367db96d56Sopenharmony_ci 9377db96d56Sopenharmony_ci The :attr:`args` and :attr:`kwargs` properties can be used to invoke 9387db96d56Sopenharmony_ci functions:: 9397db96d56Sopenharmony_ci 9407db96d56Sopenharmony_ci def test(a, *, b): 9417db96d56Sopenharmony_ci ... 9427db96d56Sopenharmony_ci 9437db96d56Sopenharmony_ci sig = signature(test) 9447db96d56Sopenharmony_ci ba = sig.bind(10, b=20) 9457db96d56Sopenharmony_ci test(*ba.args, **ba.kwargs) 9467db96d56Sopenharmony_ci 9477db96d56Sopenharmony_ci 9487db96d56Sopenharmony_ci.. seealso:: 9497db96d56Sopenharmony_ci 9507db96d56Sopenharmony_ci :pep:`362` - Function Signature Object. 9517db96d56Sopenharmony_ci The detailed specification, implementation details and examples. 9527db96d56Sopenharmony_ci 9537db96d56Sopenharmony_ci 9547db96d56Sopenharmony_ci.. _inspect-classes-functions: 9557db96d56Sopenharmony_ci 9567db96d56Sopenharmony_ciClasses and functions 9577db96d56Sopenharmony_ci--------------------- 9587db96d56Sopenharmony_ci 9597db96d56Sopenharmony_ci.. function:: getclasstree(classes, unique=False) 9607db96d56Sopenharmony_ci 9617db96d56Sopenharmony_ci Arrange the given list of classes into a hierarchy of nested lists. Where a 9627db96d56Sopenharmony_ci nested list appears, it contains classes derived from the class whose entry 9637db96d56Sopenharmony_ci immediately precedes the list. Each entry is a 2-tuple containing a class and a 9647db96d56Sopenharmony_ci tuple of its base classes. If the *unique* argument is true, exactly one entry 9657db96d56Sopenharmony_ci appears in the returned structure for each class in the given list. Otherwise, 9667db96d56Sopenharmony_ci classes using multiple inheritance and their descendants will appear multiple 9677db96d56Sopenharmony_ci times. 9687db96d56Sopenharmony_ci 9697db96d56Sopenharmony_ci 9707db96d56Sopenharmony_ci.. function:: getfullargspec(func) 9717db96d56Sopenharmony_ci 9727db96d56Sopenharmony_ci Get the names and default values of a Python function's parameters. A 9737db96d56Sopenharmony_ci :term:`named tuple` is returned: 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_ci ``FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, 9767db96d56Sopenharmony_ci annotations)`` 9777db96d56Sopenharmony_ci 9787db96d56Sopenharmony_ci *args* is a list of the positional parameter names. 9797db96d56Sopenharmony_ci *varargs* is the name of the ``*`` parameter or ``None`` if arbitrary 9807db96d56Sopenharmony_ci positional arguments are not accepted. 9817db96d56Sopenharmony_ci *varkw* is the name of the ``**`` parameter or ``None`` if arbitrary 9827db96d56Sopenharmony_ci keyword arguments are not accepted. 9837db96d56Sopenharmony_ci *defaults* is an *n*-tuple of default argument values corresponding to the 9847db96d56Sopenharmony_ci last *n* positional parameters, or ``None`` if there are no such defaults 9857db96d56Sopenharmony_ci defined. 9867db96d56Sopenharmony_ci *kwonlyargs* is a list of keyword-only parameter names in declaration order. 9877db96d56Sopenharmony_ci *kwonlydefaults* is a dictionary mapping parameter names from *kwonlyargs* 9887db96d56Sopenharmony_ci to the default values used if no argument is supplied. 9897db96d56Sopenharmony_ci *annotations* is a dictionary mapping parameter names to annotations. 9907db96d56Sopenharmony_ci The special key ``"return"`` is used to report the function return value 9917db96d56Sopenharmony_ci annotation (if any). 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ci Note that :func:`signature` and 9947db96d56Sopenharmony_ci :ref:`Signature Object <inspect-signature-object>` provide the recommended 9957db96d56Sopenharmony_ci API for callable introspection, and support additional behaviours (like 9967db96d56Sopenharmony_ci positional-only arguments) that are sometimes encountered in extension module 9977db96d56Sopenharmony_ci APIs. This function is retained primarily for use in code that needs to 9987db96d56Sopenharmony_ci maintain compatibility with the Python 2 ``inspect`` module API. 9997db96d56Sopenharmony_ci 10007db96d56Sopenharmony_ci .. versionchanged:: 3.4 10017db96d56Sopenharmony_ci This function is now based on :func:`signature`, but still ignores 10027db96d56Sopenharmony_ci ``__wrapped__`` attributes and includes the already bound first 10037db96d56Sopenharmony_ci parameter in the signature output for bound methods. 10047db96d56Sopenharmony_ci 10057db96d56Sopenharmony_ci .. versionchanged:: 3.6 10067db96d56Sopenharmony_ci This method was previously documented as deprecated in favour of 10077db96d56Sopenharmony_ci :func:`signature` in Python 3.5, but that decision has been reversed 10087db96d56Sopenharmony_ci in order to restore a clearly supported standard interface for 10097db96d56Sopenharmony_ci single-source Python 2/3 code migrating away from the legacy 10107db96d56Sopenharmony_ci :func:`getargspec` API. 10117db96d56Sopenharmony_ci 10127db96d56Sopenharmony_ci .. versionchanged:: 3.7 10137db96d56Sopenharmony_ci Python only explicitly guaranteed that it preserved the declaration 10147db96d56Sopenharmony_ci order of keyword-only parameters as of version 3.7, although in practice 10157db96d56Sopenharmony_ci this order had always been preserved in Python 3. 10167db96d56Sopenharmony_ci 10177db96d56Sopenharmony_ci 10187db96d56Sopenharmony_ci.. function:: getargvalues(frame) 10197db96d56Sopenharmony_ci 10207db96d56Sopenharmony_ci Get information about arguments passed into a particular frame. A 10217db96d56Sopenharmony_ci :term:`named tuple` ``ArgInfo(args, varargs, keywords, locals)`` is 10227db96d56Sopenharmony_ci returned. *args* is a list of the argument names. *varargs* and *keywords* 10237db96d56Sopenharmony_ci are the names of the ``*`` and ``**`` arguments or ``None``. *locals* is the 10247db96d56Sopenharmony_ci locals dictionary of the given frame. 10257db96d56Sopenharmony_ci 10267db96d56Sopenharmony_ci .. note:: 10277db96d56Sopenharmony_ci This function was inadvertently marked as deprecated in Python 3.5. 10287db96d56Sopenharmony_ci 10297db96d56Sopenharmony_ci 10307db96d56Sopenharmony_ci.. function:: formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue]) 10317db96d56Sopenharmony_ci 10327db96d56Sopenharmony_ci Format a pretty argument spec from the four values returned by 10337db96d56Sopenharmony_ci :func:`getargvalues`. The format\* arguments are the corresponding optional 10347db96d56Sopenharmony_ci formatting functions that are called to turn names and values into strings. 10357db96d56Sopenharmony_ci 10367db96d56Sopenharmony_ci .. note:: 10377db96d56Sopenharmony_ci This function was inadvertently marked as deprecated in Python 3.5. 10387db96d56Sopenharmony_ci 10397db96d56Sopenharmony_ci 10407db96d56Sopenharmony_ci.. function:: getmro(cls) 10417db96d56Sopenharmony_ci 10427db96d56Sopenharmony_ci Return a tuple of class cls's base classes, including cls, in method resolution 10437db96d56Sopenharmony_ci order. No class appears more than once in this tuple. Note that the method 10447db96d56Sopenharmony_ci resolution order depends on cls's type. Unless a very peculiar user-defined 10457db96d56Sopenharmony_ci metatype is in use, cls will be the first element of the tuple. 10467db96d56Sopenharmony_ci 10477db96d56Sopenharmony_ci 10487db96d56Sopenharmony_ci.. function:: getcallargs(func, /, *args, **kwds) 10497db96d56Sopenharmony_ci 10507db96d56Sopenharmony_ci Bind the *args* and *kwds* to the argument names of the Python function or 10517db96d56Sopenharmony_ci method *func*, as if it was called with them. For bound methods, bind also the 10527db96d56Sopenharmony_ci first argument (typically named ``self``) to the associated instance. A dict 10537db96d56Sopenharmony_ci is returned, mapping the argument names (including the names of the ``*`` and 10547db96d56Sopenharmony_ci ``**`` arguments, if any) to their values from *args* and *kwds*. In case of 10557db96d56Sopenharmony_ci invoking *func* incorrectly, i.e. whenever ``func(*args, **kwds)`` would raise 10567db96d56Sopenharmony_ci an exception because of incompatible signature, an exception of the same type 10577db96d56Sopenharmony_ci and the same or similar message is raised. For example:: 10587db96d56Sopenharmony_ci 10597db96d56Sopenharmony_ci >>> from inspect import getcallargs 10607db96d56Sopenharmony_ci >>> def f(a, b=1, *pos, **named): 10617db96d56Sopenharmony_ci ... pass 10627db96d56Sopenharmony_ci >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)} 10637db96d56Sopenharmony_ci True 10647db96d56Sopenharmony_ci >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()} 10657db96d56Sopenharmony_ci True 10667db96d56Sopenharmony_ci >>> getcallargs(f) 10677db96d56Sopenharmony_ci Traceback (most recent call last): 10687db96d56Sopenharmony_ci ... 10697db96d56Sopenharmony_ci TypeError: f() missing 1 required positional argument: 'a' 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci .. versionadded:: 3.2 10727db96d56Sopenharmony_ci 10737db96d56Sopenharmony_ci .. deprecated:: 3.5 10747db96d56Sopenharmony_ci Use :meth:`Signature.bind` and :meth:`Signature.bind_partial` instead. 10757db96d56Sopenharmony_ci 10767db96d56Sopenharmony_ci 10777db96d56Sopenharmony_ci.. function:: getclosurevars(func) 10787db96d56Sopenharmony_ci 10797db96d56Sopenharmony_ci Get the mapping of external name references in a Python function or 10807db96d56Sopenharmony_ci method *func* to their current values. A 10817db96d56Sopenharmony_ci :term:`named tuple` ``ClosureVars(nonlocals, globals, builtins, unbound)`` 10827db96d56Sopenharmony_ci is returned. *nonlocals* maps referenced names to lexical closure 10837db96d56Sopenharmony_ci variables, *globals* to the function's module globals and *builtins* to 10847db96d56Sopenharmony_ci the builtins visible from the function body. *unbound* is the set of names 10857db96d56Sopenharmony_ci referenced in the function that could not be resolved at all given the 10867db96d56Sopenharmony_ci current module globals and builtins. 10877db96d56Sopenharmony_ci 10887db96d56Sopenharmony_ci :exc:`TypeError` is raised if *func* is not a Python function or method. 10897db96d56Sopenharmony_ci 10907db96d56Sopenharmony_ci .. versionadded:: 3.3 10917db96d56Sopenharmony_ci 10927db96d56Sopenharmony_ci 10937db96d56Sopenharmony_ci.. function:: unwrap(func, *, stop=None) 10947db96d56Sopenharmony_ci 10957db96d56Sopenharmony_ci Get the object wrapped by *func*. It follows the chain of :attr:`__wrapped__` 10967db96d56Sopenharmony_ci attributes returning the last object in the chain. 10977db96d56Sopenharmony_ci 10987db96d56Sopenharmony_ci *stop* is an optional callback accepting an object in the wrapper chain 10997db96d56Sopenharmony_ci as its sole argument that allows the unwrapping to be terminated early if 11007db96d56Sopenharmony_ci the callback returns a true value. If the callback never returns a true 11017db96d56Sopenharmony_ci value, the last object in the chain is returned as usual. For example, 11027db96d56Sopenharmony_ci :func:`signature` uses this to stop unwrapping if any object in the 11037db96d56Sopenharmony_ci chain has a ``__signature__`` attribute defined. 11047db96d56Sopenharmony_ci 11057db96d56Sopenharmony_ci :exc:`ValueError` is raised if a cycle is encountered. 11067db96d56Sopenharmony_ci 11077db96d56Sopenharmony_ci .. versionadded:: 3.4 11087db96d56Sopenharmony_ci 11097db96d56Sopenharmony_ci 11107db96d56Sopenharmony_ci.. function:: get_annotations(obj, *, globals=None, locals=None, eval_str=False) 11117db96d56Sopenharmony_ci 11127db96d56Sopenharmony_ci Compute the annotations dict for an object. 11137db96d56Sopenharmony_ci 11147db96d56Sopenharmony_ci ``obj`` may be a callable, class, or module. 11157db96d56Sopenharmony_ci Passing in an object of any other type raises :exc:`TypeError`. 11167db96d56Sopenharmony_ci 11177db96d56Sopenharmony_ci Returns a dict. ``get_annotations()`` returns a new dict every time 11187db96d56Sopenharmony_ci it's called; calling it twice on the same object will return two 11197db96d56Sopenharmony_ci different but equivalent dicts. 11207db96d56Sopenharmony_ci 11217db96d56Sopenharmony_ci This function handles several details for you: 11227db96d56Sopenharmony_ci 11237db96d56Sopenharmony_ci * If ``eval_str`` is true, values of type ``str`` will 11247db96d56Sopenharmony_ci be un-stringized using :func:`eval()`. This is intended 11257db96d56Sopenharmony_ci for use with stringized annotations 11267db96d56Sopenharmony_ci (``from __future__ import annotations``). 11277db96d56Sopenharmony_ci * If ``obj`` doesn't have an annotations dict, returns an 11287db96d56Sopenharmony_ci empty dict. (Functions and methods always have an 11297db96d56Sopenharmony_ci annotations dict; classes, modules, and other types of 11307db96d56Sopenharmony_ci callables may not.) 11317db96d56Sopenharmony_ci * Ignores inherited annotations on classes. If a class 11327db96d56Sopenharmony_ci doesn't have its own annotations dict, returns an empty dict. 11337db96d56Sopenharmony_ci * All accesses to object members and dict values are done 11347db96d56Sopenharmony_ci using ``getattr()`` and ``dict.get()`` for safety. 11357db96d56Sopenharmony_ci * Always, always, always returns a freshly created dict. 11367db96d56Sopenharmony_ci 11377db96d56Sopenharmony_ci ``eval_str`` controls whether or not values of type ``str`` are replaced 11387db96d56Sopenharmony_ci with the result of calling :func:`eval()` on those values: 11397db96d56Sopenharmony_ci 11407db96d56Sopenharmony_ci * If eval_str is true, :func:`eval()` is called on values of type ``str``. 11417db96d56Sopenharmony_ci (Note that ``get_annotations`` doesn't catch exceptions; if :func:`eval()` 11427db96d56Sopenharmony_ci raises an exception, it will unwind the stack past the ``get_annotations`` 11437db96d56Sopenharmony_ci call.) 11447db96d56Sopenharmony_ci * If eval_str is false (the default), values of type ``str`` are unchanged. 11457db96d56Sopenharmony_ci 11467db96d56Sopenharmony_ci ``globals`` and ``locals`` are passed in to :func:`eval()`; see the documentation 11477db96d56Sopenharmony_ci for :func:`eval()` for more information. If ``globals`` or ``locals`` 11487db96d56Sopenharmony_ci is ``None``, this function may replace that value with a context-specific 11497db96d56Sopenharmony_ci default, contingent on ``type(obj)``: 11507db96d56Sopenharmony_ci 11517db96d56Sopenharmony_ci * If ``obj`` is a module, ``globals`` defaults to ``obj.__dict__``. 11527db96d56Sopenharmony_ci * If ``obj`` is a class, ``globals`` defaults to 11537db96d56Sopenharmony_ci ``sys.modules[obj.__module__].__dict__`` and ``locals`` defaults 11547db96d56Sopenharmony_ci to the ``obj`` class namespace. 11557db96d56Sopenharmony_ci * If ``obj`` is a callable, ``globals`` defaults to ``obj.__globals__``, 11567db96d56Sopenharmony_ci although if ``obj`` is a wrapped function (using 11577db96d56Sopenharmony_ci ``functools.update_wrapper()``) it is first unwrapped. 11587db96d56Sopenharmony_ci 11597db96d56Sopenharmony_ci Calling ``get_annotations`` is best practice for accessing the 11607db96d56Sopenharmony_ci annotations dict of any object. See :ref:`annotations-howto` for 11617db96d56Sopenharmony_ci more information on annotations best practices. 11627db96d56Sopenharmony_ci 11637db96d56Sopenharmony_ci .. versionadded:: 3.10 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ci 11667db96d56Sopenharmony_ci.. _inspect-stack: 11677db96d56Sopenharmony_ci 11687db96d56Sopenharmony_ciThe interpreter stack 11697db96d56Sopenharmony_ci--------------------- 11707db96d56Sopenharmony_ci 11717db96d56Sopenharmony_ciSome of the following functions return 11727db96d56Sopenharmony_ci:class:`FrameInfo` objects. For backwards compatibility these objects allow 11737db96d56Sopenharmony_cituple-like operations on all attributes except ``positions``. This behavior 11747db96d56Sopenharmony_ciis considered deprecated and may be removed in the future. 11757db96d56Sopenharmony_ci 11767db96d56Sopenharmony_ci.. class:: FrameInfo 11777db96d56Sopenharmony_ci 11787db96d56Sopenharmony_ci .. attribute:: frame 11797db96d56Sopenharmony_ci 11807db96d56Sopenharmony_ci The :ref:`frame object <frame-objects>` that the record corresponds to. 11817db96d56Sopenharmony_ci 11827db96d56Sopenharmony_ci .. attribute:: filename 11837db96d56Sopenharmony_ci 11847db96d56Sopenharmony_ci The file name associated with the code being executed by the frame this record 11857db96d56Sopenharmony_ci corresponds to. 11867db96d56Sopenharmony_ci 11877db96d56Sopenharmony_ci .. attribute:: lineno 11887db96d56Sopenharmony_ci 11897db96d56Sopenharmony_ci The line number of the current line associated with the code being 11907db96d56Sopenharmony_ci executed by the frame this record corresponds to. 11917db96d56Sopenharmony_ci 11927db96d56Sopenharmony_ci .. attribute:: function 11937db96d56Sopenharmony_ci 11947db96d56Sopenharmony_ci The function name that is being executed by the frame this record corresponds to. 11957db96d56Sopenharmony_ci 11967db96d56Sopenharmony_ci .. attribute:: code_context 11977db96d56Sopenharmony_ci 11987db96d56Sopenharmony_ci A list of lines of context from the source code that's being executed by the frame 11997db96d56Sopenharmony_ci this record corresponds to. 12007db96d56Sopenharmony_ci 12017db96d56Sopenharmony_ci .. attribute:: index 12027db96d56Sopenharmony_ci 12037db96d56Sopenharmony_ci The index of the current line being executed in the :attr:`code_context` list. 12047db96d56Sopenharmony_ci 12057db96d56Sopenharmony_ci .. attribute:: positions 12067db96d56Sopenharmony_ci 12077db96d56Sopenharmony_ci A :class:`dis.Positions` object containing the start line number, end line 12087db96d56Sopenharmony_ci number, start column offset, and end column offset associated with the 12097db96d56Sopenharmony_ci instruction being executed by the frame this record corresponds to. 12107db96d56Sopenharmony_ci 12117db96d56Sopenharmony_ci .. versionchanged:: 3.5 12127db96d56Sopenharmony_ci Return a :term:`named tuple` instead of a :class:`tuple`. 12137db96d56Sopenharmony_ci 12147db96d56Sopenharmony_ci .. versionchanged:: 3.11 12157db96d56Sopenharmony_ci :class:`!FrameInfo` is now a class instance 12167db96d56Sopenharmony_ci (that is backwards compatible with the previous :term:`named tuple`). 12177db96d56Sopenharmony_ci 12187db96d56Sopenharmony_ci 12197db96d56Sopenharmony_ci.. class:: Traceback 12207db96d56Sopenharmony_ci 12217db96d56Sopenharmony_ci .. attribute:: filename 12227db96d56Sopenharmony_ci 12237db96d56Sopenharmony_ci The file name associated with the code being executed by the frame this traceback 12247db96d56Sopenharmony_ci corresponds to. 12257db96d56Sopenharmony_ci 12267db96d56Sopenharmony_ci .. attribute:: lineno 12277db96d56Sopenharmony_ci 12287db96d56Sopenharmony_ci The line number of the current line associated with the code being 12297db96d56Sopenharmony_ci executed by the frame this traceback corresponds to. 12307db96d56Sopenharmony_ci 12317db96d56Sopenharmony_ci .. attribute:: function 12327db96d56Sopenharmony_ci 12337db96d56Sopenharmony_ci The function name that is being executed by the frame this traceback corresponds to. 12347db96d56Sopenharmony_ci 12357db96d56Sopenharmony_ci .. attribute:: code_context 12367db96d56Sopenharmony_ci 12377db96d56Sopenharmony_ci A list of lines of context from the source code that's being executed by the frame 12387db96d56Sopenharmony_ci this traceback corresponds to. 12397db96d56Sopenharmony_ci 12407db96d56Sopenharmony_ci .. attribute:: index 12417db96d56Sopenharmony_ci 12427db96d56Sopenharmony_ci The index of the current line being executed in the :attr:`code_context` list. 12437db96d56Sopenharmony_ci 12447db96d56Sopenharmony_ci .. attribute:: positions 12457db96d56Sopenharmony_ci 12467db96d56Sopenharmony_ci A :class:`dis.Positions` object containing the start line number, end 12477db96d56Sopenharmony_ci line number, start column offset, and end column offset associated with 12487db96d56Sopenharmony_ci the instruction being executed by the frame this traceback corresponds 12497db96d56Sopenharmony_ci to. 12507db96d56Sopenharmony_ci 12517db96d56Sopenharmony_ci .. versionchanged:: 3.11 12527db96d56Sopenharmony_ci :class:`!Traceback` is now a class instance 12537db96d56Sopenharmony_ci (that is backwards compatible with the previous :term:`named tuple`). 12547db96d56Sopenharmony_ci 12557db96d56Sopenharmony_ci 12567db96d56Sopenharmony_ci.. note:: 12577db96d56Sopenharmony_ci 12587db96d56Sopenharmony_ci Keeping references to frame objects, as found in the first element of the frame 12597db96d56Sopenharmony_ci records these functions return, can cause your program to create reference 12607db96d56Sopenharmony_ci cycles. Once a reference cycle has been created, the lifespan of all objects 12617db96d56Sopenharmony_ci which can be accessed from the objects which form the cycle can become much 12627db96d56Sopenharmony_ci longer even if Python's optional cycle detector is enabled. If such cycles must 12637db96d56Sopenharmony_ci be created, it is important to ensure they are explicitly broken to avoid the 12647db96d56Sopenharmony_ci delayed destruction of objects and increased memory consumption which occurs. 12657db96d56Sopenharmony_ci 12667db96d56Sopenharmony_ci Though the cycle detector will catch these, destruction of the frames (and local 12677db96d56Sopenharmony_ci variables) can be made deterministic by removing the cycle in a 12687db96d56Sopenharmony_ci :keyword:`finally` clause. This is also important if the cycle detector was 12697db96d56Sopenharmony_ci disabled when Python was compiled or using :func:`gc.disable`. For example:: 12707db96d56Sopenharmony_ci 12717db96d56Sopenharmony_ci def handle_stackframe_without_leak(): 12727db96d56Sopenharmony_ci frame = inspect.currentframe() 12737db96d56Sopenharmony_ci try: 12747db96d56Sopenharmony_ci # do something with the frame 12757db96d56Sopenharmony_ci finally: 12767db96d56Sopenharmony_ci del frame 12777db96d56Sopenharmony_ci 12787db96d56Sopenharmony_ci If you want to keep the frame around (for example to print a traceback 12797db96d56Sopenharmony_ci later), you can also break reference cycles by using the 12807db96d56Sopenharmony_ci :meth:`frame.clear` method. 12817db96d56Sopenharmony_ci 12827db96d56Sopenharmony_ciThe optional *context* argument supported by most of these functions specifies 12837db96d56Sopenharmony_cithe number of lines of context to return, which are centered around the current 12847db96d56Sopenharmony_ciline. 12857db96d56Sopenharmony_ci 12867db96d56Sopenharmony_ci 12877db96d56Sopenharmony_ci.. function:: getframeinfo(frame, context=1) 12887db96d56Sopenharmony_ci 12897db96d56Sopenharmony_ci Get information about a frame or traceback object. A :class:`Traceback` object 12907db96d56Sopenharmony_ci is returned. 12917db96d56Sopenharmony_ci 12927db96d56Sopenharmony_ci .. versionchanged:: 3.11 12937db96d56Sopenharmony_ci A :class:`Traceback` object is returned instead of a named tuple. 12947db96d56Sopenharmony_ci 12957db96d56Sopenharmony_ci.. function:: getouterframes(frame, context=1) 12967db96d56Sopenharmony_ci 12977db96d56Sopenharmony_ci Get a list of :class:`FrameInfo` objects for a frame and all outer frames. 12987db96d56Sopenharmony_ci These frames represent the calls that lead to the creation of *frame*. The 12997db96d56Sopenharmony_ci first entry in the returned list represents *frame*; the last entry 13007db96d56Sopenharmony_ci represents the outermost call on *frame*'s stack. 13017db96d56Sopenharmony_ci 13027db96d56Sopenharmony_ci .. versionchanged:: 3.5 13037db96d56Sopenharmony_ci A list of :term:`named tuples <named tuple>` 13047db96d56Sopenharmony_ci ``FrameInfo(frame, filename, lineno, function, code_context, index)`` 13057db96d56Sopenharmony_ci is returned. 13067db96d56Sopenharmony_ci 13077db96d56Sopenharmony_ci .. versionchanged:: 3.11 13087db96d56Sopenharmony_ci A list of :class:`FrameInfo` objects is returned. 13097db96d56Sopenharmony_ci 13107db96d56Sopenharmony_ci.. function:: getinnerframes(traceback, context=1) 13117db96d56Sopenharmony_ci 13127db96d56Sopenharmony_ci Get a list of :class:`FrameInfo` objects for a traceback's frame and all 13137db96d56Sopenharmony_ci inner frames. These frames represent calls made as a consequence of *frame*. 13147db96d56Sopenharmony_ci The first entry in the list represents *traceback*; the last entry represents 13157db96d56Sopenharmony_ci where the exception was raised. 13167db96d56Sopenharmony_ci 13177db96d56Sopenharmony_ci .. versionchanged:: 3.5 13187db96d56Sopenharmony_ci A list of :term:`named tuples <named tuple>` 13197db96d56Sopenharmony_ci ``FrameInfo(frame, filename, lineno, function, code_context, index)`` 13207db96d56Sopenharmony_ci is returned. 13217db96d56Sopenharmony_ci 13227db96d56Sopenharmony_ci .. versionchanged:: 3.11 13237db96d56Sopenharmony_ci A list of :class:`FrameInfo` objects is returned. 13247db96d56Sopenharmony_ci 13257db96d56Sopenharmony_ci.. function:: currentframe() 13267db96d56Sopenharmony_ci 13277db96d56Sopenharmony_ci Return the frame object for the caller's stack frame. 13287db96d56Sopenharmony_ci 13297db96d56Sopenharmony_ci .. impl-detail:: 13307db96d56Sopenharmony_ci 13317db96d56Sopenharmony_ci This function relies on Python stack frame support in the interpreter, 13327db96d56Sopenharmony_ci which isn't guaranteed to exist in all implementations of Python. If 13337db96d56Sopenharmony_ci running in an implementation without Python stack frame support this 13347db96d56Sopenharmony_ci function returns ``None``. 13357db96d56Sopenharmony_ci 13367db96d56Sopenharmony_ci 13377db96d56Sopenharmony_ci.. function:: stack(context=1) 13387db96d56Sopenharmony_ci 13397db96d56Sopenharmony_ci Return a list of :class:`FrameInfo` objects for the caller's stack. The 13407db96d56Sopenharmony_ci first entry in the returned list represents the caller; the last entry 13417db96d56Sopenharmony_ci represents the outermost call on the stack. 13427db96d56Sopenharmony_ci 13437db96d56Sopenharmony_ci .. versionchanged:: 3.5 13447db96d56Sopenharmony_ci A list of :term:`named tuples <named tuple>` 13457db96d56Sopenharmony_ci ``FrameInfo(frame, filename, lineno, function, code_context, index)`` 13467db96d56Sopenharmony_ci is returned. 13477db96d56Sopenharmony_ci 13487db96d56Sopenharmony_ci .. versionchanged:: 3.11 13497db96d56Sopenharmony_ci A list of :class:`FrameInfo` objects is returned. 13507db96d56Sopenharmony_ci 13517db96d56Sopenharmony_ci.. function:: trace(context=1) 13527db96d56Sopenharmony_ci 13537db96d56Sopenharmony_ci Return a list of :class:`FrameInfo` objects for the stack between the current 13547db96d56Sopenharmony_ci frame and the frame in which an exception currently being handled was raised 13557db96d56Sopenharmony_ci in. The first entry in the list represents the caller; the last entry 13567db96d56Sopenharmony_ci represents where the exception was raised. 13577db96d56Sopenharmony_ci 13587db96d56Sopenharmony_ci .. versionchanged:: 3.5 13597db96d56Sopenharmony_ci A list of :term:`named tuples <named tuple>` 13607db96d56Sopenharmony_ci ``FrameInfo(frame, filename, lineno, function, code_context, index)`` 13617db96d56Sopenharmony_ci is returned. 13627db96d56Sopenharmony_ci 13637db96d56Sopenharmony_ci .. versionchanged:: 3.11 13647db96d56Sopenharmony_ci A list of :class:`FrameInfo` objects is returned. 13657db96d56Sopenharmony_ci 13667db96d56Sopenharmony_ciFetching attributes statically 13677db96d56Sopenharmony_ci------------------------------ 13687db96d56Sopenharmony_ci 13697db96d56Sopenharmony_ciBoth :func:`getattr` and :func:`hasattr` can trigger code execution when 13707db96d56Sopenharmony_cifetching or checking for the existence of attributes. Descriptors, like 13717db96d56Sopenharmony_ciproperties, will be invoked and :meth:`__getattr__` and :meth:`__getattribute__` 13727db96d56Sopenharmony_cimay be called. 13737db96d56Sopenharmony_ci 13747db96d56Sopenharmony_ciFor cases where you want passive introspection, like documentation tools, this 13757db96d56Sopenharmony_cican be inconvenient. :func:`getattr_static` has the same signature as :func:`getattr` 13767db96d56Sopenharmony_cibut avoids executing code when it fetches attributes. 13777db96d56Sopenharmony_ci 13787db96d56Sopenharmony_ci.. function:: getattr_static(obj, attr, default=None) 13797db96d56Sopenharmony_ci 13807db96d56Sopenharmony_ci Retrieve attributes without triggering dynamic lookup via the 13817db96d56Sopenharmony_ci descriptor protocol, :meth:`__getattr__` or :meth:`__getattribute__`. 13827db96d56Sopenharmony_ci 13837db96d56Sopenharmony_ci Note: this function may not be able to retrieve all attributes 13847db96d56Sopenharmony_ci that getattr can fetch (like dynamically created attributes) 13857db96d56Sopenharmony_ci and may find attributes that getattr can't (like descriptors 13867db96d56Sopenharmony_ci that raise AttributeError). It can also return descriptors objects 13877db96d56Sopenharmony_ci instead of instance members. 13887db96d56Sopenharmony_ci 13897db96d56Sopenharmony_ci If the instance :attr:`~object.__dict__` is shadowed by another member (for 13907db96d56Sopenharmony_ci example a property) then this function will be unable to find instance 13917db96d56Sopenharmony_ci members. 13927db96d56Sopenharmony_ci 13937db96d56Sopenharmony_ci .. versionadded:: 3.2 13947db96d56Sopenharmony_ci 13957db96d56Sopenharmony_ci:func:`getattr_static` does not resolve descriptors, for example slot descriptors or 13967db96d56Sopenharmony_cigetset descriptors on objects implemented in C. The descriptor object 13977db96d56Sopenharmony_ciis returned instead of the underlying attribute. 13987db96d56Sopenharmony_ci 13997db96d56Sopenharmony_ciYou can handle these with code like the following. Note that 14007db96d56Sopenharmony_cifor arbitrary getset descriptors invoking these may trigger 14017db96d56Sopenharmony_cicode execution:: 14027db96d56Sopenharmony_ci 14037db96d56Sopenharmony_ci # example code for resolving the builtin descriptor types 14047db96d56Sopenharmony_ci class _foo: 14057db96d56Sopenharmony_ci __slots__ = ['foo'] 14067db96d56Sopenharmony_ci 14077db96d56Sopenharmony_ci slot_descriptor = type(_foo.foo) 14087db96d56Sopenharmony_ci getset_descriptor = type(type(open(__file__)).name) 14097db96d56Sopenharmony_ci wrapper_descriptor = type(str.__dict__['__add__']) 14107db96d56Sopenharmony_ci descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor) 14117db96d56Sopenharmony_ci 14127db96d56Sopenharmony_ci result = getattr_static(some_object, 'foo') 14137db96d56Sopenharmony_ci if type(result) in descriptor_types: 14147db96d56Sopenharmony_ci try: 14157db96d56Sopenharmony_ci result = result.__get__() 14167db96d56Sopenharmony_ci except AttributeError: 14177db96d56Sopenharmony_ci # descriptors can raise AttributeError to 14187db96d56Sopenharmony_ci # indicate there is no underlying value 14197db96d56Sopenharmony_ci # in which case the descriptor itself will 14207db96d56Sopenharmony_ci # have to do 14217db96d56Sopenharmony_ci pass 14227db96d56Sopenharmony_ci 14237db96d56Sopenharmony_ci 14247db96d56Sopenharmony_ciCurrent State of Generators and Coroutines 14257db96d56Sopenharmony_ci------------------------------------------ 14267db96d56Sopenharmony_ci 14277db96d56Sopenharmony_ciWhen implementing coroutine schedulers and for other advanced uses of 14287db96d56Sopenharmony_cigenerators, it is useful to determine whether a generator is currently 14297db96d56Sopenharmony_ciexecuting, is waiting to start or resume or execution, or has already 14307db96d56Sopenharmony_citerminated. :func:`getgeneratorstate` allows the current state of a 14317db96d56Sopenharmony_cigenerator to be determined easily. 14327db96d56Sopenharmony_ci 14337db96d56Sopenharmony_ci.. function:: getgeneratorstate(generator) 14347db96d56Sopenharmony_ci 14357db96d56Sopenharmony_ci Get current state of a generator-iterator. 14367db96d56Sopenharmony_ci 14377db96d56Sopenharmony_ci Possible states are: 14387db96d56Sopenharmony_ci * GEN_CREATED: Waiting to start execution. 14397db96d56Sopenharmony_ci * GEN_RUNNING: Currently being executed by the interpreter. 14407db96d56Sopenharmony_ci * GEN_SUSPENDED: Currently suspended at a yield expression. 14417db96d56Sopenharmony_ci * GEN_CLOSED: Execution has completed. 14427db96d56Sopenharmony_ci 14437db96d56Sopenharmony_ci .. versionadded:: 3.2 14447db96d56Sopenharmony_ci 14457db96d56Sopenharmony_ci.. function:: getcoroutinestate(coroutine) 14467db96d56Sopenharmony_ci 14477db96d56Sopenharmony_ci Get current state of a coroutine object. The function is intended to be 14487db96d56Sopenharmony_ci used with coroutine objects created by :keyword:`async def` functions, but 14497db96d56Sopenharmony_ci will accept any coroutine-like object that has ``cr_running`` and 14507db96d56Sopenharmony_ci ``cr_frame`` attributes. 14517db96d56Sopenharmony_ci 14527db96d56Sopenharmony_ci Possible states are: 14537db96d56Sopenharmony_ci * CORO_CREATED: Waiting to start execution. 14547db96d56Sopenharmony_ci * CORO_RUNNING: Currently being executed by the interpreter. 14557db96d56Sopenharmony_ci * CORO_SUSPENDED: Currently suspended at an await expression. 14567db96d56Sopenharmony_ci * CORO_CLOSED: Execution has completed. 14577db96d56Sopenharmony_ci 14587db96d56Sopenharmony_ci .. versionadded:: 3.5 14597db96d56Sopenharmony_ci 14607db96d56Sopenharmony_ciThe current internal state of the generator can also be queried. This is 14617db96d56Sopenharmony_cimostly useful for testing purposes, to ensure that internal state is being 14627db96d56Sopenharmony_ciupdated as expected: 14637db96d56Sopenharmony_ci 14647db96d56Sopenharmony_ci.. function:: getgeneratorlocals(generator) 14657db96d56Sopenharmony_ci 14667db96d56Sopenharmony_ci Get the mapping of live local variables in *generator* to their current 14677db96d56Sopenharmony_ci values. A dictionary is returned that maps from variable names to values. 14687db96d56Sopenharmony_ci This is the equivalent of calling :func:`locals` in the body of the 14697db96d56Sopenharmony_ci generator, and all the same caveats apply. 14707db96d56Sopenharmony_ci 14717db96d56Sopenharmony_ci If *generator* is a :term:`generator` with no currently associated frame, 14727db96d56Sopenharmony_ci then an empty dictionary is returned. :exc:`TypeError` is raised if 14737db96d56Sopenharmony_ci *generator* is not a Python generator object. 14747db96d56Sopenharmony_ci 14757db96d56Sopenharmony_ci .. impl-detail:: 14767db96d56Sopenharmony_ci 14777db96d56Sopenharmony_ci This function relies on the generator exposing a Python stack frame 14787db96d56Sopenharmony_ci for introspection, which isn't guaranteed to be the case in all 14797db96d56Sopenharmony_ci implementations of Python. In such cases, this function will always 14807db96d56Sopenharmony_ci return an empty dictionary. 14817db96d56Sopenharmony_ci 14827db96d56Sopenharmony_ci .. versionadded:: 3.3 14837db96d56Sopenharmony_ci 14847db96d56Sopenharmony_ci.. function:: getcoroutinelocals(coroutine) 14857db96d56Sopenharmony_ci 14867db96d56Sopenharmony_ci This function is analogous to :func:`~inspect.getgeneratorlocals`, but 14877db96d56Sopenharmony_ci works for coroutine objects created by :keyword:`async def` functions. 14887db96d56Sopenharmony_ci 14897db96d56Sopenharmony_ci .. versionadded:: 3.5 14907db96d56Sopenharmony_ci 14917db96d56Sopenharmony_ci 14927db96d56Sopenharmony_ci.. _inspect-module-co-flags: 14937db96d56Sopenharmony_ci 14947db96d56Sopenharmony_ciCode Objects Bit Flags 14957db96d56Sopenharmony_ci---------------------- 14967db96d56Sopenharmony_ci 14977db96d56Sopenharmony_ciPython code objects have a ``co_flags`` attribute, which is a bitmap of 14987db96d56Sopenharmony_cithe following flags: 14997db96d56Sopenharmony_ci 15007db96d56Sopenharmony_ci.. data:: CO_OPTIMIZED 15017db96d56Sopenharmony_ci 15027db96d56Sopenharmony_ci The code object is optimized, using fast locals. 15037db96d56Sopenharmony_ci 15047db96d56Sopenharmony_ci.. data:: CO_NEWLOCALS 15057db96d56Sopenharmony_ci 15067db96d56Sopenharmony_ci If set, a new dict will be created for the frame's ``f_locals`` when 15077db96d56Sopenharmony_ci the code object is executed. 15087db96d56Sopenharmony_ci 15097db96d56Sopenharmony_ci.. data:: CO_VARARGS 15107db96d56Sopenharmony_ci 15117db96d56Sopenharmony_ci The code object has a variable positional parameter (``*args``-like). 15127db96d56Sopenharmony_ci 15137db96d56Sopenharmony_ci.. data:: CO_VARKEYWORDS 15147db96d56Sopenharmony_ci 15157db96d56Sopenharmony_ci The code object has a variable keyword parameter (``**kwargs``-like). 15167db96d56Sopenharmony_ci 15177db96d56Sopenharmony_ci.. data:: CO_NESTED 15187db96d56Sopenharmony_ci 15197db96d56Sopenharmony_ci The flag is set when the code object is a nested function. 15207db96d56Sopenharmony_ci 15217db96d56Sopenharmony_ci.. data:: CO_GENERATOR 15227db96d56Sopenharmony_ci 15237db96d56Sopenharmony_ci The flag is set when the code object is a generator function, i.e. 15247db96d56Sopenharmony_ci a generator object is returned when the code object is executed. 15257db96d56Sopenharmony_ci 15267db96d56Sopenharmony_ci.. data:: CO_COROUTINE 15277db96d56Sopenharmony_ci 15287db96d56Sopenharmony_ci The flag is set when the code object is a coroutine function. 15297db96d56Sopenharmony_ci When the code object is executed it returns a coroutine object. 15307db96d56Sopenharmony_ci See :pep:`492` for more details. 15317db96d56Sopenharmony_ci 15327db96d56Sopenharmony_ci .. versionadded:: 3.5 15337db96d56Sopenharmony_ci 15347db96d56Sopenharmony_ci.. data:: CO_ITERABLE_COROUTINE 15357db96d56Sopenharmony_ci 15367db96d56Sopenharmony_ci The flag is used to transform generators into generator-based 15377db96d56Sopenharmony_ci coroutines. Generator objects with this flag can be used in 15387db96d56Sopenharmony_ci ``await`` expression, and can ``yield from`` coroutine objects. 15397db96d56Sopenharmony_ci See :pep:`492` for more details. 15407db96d56Sopenharmony_ci 15417db96d56Sopenharmony_ci .. versionadded:: 3.5 15427db96d56Sopenharmony_ci 15437db96d56Sopenharmony_ci.. data:: CO_ASYNC_GENERATOR 15447db96d56Sopenharmony_ci 15457db96d56Sopenharmony_ci The flag is set when the code object is an asynchronous generator 15467db96d56Sopenharmony_ci function. When the code object is executed it returns an 15477db96d56Sopenharmony_ci asynchronous generator object. See :pep:`525` for more details. 15487db96d56Sopenharmony_ci 15497db96d56Sopenharmony_ci .. versionadded:: 3.6 15507db96d56Sopenharmony_ci 15517db96d56Sopenharmony_ci.. note:: 15527db96d56Sopenharmony_ci The flags are specific to CPython, and may not be defined in other 15537db96d56Sopenharmony_ci Python implementations. Furthermore, the flags are an implementation 15547db96d56Sopenharmony_ci detail, and can be removed or deprecated in future Python releases. 15557db96d56Sopenharmony_ci It's recommended to use public APIs from the :mod:`inspect` module 15567db96d56Sopenharmony_ci for any introspection needs. 15577db96d56Sopenharmony_ci 15587db96d56Sopenharmony_ci 15597db96d56Sopenharmony_ci.. _inspect-module-cli: 15607db96d56Sopenharmony_ci 15617db96d56Sopenharmony_ciCommand Line Interface 15627db96d56Sopenharmony_ci---------------------- 15637db96d56Sopenharmony_ci 15647db96d56Sopenharmony_ciThe :mod:`inspect` module also provides a basic introspection capability 15657db96d56Sopenharmony_cifrom the command line. 15667db96d56Sopenharmony_ci 15677db96d56Sopenharmony_ci.. program:: inspect 15687db96d56Sopenharmony_ci 15697db96d56Sopenharmony_ciBy default, accepts the name of a module and prints the source of that 15707db96d56Sopenharmony_cimodule. A class or function within the module can be printed instead by 15717db96d56Sopenharmony_ciappended a colon and the qualified name of the target object. 15727db96d56Sopenharmony_ci 15737db96d56Sopenharmony_ci.. cmdoption:: --details 15747db96d56Sopenharmony_ci 15757db96d56Sopenharmony_ci Print information about the specified object rather than the source code 1576