inspect – Инспекция живых объектов
Исходный код: Lib/inspect.py
Модуль inspect предоставляет несколько полезных функций для получения информации о живых объектах, таких как модули, классы, методы, функции, трассировки, объекты фреймов и объекты кода. Например, с его помощью можно изучить содержимое класса, получить исходный код метода, извлечь и отформатировать список аргументов функции или получить всю необходимую информацию для отображения подробной трассировки.
Модуль предоставляет четыре основных вида функций: проверка типов, получение исходного кода, интроспекция классов и функций, а также анализ стека интерпретатора.
Types and membersТипы и члены
Функция getmembers() извлекает члены объекта, такого как класс или модуль. Функции, имена которых начинаются с «is», в основном предоставляются как удобные варианты для второго аргумента getmembers(). Они также помогают определить, когда можно ожидать следующие специальные атрибуты (см. Атрибуты модуля, связанные с импортом для атрибутов модуля):
Тип |
Атрибут |
Описание |
|---|---|---|
class |
doc |
строка документации |
name |
имя, под которым определён класс |
|
qualname |
квалифицированное имя |
|
module |
имя модуля, в котором был определён класс |
|
type_params |
Кортеж, содержащий параметры типа обобщённого класса |
|
method |
doc |
строка документации |
name |
имя, с которым был определён этот метод |
|
qualname |
полное имя |
|
func |
объект функции, содержащий реализацию метода |
|
self |
экземпляр, к которому привязан этот метод, или |
|
module |
имя модуля, в котором был определён этот метод |
|
функция |
doc |
строка документации |
name |
имя, с которым была определена эта функция |
|
qualname |
полное имя |
|
code |
объект кода, содержащий скомпилированную функцию байткод |
|
defaults |
кортеж значений по умолчанию для позиционных или именованных параметров |
|
kwdefaults |
отображение значений по умолчанию для параметров, передаваемых только по ключу |
|
globals |
глобальное пространство имён, в котором была определена эта функция |
|
builtins |
пространство имён builtins |
|
annotations |
отображение имён параметров на аннотации; ключ |
|
type_params |
Кортеж, содержащий параметры типа обобщённой функции |
|
module |
имя модуля, в котором была определена эта функция |
|
traceback |
tb_frame |
объект фрейма на этом уровне |
tb_lasti |
индекс последней предпринятой инструкции в байт-коде |
|
tb_lineno |
текущий номер строки в исходном коде Python |
|
tb_next |
следующий внутренний объект traceback (вызванный этим уровнем) |
|
frame |
f_back |
следующий внешний объект фрейма (вызывающий этот фрейм) |
f_builtins |
пространство имён builtins, видимое этим фреймом |
|
f_code |
объект кода, выполняемый в этом фрейме |
|
f_globals |
глобальное пространство имён, видимое этим фреймом |
|
f_lasti |
индекс последней предпринятой инструкции в байт-коде |
|
f_lineno |
текущий номер строки в исходном коде Python |
|
f_locals |
локальное пространство имён, видимое этим фреймом |
|
f_generator |
возвращает объект генератора или
корутины, которому принадлежит
этот фрейм, или
|
|
f_trace |
функция трассировки для этого
фрейма или |
|
f_trace_lines |
указывает, запускается ли событие трассировки для каждой строки исходного кода |
|
f_trace_opcodes |
указывает, запрашиваются ли события для каждой операции (per-opcode) |
|
clear() |
используется для удаления всех ссылок на локальные переменные |
|
code |
co_argcount |
количество аргументов (без учёта только именованных аргументов и аргументов * или **) |
co_code |
строка с сырым скомпилированным байт-кодом |
|
co_cellvars |
кортеж имён переменных ячейки (на которые ссылаются объемлющие области видимости) |
|
co_consts |
кортеж констант, используемых в байт-коде |
|
co_filename |
имя файла, в котором был создан этот объект кода |
|
co_firstlineno |
номер первой строки в исходном коде Python |
|
co_flags |
битовая маска флагов |
|
co_lnotab |
закодированное отображение номеров строк на индексы байт-кода |
|
co_freevars |
кортеж имён свободных переменных (на которые ссылаются через замыкание функции) |
|
co_posonlyargcount |
количество только позиционных аргументов |
|
co_kwonlyargcount |
количество только именованных аргументов (не считая **arg) |
|
co_name |
имя, с которым был определён этот объект кода |
|
co_qualname |
полное квалифицированное имя, с которым был определён этот объект кода |
|
co_names |
кортеж имён, отличных от аргументов и локальных переменных функции |
|
co_nlocals |
количество локальных переменных |
|
co_stacksize |
требуемый размер стека виртуальной машины |
|
co_varnames |
кортеж имён аргументов и локальных переменных |
|
co_lines() |
возвращает итератор, который порождает последовательные диапазоны байт-кода |
|
co_positions() |
возвращает итератор позиций исходного кода для каждой инструкции байт-кода |
|
replace() |
возвращает копию объекта кода с новыми значениями |
|
генератор |
name |
имя |
qualname |
квалифицированное имя |
|
gi_frame |
фрейм |
|
gi_running |
запущен ли генератор? |
|
gi_suspended |
приостановлен ли генератор? |
|
gi_code |
код |
|
gi_yieldfrom |
объект, по которому выполняется итерация с помощью
|
|
gi_state |
состояние генератора:
|
|
асинхронный генератор |
name |
имя |
qualname |
квалифицированное имя |
|
ag_await |
объект, который ожидается, или |
|
ag_frame |
фрейм |
|
ag_running |
работает ли генератор? |
|
ag_suspended |
приостановлен ли генератор? |
|
ag_code |
код |
|
ag_state |
состояние асинхронного генератора: |
|
корутина |
name |
имя |
qualname |
квалифицированное имя |
|
cr_await |
объект, который ожидается, или |
|
cr_frame |
фрейм |
|
cr_running |
работает ли корутина? |
|
cr_suspended |
приостановлена ли корутина? |
|
cr_code |
код |
|
cr_origin |
где была создана корутина, или |
|
cr_state |
состояние корутины,
одно из |
|
builtin |
doc |
строка документации |
name |
исходное имя этой функции или метода |
|
qualname |
полное имя |
|
self |
экземпляр, к которому привязан
метод, или
|
Изменено в версии 3.5: Добавлены атрибуты __qualname__ и gi_yieldfrom к генераторам.
Атрибут __name__ генераторов теперь устанавливается из имени
функции, а не из имени кода, и его теперь можно изменять.
Изменено в версии 3.7: Добавлен атрибут cr_origin к корутинам.
Изменено в версии 3.10: Добавлен атрибут __builtins__ к функциям.
Изменено в версии 3.11: Добавлен атрибут gi_suspended к генераторам.
Изменено в версии 3.11: Добавлен атрибут cr_suspended к корутинам.
Изменено в версии 3.12: Добавлен атрибут ag_suspended к асинхронным генераторам.
Изменено в версии 3.14: Добавлен атрибут f_generator к фреймам.
Изменено в версии 3.15: Добавлен атрибут gi_state к генераторам, атрибут cr_state к
корутинам и атрибут ag_state к асинхронным генераторам.
- inspect.getmembers(object[, predicate])¶
Возвращает все члены объекта в виде списка кортежей
(name, value)отсортированных по имени. Если передан необязательный аргумент predicate, который будет вызван с объектомvalueкаждого члена, то включаются только те члены, для которых предикат возвращает истинное значение.Примечание
getmembers()возвращает только атрибуты класса, определённые в метаклассе, если аргументом является класс, и эти атрибуты были перечислены в пользовательском__dir__()метакласса.
- inspect.getmembers_static(object[, predicate])¶
Возвращает все члены объекта в виде списка кортежей
(name, value)отсортированных по имени, не вызывая динамический поиск через протокол дескрипторов, __getattr__ или __getattribute__. При необходимости можно вернуть только те члены, которые удовлетворяют заданному предикату.Примечание
getmembers_static()может быть не в состоянии получить все члены, которые может получить getmembers (например, динамически созданные атрибуты), и может найти членов, которых getmembers не может (например, дескрипторы, вызывающие AttributeError). В некоторых случаях он также может возвращать объекты дескрипторов вместо членов экземпляра.Добавлено в версии 3.11.
- inspect.getmodulename(path)¶
Возвращает имя модуля, заданного файлом path, без включения имён объемлющих пакетов. Расширение файла проверяется по всем записям в
importlib.machinery.all_suffixes(). Если оно совпадает, возвращается последний компонент пути с удалённым расширением. В противном случае возвращаетсяNone.Обратите внимание, что эта функция возвращает осмысленное имя только для реальных модулей Python – пути, которые потенциально ссылаются на пакеты Python, всё равно вернут
None.Изменено в версии 3.3: Функция напрямую основана на
importlib.
- inspect.ismodule(object)¶
Возвращает
True, если объект является модулем.
- inspect.isclass(object)¶
Возвращает
True, если объект является классом (встроенным или созданным в коде Python).
- inspect.ismethod(object)¶
Возвращает
True, если объект является связанным методом, написанным на Python.
- inspect.isfunction(object)¶
Возвращает
True, если объект является функцией Python, включая функции, созданные выражением lambda.
- inspect.isgeneratorfunction(object)¶
Возвращает
True, если объект является функцией-генератором Python.Изменено в версии 3.8: Функции, обёрнутые в
functools.partial(), теперь возвращаютTrue, если обёрнутая функция является функцией-генератором Python.Изменено в версии 3.13: Функции, обёрнутые в
functools.partialmethod(), теперь возвращаютTrue, если обёрнутая функция является функцией-генератором Python.
- inspect.isgenerator(object)¶
Возвращает
True, если объект является генератором.
- inspect.iscoroutinefunction(object)¶
Возвращает
True, если объект является корутинной функцией (функцией, определённой с синтаксисомasync def),functools.partial(), обёртывающей корутинную функцию, или синхронной функцией, помеченнойmarkcoroutinefunction().Добавлено в версии 3.5.
Изменено в версии 3.8: Функции, обёрнутые в
functools.partial(), теперь возвращаютTrue, если обёрнутая функция является корутинной функцией.Изменено в версии 3.12: Синхронные функции, помеченные
markcoroutinefunction(), теперь возвращаютTrue.Изменено в версии 3.13: Функции, обёрнутые в
functools.partialmethod(), теперь возвращаютTrue, если обёрнутая функция является корутинной функцией.
- inspect.markcoroutinefunction(func)¶
Декоратор, помечающий вызываемый объект как корутинную функцию, если иначе она не была бы обнаружена
iscoroutinefunction().Это может пригодиться для синхронных функций, возвращающих корутину, если функция передаётся в API, требующее
iscoroutinefunction().Когда возможно, предпочтительнее использовать функцию
async def. Также допустимо вызвать функцию и проверить возвращаемое значение с помощьюiscoroutine().Добавлено в версии 3.12.
- inspect.iscoroutine(object)¶
Возвращает
True, если объект является корутиной, созданной функциейasync def.Добавлено в версии 3.5.
- inspect.isawaitable(object)¶
Возвращает
True, если объект может использоваться в выраженииawait.Также может использоваться для отличия корутин, основанных на генераторах, от обычных генераторов:
pythonimport types def gen(): yield @types.coroutine def gen_coro(): yield assert not isawaitable(gen()) assert isawaitable(gen_coro())Добавлено в версии 3.5.
- inspect.isasyncgenfunction(object)¶
Возвращает
True, если объект является асинхронной функцией-генератором, например:python>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) TrueДобавлено в версии 3.6.
Изменено в версии 3.8: Функции, обёрнутые в
functools.partial(), теперь возвращаютTrue, если обёрнутая функция является асинхронной функцией-генератором.Изменено в версии 3.13: Функции, обёрнутые в
functools.partialmethod(), теперь возвращаютTrue, если обёрнутая функция является асинхронным генератором.
- inspect.isasyncgen(object)¶
Возвращает
True, если объект является итератором асинхронного генератора, созданным асинхронным генератором функцией.Добавлено в версии 3.6.
- inspect.istraceback(object)¶
Возвращает
True, если объект является traceback.
- inspect.isframe(object)¶
Возвращает
True, если объект является frame.
- inspect.iscode(object)¶
Возвращает
True, если объект является code.
- inspect.isbuiltin(object)¶
Возвращает
True, если объект является встроенной функцией или связанным встроенным методом.
- inspect.ismethodwrapper(object)¶
Возвращает
True, если тип объекта являетсяMethodWrapperType.Это экземпляры
MethodWrapperType, такие как__str__(),__eq__()и__repr__().Добавлено в версии 3.11.
- inspect.isroutine(object)¶
Возвращает
True, если объект является пользовательской или встроенной функцией или методом.
- inspect.isabstract(object)¶
Возвращает
True, если объект является абстрактным базовым классом.
- inspect.ismethoddescriptor(object)¶
Возвращает
True, если объект является дескриптором метода, но не возвращает, еслиismethod(),isclass(),isfunction()илиisbuiltin()истинны.Это верно, например, для
int.__add__. Объект, проходящий этот тест, имеет метод__get__(), но не имеет метода__set__()или метода__delete__(). Кроме того, набор атрибутов различается. Атрибут__name__обычно имеет смысл, и__doc__часто тоже.Методы, реализованные через дескрипторы, которые также проходят один из других тестов, возвращают
Falseиз тестаismethoddescriptor(), просто потому что другие тесты обещают больше – например, можно рассчитывать на наличие атрибута__func__(и так далее), когда объект проходитismethod().Изменено в версии 3.13: Эта функция больше не ошибочно сообщает, что объекты с
__get__()и__delete__(), но не__set__(), являются дескрипторами методов (такие объекты являются дескрипторами данных, а не дескрипторами методов).
- inspect.isdatadescriptor(object)¶
Возвращает
True, если объект является дескриптором данных.Дескрипторы данных имеют метод
__set__или__delete__. Примеры: свойства (определённые в Python), getsets и members. Последние два определены на C, и для этих типов доступны более специфичные тесты, что является надёжным для всех реализаций Python. Обычно дескрипторы данных также имеют атрибуты__name__и__doc__(свойства, getsets и members имеют оба этих атрибута), но это не гарантируется.
- inspect.isgetsetdescriptor(object)¶
Возвращает
True, если объект является дескриптором getset.Особенности реализации CPython: getsets – это атрибуты, определённые в модулях расширения через структуры
PyGetSetDef. Для реализаций Python, не имеющих таких типов, этот метод всегда будет возвращатьFalse.
- inspect.ismemberdescriptor(object)¶
Возвращает
True, если объект является дескриптором member.Особенности реализации CPython: Дескрипторы member – это атрибуты, определённые в модулях расширения через структуры
PyMemberDef. Для реализаций Python, не имеющих таких типов, этот метод всегда будет возвращатьFalse.
Retrieving source codeИзвлечение исходного кода
- inspect.getdoc(object, *, inherit_class_doc=True, fallback_to_class_doc=True)¶
Получает строку документации для объекта, очищенную с помощью
cleandoc(). Если строка документации для объекта не указана:если объект – класс и inherit_class_doc равен true (по умолчанию), строка документации берётся из иерархии наследования;
если объект – метод, свойство или дескриптор, строка документации берётся из иерархии наследования;
в противном случае, если fallback_to_class_doc равен true (по умолчанию), строка документации берётся из класса объекта.
Возвращает
None, если строка документации некорректна или отсутствует.Изменено в версии 3.5: Строки документации теперь наследуются, если не переопределены.
Изменено в версии 3.15: Добавлены параметры inherit_class_doc и fallback_to_class_doc.
Строки документации для объектов
cached_propertyтеперь наследуются, если не переопределены.
- inspect.getcomments(object)¶
Возвращает в виде одной строки все строки комментариев, непосредственно предшествующие исходному коду объекта (для класса, функции или метода), или в начале файла исходного кода Python (если объект – модуль). Если исходный код объекта недоступен, возвращает
None. Это может произойти, если объект был определён на C или в интерактивной оболочке.
- inspect.getfile(object)¶
Возвращает имя (текстового или двоичного) файла, в котором был определён объект. Это вызовет
TypeError, если объект является встроенным модулем, классом или функцией.
- inspect.getmodule(object)¶
Пытается угадать, в каком модуле был определён объект. Возвращает
None, если модуль не удаётся определить.
- inspect.getsourcefile(object)¶
Возвращает имя исходного файла Python, в котором был определён объект, или
None, если не удаётся определить способ получения исходного кода. Это вызоветTypeError, если объект является встроенным модулем, классом или функцией.
- inspect.getsourcelines(object)¶
Возвращает список строк исходного кода и номер начальной строки для объекта. Аргументом может быть модуль, класс, метод, функция, трассировка, фрейм или объект кода. Исходный код возвращается в виде списка строк, соответствующих объекту, а номер строки указывает, где в исходном файле находится первая строка кода. Возникает
OSError, если исходный код не удаётся получить. ВозникаетTypeError, если объект является встроенным модулем, классом или функцией.
- inspect.getsource(object)¶
Возвращает текст исходного кода для объекта. Аргументом может быть модуль, класс, метод, функция, трассировка, фрейм или объект кода. Исходный код возвращается в виде одной строки. Возникает
OSError, если исходный код не удаётся получить. ВозникаетTypeError, если объект является встроенным модулем, классом или функцией.
- inspect.cleandoc(doc)¶
Очищает отступы в строках документации, которые имеют отступы для выравнивания с блоками кода.
Все начальные пробелы удаляются из первой строки. Любые начальные пробелы, которые можно равномерно удалить со второй строки и далее, удаляются. Пустые строки в начале и конце затем удаляются. Также все табуляции заменяются пробелами.
Introspecting callables with the Signature objectИнтроспекция вызываемых объектов с помощью объекта Signature
Добавлено в версии 3.3.
Объект Signature представляет сигнатуру вызова вызываемого объекта
и аннотацию возвращаемого значения. Чтобы получить объект Signature,
используйте функцию signature().
- inspect.signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False, annotation_format=Format.VALUE)¶
Возвращает объект
Signatureдля указанного callable:python>>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): ... pass >>> sig = signature(foo) >>> str(sig) '(a, *, b: int, **kwargs)' >>> str(sig.parameters['b']) 'b: int' >>> sig.parameters['b'].annotation <class 'int'>Принимает широкий спектр вызываемых объектов Python: от обычных функций и классов до объектов
functools.partial().Если некоторые аннотации являются строками (например, потому что был использован
from __future__ import annotations),signature()попытается автоматически преобразовать строки обратно в аннотации с помощьюannotationlib.get_annotations(). Параметры globals, locals и eval_str передаются вannotationlib.get_annotations()при разрешении аннотаций; за инструкциями по использованию этих параметров обращайтесь к документацииannotationlib.get_annotations(). Элемент перечисленияannotationlib.Formatможно передать в параметр annotation_format для управления форматом возвращаемых аннотаций. Например, используйтеannotation_format=annotationlib.Format.STRING, чтобы получить аннотации в строковом формате.Вызывает
ValueError, если не удаётся предоставить сигнатуру, иTypeError, если тип объекта не поддерживается. Кроме того, если аннотации преобразованы в строки и eval_str не является ложным, вызов(ы)eval()для преобразования строк обратно в аннотации вannotationlib.get_annotations()потенциально может вызвать исключение любого типа.Косая черта (/) в сигнатуре функции означает, что параметры до неё являются только позиционными. Дополнительную информацию см. в вопрос из FAQ о только позиционных параметрах.
Изменено в версии 3.5: Был добавлен параметр follow_wrapped. Передайте
False, чтобы получить сигнатуру конкретного вызываемого объекта (callable.__wrapped__не будет использоваться для разворачивания декорированных вызываемых объектов).Изменено в версии 3.10: Были добавлены параметры globals, locals и eval_str.
Изменено в версии 3.14: Был добавлен параметр annotation_format.
Примечание
Некоторые вызываемые объекты могут быть недоступны для интроспекции в некоторых реализациях Python. Например, в CPython некоторые встроенные функции, определённые на C, не предоставляют метаданных о своих аргументах.
Особенность реализации CPython: Если переданный объект имеет атрибут
__signature__, мы можем использовать его для создания сигнатуры. Точная семантика является деталью реализации и может быть изменена без предварительного уведомления. За текущей семантикой обращайтесь к исходному коду.
- class inspect.Signature(parameters=None, *, return_annotation=Signature.empty)¶
Объект
Signatureпредставляет сигнатуру вызова функции и её аннотацию возврата. Для каждого параметра, принимаемого функцией, он хранит объектParameterв своей коллекцииparameters.Необязательный аргумент parameters представляет собой последовательность объектов
Parameter, которая проверяется на отсутствие параметров с одинаковыми именами, а также на то, что параметры расположены в правильном порядке, т.е. сначала только позиционные, затем позиционно-ключевые, и что параметры со значениями по умолчанию следуют за параметрами без значений по умолчанию.Необязательный аргумент return_annotation может быть произвольным объектом Python. Он представляет аннотацию «возврата» вызываемого объекта.
Объекты
Signatureявляются неизменяемыми. ИспользуйтеSignature.replace()илиcopy.replace()для создания изменённой копии.Изменено в версии 3.5: Объекты
Signatureтеперь можно сериализовать и они хэшируемы.- empty¶
Специальный маркер уровня класса для указания отсутствия аннотации возврата.
- parameters¶
Упорядоченное отображение имён параметров на соответствующие объекты
Parameter. Параметры располагаются в строгом порядке определения, включая только ключевые параметры.Изменено в версии 3.7: Python явно гарантирует сохранение порядка объявления только ключевых параметров, начиная с версии 3.7, хотя на практике этот порядок всегда сохранялся в Python 3.
- return_annotation¶
Аннотация «возврата» для вызываемого объекта. Если вызываемый объект не имеет аннотации «возврата», этот атрибут устанавливается в
Signature.empty.
- bind(*args, **kwargs)¶
Создаёт отображение позиционных и ключевых аргументов на параметры. Возвращает
BoundArguments, если*argsи**kwargsсоответствуют сигнатуре, или вызываетTypeError.
- bind_partial(*args, **kwargs)¶
Работает так же, как
Signature.bind(), но позволяет опускать некоторые обязательные аргументы (имитирует поведениеfunctools.partial().) ВозвращаетBoundArgumentsили вызываетTypeError, если переданные аргументы не соответствуют сигнатуре.
- replace(*[, parameters][, return_annotation])¶
Создаёт новый экземпляр
Signatureна основе экземпляра, на котором был вызванreplace(). Можно передать другие parameters и/или return_annotation, чтобы переопределить соответствующие свойства базовой сигнатуры. Чтобы удалитьreturn_annotationиз скопированногоSignature, передайтеSignature.empty.python>>> def test(a, b): ... pass ... >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"Объекты
Signatureтакже поддерживаются обобщённой функциейcopy.replace().
- format(*, max_width=None, quote_annotation_strings=True)¶
Создаёт строковое представление объекта
Signature.Если передан max_width, метод попытается уместить сигнатуру в строки длиной не более max_width символов. Если сигнатура длиннее max_width, все параметры будут размещены на отдельных строках.
Если quote_annotation_strings равен False, аннотации в сигнатуре отображаются без открывающих и закрывающих кавычек, если они являются строками. Это полезно, если сигнатура была создана с форматом
STRINGили если был использованfrom __future__ import annotations.Добавлено в версии 3.13.
Изменено в версии 3.14: Добавлен параметр unquote_annotations.
- classmethod from_callable(obj, *, follow_wrapped=True, globals=None, locals=None, eval_str=False)¶
Возвращает объект
Signature(или его подкласс) для заданного вызываемого объекта obj.Этот метод упрощает создание подклассов
Signature:pythonclass MySignature(Signature): pass sig = MySignature.from_callable(sum) assert isinstance(sig, MySignature)В остальном его поведение идентично поведению
signature().Добавлено в версии 3.5.
Изменено в версии 3.10: Добавлены параметры globals, locals и eval_str.
- class inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)¶
Объекты
Parameterявляются неизменяемыми. Вместо изменения объектаParameterможно использоватьParameter.replace()илиcopy.replace()для создания изменённой копии.Изменено в версии 3.5: Объекты Parameter теперь сериализуемы и хешируемы.
- empty¶
Специальный маркер уровня класса для указания отсутствия значений по умолчанию и аннотаций.
- name¶
Имя параметра в виде строки. Имя должно быть допустимым идентификатором Python.
Особенность реализации CPython: CPython генерирует неявные имена параметров вида
.0в объектах кода, используемых для реализации генераторных выражений и включений (comprehensions).Изменено в версии 3.6: Теперь этот модуль предоставляет такие имена параметров в виде
implicit0.
- default¶
Значение по умолчанию для параметра. Если у параметра нет значения по умолчанию, этот атрибут устанавливается в
Parameter.empty.
- annotation¶
Аннотация параметра. Если у параметра нет аннотации, этот атрибут устанавливается в
Parameter.empty.
- kind¶
Описывает, как значения аргументов привязываются к параметру. Возможные значения доступны через
Parameter(например,Parameter.KEYWORD_ONLY) и поддерживают сравнение и упорядочивание в следующем порядке:Имя
Значение
POSITIONAL_ONLY
Значение должно быть передано как позиционный аргумент. Параметры только для позиционной передачи – это те, которые находятся перед записью
/(если она присутствует) в определении функции Python.POSITIONAL_OR_KEYWORD
Значение может быть передано как ключевой или позиционный аргумент (это стандартное поведение привязки для функций, реализованных на Python).
VAR_POSITIONAL
Кортеж позиционных аргументов, не привязанных ни к какому другому параметру. Это соответствует параметру
*argsв определении функции Python.KEYWORD_ONLY
Значение должно быть передано как ключевой аргумент. Параметры только для ключевой передачи – это те, которые находятся после записи
*или*argsв определении функции Python.VAR_KEYWORD
Словарь ключевых аргументов, не привязанных ни к какому другому параметру. Это соответствует параметру
**kwargsв определении функции Python.Пример: вывод всех ключевых аргументов без значений по умолчанию:
python>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c
- kind.description¶
Описывает значение перечисления
Parameter.kind.Добавлено в версии 3.8.
Пример: вывод всех описаний аргументов:
python>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only
- replace(*[, name][, kind][, default][, annotation])¶
Создаёт новый экземпляр
Parameterна основе экземпляра, для которого была вызвана замена. Чтобы переопределить атрибутParameter, передайте соответствующий аргумент. Чтобы удалить значение по умолчанию и/или аннотацию изParameter, передайтеParameter.empty.python>>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Создаст поверхностную копию 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo: 'spam'"Объекты
Parameterтакже поддерживаются универсальной функциейcopy.replace().
Изменено в версии 3.4: В Python 3.3 объектам
Parameterразрешалось иметьname, установленное вNone, если ихkindбыло установлено вPOSITIONAL_ONLY. Это больше не допускается.
- class inspect.BoundArguments¶
Результат вызова
Signature.bind()илиSignature.bind_partial(). Содержит отображение аргументов на параметры функции.- arguments¶
Изменяемое отображение имён параметров на значения аргументов. Содержит только явно связанные аргументы. Изменения в
argumentsотразятся вargsиkwargs.Следует использовать совместно с
Signature.parametersдля любых целей обработки аргументов.Примечание
Аргументы, для которых
Signature.bind()илиSignature.bind_partial()полагались на значение по умолчанию, пропускаются. Однако при необходимости используйтеBoundArguments.apply_defaults(), чтобы добавить их.Изменено в версии 3.9:
argumentsтеперь имеет типdict. Ранее он был типаcollections.OrderedDict.
- kwargs¶
Словарь значений ключевых аргументов. Вычисляется динамически из атрибута
arguments. Аргументы, которые можно передавать позиционно, вместо этого включаются вargs.
- apply_defaults()¶
Устанавливает значения по умолчанию для отсутствующих аргументов.
Для переменных позиционных аргументов (
*args) по умолчанию используется пустой кортеж.Для переменных ключевых аргументов (
**kwargs) по умолчанию используется пустой словарь.python>>> def foo(a, b='ham', *args): pass >>> ba = inspect.signature(foo).bind('spam') >>> ba.apply_defaults() >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': ()}Добавлено в версии 3.5.
Свойства
argsиkwargsможно использовать для вызова функций:pythondef test(a, *, b): ... sig = signature(test) ba = sig.bind(10, b=20) test(*ba.args, **ba.kwargs)
Смотрите также
- PEP 362 – объект сигнатуры функции.
Подробная спецификация, детали реализации и примеры.
Classes and functionsКлассы и функции
- inspect.getclasstree(classes, unique=False)¶
Упорядочивает заданный список классов в иерархию вложенных списков. Если появляется вложенный список, он содержит классы, производные от класса, запись которого непосредственно предшествует этому списку. Каждая запись представляет собой кортеж из двух элементов: класса и кортежа его базовых классов. Если аргумент unique истинен, в возвращаемой структуре появляется ровно одна запись для каждого класса из заданного списка. В противном случае классы, использующие множественное наследование, и их потомки будут появляться несколько раз.
- inspect.getfullargspec(func)¶
Получает имена и значения по умолчанию параметров функции Python. Возвращается именованный кортеж:
FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)args – список имён позиционных параметров. varargs – имя параметра
*илиNone, если произвольные позиционные аргументы не принимаются. varkw – имя параметра**илиNone, если произвольные именованные аргументы не принимаются. defaults – n-кортеж значений аргументов по умолчанию, соответствующих последним n позиционным параметрам, илиNone, если такие значения по умолчанию не определены. kwonlyargs – список имён только-именованных параметров в порядке объявления. kwonlydefaults – словарь, сопоставляющий имена параметров из kwonlyargs значениям по умолчанию, используемым, если аргумент не передан. annotations – словарь, сопоставляющий имена параметров аннотациям. Специальный ключ"return"используется для указания аннотации возвращаемого значения функции (если она есть).Обратите внимание, что
signature()и Signature Object предоставляют рекомендуемый API для интроспекции вызываемых объектов и поддерживают дополнительные возможности (например, только-позиционные аргументы), которые иногда встречаются в API модулей расширения. Эта функция сохранена в основном для использования в коде, который должен поддерживать совместимость с API модуляinspectPython 2.Изменено в версии 3.4: Эта функция теперь основана на
signature(), но по-прежнему игнорирует атрибуты__wrapped__и включает уже связанный первый параметр в вывод сигнатуры для связанных методов.Изменено в версии 3.6: Ранее этот метод был задокументирован как устаревший в пользу
signature()в Python 3.5, но это решение было отменено, чтобы восстановить чётко поддерживаемый стандартный интерфейс для кода на Python 2/3 из единого источника, мигрирующего от устаревшего APIgetargspec().Изменено в версии 3.7: Python явно гарантировал сохранение порядка объявления только-именованных параметров только начиная с версии 3.7, хотя на практике этот порядок всегда сохранялся в Python 3.
- inspect.getargvalues(frame)¶
Получает информацию об аргументах, переданных в конкретный кадр. Возвращается именованный кортеж
ArgInfo(args, varargs, keywords, locals). args – список имён аргументов. varargs и keywords – это имена аргументов*и**илиNone. locals – словарь локальных переменных данного кадра.Примечание
Эта функция была случайно помечена как устаревшая в Python 3.5.
- inspect.formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])¶
Форматирует красивое описание аргументов из четырёх значений, возвращаемых
getargvalues(). Аргументы format* – это соответствующие необязательные функции форматирования, которые вызываются для преобразования имён и значений в строки.Примечание
Эта функция была случайно помечена как устаревшая в Python 3.5.
- inspect.getmro(cls)¶
Возвращает кортеж базовых классов класса cls, включая cls, в порядке разрешения методов. Ни один класс не встречается в этом кортеже более одного раза. Обратите внимание, что порядок разрешения методов зависит от типа cls. Если не используется какой-то очень специфический пользовательский метатип, cls будет первым элементом кортежа.
- inspect.getcallargs(func, /, *args, **kwds)¶
Связывает args и kwds с именами аргументов функции или метода Python func, как если бы она была вызвана с ними. Для связанных методов также связывает первый аргумент (обычно называемый
self) с соответствующим экземпляром. Возвращается словарь, сопоставляющий имена аргументов (включая имена аргументов*и**, если они есть) с их значениями из args и kwds. В случае некорректного вызова func, т.е. когдаfunc(*args, **kwds)возбудило бы исключение из-за несовместимой сигнатуры, возбуждается исключение того же типа и с тем же или похожим сообщением. Например:python>>> from inspect import getcallargs >>> def f(a, b=1, *pos, **named): ... pass ... >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)} True >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()} True >>> getcallargs(f) Traceback (most recent call last): ... TypeError: f() missing 1 required positional argument: 'a'Добавлено в версии 3.2.
Устарело с версии 3.5: Вместо этого используйте
Signature.bind()иSignature.bind_partial().
- inspect.getclosurevars(func)¶
Получает отображение ссылок на внешние имена в функции или методе Python func на их текущие значения. Возвращается именованный кортеж
ClosureVars(nonlocals, globals, builtins, unbound). nonlocals сопоставляет ссылочные имена лексическим переменным замыкания, globals – глобальным переменным модуля функции, а builtins – встроенным функциям, видимым из тела функции. unbound – это набор имён, на которые есть ссылки в функции, но которые не могут быть разрешены при данных текущих глобальных переменных модуля и встроенных функциях.TypeErrorвозбуждается, если func не является функцией или методом Python.Добавлено в версии 3.3.
- inspect.unwrap(func, *, stop=None)¶
Получает объект, обёрнутый в func. Он проходит по цепочке атрибутов
__wrapped__, возвращая последний объект в цепочке.stop – необязательный колбэк, принимающий объект в цепочке обёрток в качестве единственного аргумента и позволяющий досрочно завершить разворачивание, если колбэк возвращает истинное значение. Если колбэк никогда не возвращает истинное значение, возвращается последний объект в цепочке как обычно. Например,
signature()использует это для остановки разворачивания, если какой-либо объект в цепочке имеет определённый атрибут__signature__.ValueErrorвозбуждается, если обнаружен цикл.Добавлено в версии 3.4.
- inspect.get_annotations(obj, *, globals=None, locals=None, eval_str=False, format=annotationlib.Format.VALUE)¶
Вычисляет словарь аннотаций для объекта.
Это псевдоним для
annotationlib.get_annotations(); обратитесь к документации этой функции для получения дополнительной информации.Предостережение
Эта функция может выполнять произвольный код, содержащийся в аннотациях. См. Вопросы безопасности при интроспекции аннотаций для получения дополнительной информации.
Добавлено в версии 3.10.
Изменено в версии 3.14: Эта функция теперь является псевдонимом для
annotationlib.get_annotations(). Вызов её какinspect.get_annotationsпродолжит работать.
The interpreter stackСтек интерпретатора
Некоторые из следующих функций возвращают объекты FrameInfo. Для обратной совместимости эти объекты допускают операции, подобные кортежу, для всех атрибутов, кроме positions. Это поведение считается устаревшим и может быть удалено в будущем.
- class inspect.FrameInfo¶
- frame¶
Объект фрейма, которому соответствует запись.
- filename¶
Имя файла, связанное с кодом, исполняемым фреймом, которому соответствует данная запись.
- lineno¶
Номер текущей строки, связанной с кодом, исполняемым фреймом, которому соответствует данная запись.
- function¶
Имя функции, исполняемой фреймом, которому соответствует данная запись.
- code_context¶
Список строк контекста из исходного кода, исполняемого фреймом, которому соответствует данная запись.
- index¶
Индекс текущей исполняемой строки в списке
code_context.
- positions¶
Объект
dis.Positions, содержащий номер начальной строки, номер конечной строки, смещение начального столбца и смещение конечного столбца, связанные с инструкцией, исполняемой фреймом, которому соответствует данная запись.
Изменено в версии 3.5: Возвращает именованный кортеж вместо
tuple.Изменено в версии 3.11:
FrameInfoтеперь является экземпляром класса (обратно совместим с предыдущим именованным кортежем).
- class inspect.Traceback¶
- filename¶
Имя файла, связанное с кодом, исполняемым фреймом, которому соответствует данная трассировка.
- lineno¶
Номер текущей строки, связанной с кодом, исполняемым фреймом, которому соответствует данная трассировка.
- function¶
Имя функции, исполняемой фреймом, которому соответствует данная трассировка.
- code_context¶
Список строк контекста из исходного кода, исполняемого фреймом, которому соответствует данная трассировка.
- index¶
Индекс текущей исполняемой строки в списке
code_context.
- positions¶
Объект
dis.Positions, содержащий номер начальной строки, номер конечной строки, смещение начального столбца и смещение конечного столбца, связанные с инструкцией, исполняемой фреймом, которому соответствует данная трассировка.
Изменено в версии 3.11:
Tracebackтеперь является экземпляром класса (обратно совместим с предыдущим именованным кортежем).
Примечание
Хранение ссылок на объекты фреймов, которые находятся в первом элементе записей фреймов, возвращаемых этими функциями, может привести к созданию циклических ссылок в вашей программе. Как только циклическая ссылка создана, время жизни всех объектов, доступных из объектов, образующих цикл, может значительно увеличиться, даже если включён опциональный детектор циклов Python. Если такие циклы необходимо создавать, важно явно разрывать их, чтобы избежать отложенного уничтожения объектов и увеличения потребления памяти.
Хотя детектор циклов обнаружит эти ссылки, уничтожение фреймов (и локальных переменных) можно сделать детерминированным, удалив цикл в блоке finally. Это также важно, если детектор циклов был отключён при компиляции Python или с помощью gc.disable(). Например:
def handle_stackframe_without_leak():
frame = inspect.currentframe()
try:
# сделать что-то с фреймом
finally:
del frame
Если требуется сохранить фрейм (например, для последующего вывода трассировки), можно также разорвать циклические ссылки с помощью метода frame.clear().
Необязательный аргумент context, поддерживаемый большинством этих функций, задаёт количество возвращаемых строк контекста, которые располагаются вокруг текущей строки.
- inspect.getframeinfo(frame, context=1)¶
Возвращает информацию об объекте фрейма или трассировки. Возвращается объект
Traceback.Изменено в версии 3.11: Вместо именованного кортежа возвращается объект
Traceback.
- inspect.getouterframes(frame, context=1)¶
Возвращает список объектов
FrameInfoдля фрейма и всех внешних фреймов. Эти фреймы представляют вызовы, которые привели к созданию фрейма. Первая запись в возвращаемом списке представляет фрейм; последняя запись представляет самый внешний вызов в стеке фрейма.Изменено в версии 3.5: Возвращается список именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index).Изменено в версии 3.11: Возвращается список объектов
FrameInfo.
- inspect.getinnerframes(traceback, context=1)¶
Возвращает список объектов
FrameInfoдля фрейма трассировки и всех внутренних фреймов. Эти фреймы представляют вызовы, выполненные как следствие фрейма. Первая запись в списке представляет трассировку; последняя запись представляет место, где было вызвано исключение.Изменено в версии 3.5: Возвращается список именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index).Изменено в версии 3.11: Возвращается список объектов
FrameInfo.
- inspect.currentframe()¶
Возвращает объект фрейма для фрейма стека вызывающей стороны.
Деталь реализации CPython: Эта функция полагается на поддержку фреймов стека Python в интерпретаторе, которая не гарантируется во всех реализациях Python. Если она выполняется в реализации без поддержки фреймов стека Python, эта функция возвращает
None.
- inspect.stack(context=1)¶
Возвращает список объектов
FrameInfoдля стека вызывающей стороны. Первая запись в возвращаемом списке представляет вызывающую сторону; последняя запись представляет самый внешний вызов в стеке.Изменено в версии 3.5: Возвращается список именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index).Изменено в версии 3.11: Возвращается список объектов
FrameInfo.
- inspect.trace(context=1)¶
Возвращает список объектов
FrameInfoдля стека между текущим фреймом и фреймом, в котором было вызвано исключение, обрабатываемое в данный момент. Первая запись в списке представляет вызывающую сторону; последняя запись представляет место, где было вызвано исключение.Изменено в версии 3.5: Возвращается список именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index).Изменено в версии 3.11: Возвращается список объектов
FrameInfo.
Fetching attributes staticallyСтатическое получение атрибутов
Как getattr(), так и hasattr() могут инициировать выполнение кода при получении или проверке существования атрибутов. Дескрипторы, такие как свойства, будут вызваны, и могут быть вызваны __getattr__() и __getattribute__().
Для случаев, когда требуется пассивная интроспекция, например в инструментах документирования, это может быть неудобно. getattr_static() имеет ту же сигнатуру, что и getattr(), но избегает выполнения кода при получении атрибутов.
- inspect.getattr_static(obj, attr, default=None)¶
Извлекает атрибуты без запуска динамического поиска через протокол дескрипторов,
__getattr__()или__getattribute__().Примечание: эта функция может быть не в состоянии извлечь все атрибуты, которые может получить getattr (например, динамически созданные атрибуты), и может находить атрибуты, которые getattr не может (например, дескрипторы, вызывающие AttributeError). Она также может возвращать объекты дескрипторов вместо членов экземпляра.
Если экземпляр
__dict__затеняется другим членом (например, свойством), то эта функция не сможет найти члены экземпляра.Добавлено в версии 3.2.
getattr_static() не разрешает дескрипторы, например слотовые дескрипторы или дескрипторы getset на объектах, реализованных на C. Вместо нижележащего атрибута возвращается объект дескриптора.
Такие ситуации можно обработать следующим кодом. Обратите внимание: для произвольных дескрипторов getset их вызов может инициировать выполнение кода:
# пример кода для разрешения встроенных типов дескрипторов
class _foo:
__slots__ = ['foo']
slot_descriptor = type(_foo.foo)
getset_descriptor = type(type(open(__file__)).name)
wrapper_descriptor = type(str.__dict__['__add__'])
descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)
result = getattr_static(some_object, 'foo')
if type(result) in descriptor_types:
try:
result = result.__get__()
except AttributeError:
# дескрипторы могут вызывать AttributeError, чтобы
# указать, что нет базового значения
# в этом случае сам дескриптор будет
# должен сделать
pass
Current State of Generators, Coroutines, and Asynchronous GeneratorsТекущее состояние генераторов, корутин и асинхронных генераторов
При реализации планировщиков корутин и в других сложных сценариях использования генераторов бывает полезно определить, выполняется ли генератор в данный момент, ожидает запуска или возобновления, или уже завершился. getgeneratorstate() позволяет легко узнать текущее состояние генератора.
- inspect.getgeneratorstate(generator)¶
Возвращает текущее состояние генератора-итератора.
Возможные состояния:
GEN_CREATED: Ожидает начала выполнения.
GEN_RUNNING: В данный момент выполняется интерпретатором.
GEN_SUSPENDED: Приостановлен в выражении yield.
GEN_CLOSED: Выполнение завершено.
Добавлено в версии 3.2.
- inspect.getcoroutinestate(coroutine)¶
Возвращает текущее состояние объекта корутины. Эта функция предназначена для использования с объектами корутин, созданными
async defфункциями, но принимает любой объект, похожий на корутину, имеющий атрибутыcr_runningиcr_frame.Возможные состояния:
CORO_CREATED: Ожидает начала выполнения.
CORO_RUNNING: В данный момент выполняется интерпретатором.
CORO_SUSPENDED: Приостановлен в выражении await.
CORO_CLOSED: Выполнение завершено.
Добавлено в версии 3.5.
- inspect.getasyncgenstate(agen)¶
Возвращает текущее состояние асинхронного генератора. Эта функция предназначена для использования с объектами асинхронных итераторов, созданными
async defфункциями, которые используют операторyield, но принимает любой объект, похожий на асинхронный генератор, имеющий атрибутыag_runningиag_frame.Возможные состояния:
AGEN_CREATED: Ожидает начала выполнения.
AGEN_RUNNING: В данный момент выполняется интерпретатором.
AGEN_SUSPENDED: Приостановлен в выражении yield.
AGEN_CLOSED: Выполнение завершено.
Добавлено в версии 3.12.
Можно также запросить текущее внутреннее состояние генератора. Это в основном полезно для тестирования, чтобы убедиться, что внутреннее состояние обновляется должным образом:
- inspect.getgeneratorlocals(generator)¶
Возвращает отображение живых локальных переменных в generator на их текущие значения. Возвращается словарь, отображающий имена переменных в значения. Это эквивалентно вызову
locals()в теле генератора, и применяются все те же предостережения.Если generator является generator без текущего связанного фрейма, возвращается пустой словарь.
TypeErrorвозбуждается, если generator не является объектом генератора Python.Особенность реализации CPython: Эта функция полагается на то, что генератор предоставляет стековый фрейм Python для интроспекции, что не гарантируется во всех реализациях Python. В таких случаях эта функция всегда возвращает пустой словарь.
Добавлено в версии 3.3.
- inspect.getcoroutinelocals(coroutine)¶
Эта функция аналогична
getgeneratorlocals(), но работает для объектов корутин, созданныхasync defфункциями.Добавлено в версии 3.5.
- inspect.getasyncgenlocals(agen)¶
Эта функция аналогична
getgeneratorlocals(), но работает с асинхронными объектами-генераторами, создаваемыми функциямиasync def, которые используют операторyield.Добавлено в версии 3.12.
Code Objects Bit FlagsБитовые флаги объектов кода
Объекты кода Python имеют атрибут co_flags,
который представляет собой битовую маску следующих флагов:
- inspect.CO_OPTIMIZED¶
Объект кода оптимизирован: используются быстрые локальные переменные.
- inspect.CO_NEWLOCALS¶
Если установлен, при выполнении объекта кода для
f_localsфрейма будет создан новый словарь.
- inspect.CO_VARARGS¶
Объект кода имеет вариативный позиционный параметр (наподобие
*args).
- inspect.CO_VARKEYWORDS¶
Объект кода имеет вариативный именованный параметр (наподобие
**kwargs).
- inspect.CO_NESTED¶
Флаг устанавливается, когда объект кода является вложенной функцией.
- inspect.CO_GENERATOR¶
Флаг устанавливается, когда объект кода является функцией-генератором, то есть при выполнении объекта кода возвращается объект-генератор.
- inspect.CO_COROUTINE¶
Флаг устанавливается, когда объект кода является корутинной функцией. При выполнении объекта кода возвращается объект-корутина. Подробнее см. PEP 492.
Добавлено в версии 3.5.
- inspect.CO_ITERABLE_COROUTINE¶
Этот флаг используется для преобразования генераторов в корутины на основе генераторов. Объекты-генераторы с этим флагом могут использоваться в выражении
awaitи могутyield fromобъекты-корутины. Подробнее см. PEP 492.Добавлено в версии 3.5.
- inspect.CO_ASYNC_GENERATOR¶
Флаг устанавливается, когда объект кода является асинхронной функцией-генератором. При выполнении объекта кода возвращается асинхронный объект-генератор. Подробнее см. PEP 525.
Добавлено в версии 3.6.
- inspect.CO_HAS_DOCSTRING¶
Флаг устанавливается, когда в исходном коде есть строка документации для объекта кода. Если установлен, она будет первым элементом в
co_consts.Добавлено в версии 3.14.
- inspect.CO_METHOD¶
Флаг устанавливается, когда объект кода является функцией, определенной в области видимости класса.
Добавлено в версии 3.14.
Примечание
Эти флаги специфичны для CPython и могут отсутствовать в других реализациях Python.
Кроме того, флаги являются деталью реализации и могут быть удалены или объявлены устаревшими в будущих версиях Python.
Для любых задач интроспекции рекомендуется использовать публичные API из модуля inspect.
Buffer flagsБуферные флаги
- class inspect.BufferFlags¶
Это
enum.IntFlag, представляющий флаги, которые можно передавать методу__buffer__()объектов, реализующих буферный протокол.Значение флагов объясняется в типах буферных запросов.
- SIMPLE¶
- WRITABLE¶
- FORMAT¶
- ND¶
- STRIDES¶
- C_CONTIGUOUS¶
- F_CONTIGUOUS¶
- ANY_CONTIGUOUS¶
- INDIRECT¶
- CONTIG¶
- CONTIG_RO¶
- STRIDED¶
- STRIDED_RO¶
- RECORDS¶
- RECORDS_RO¶
- FULL¶
- FULL_RO¶
- READ¶
- WRITE¶
Добавлено в версии 3.12.
Command-line interfaceИнтерфейс командной строки
Модуль inspect также предоставляет базовую возможность интроспекции
из командной строки.
По умолчанию принимает имя модуля и выводит его исходный код. Вместо модуля можно вывести класс или функцию, добавив двоеточие и полное имя целевого объекта.
- --details¶
Выводит информацию об указанном объекте вместо исходного кода