函数对象

有一些特定于 Python 函数的函数。

type PyFunctionObject

用于函数的 C 结构。

PyTypeObject PyFunction_Type

这是 PyTypeObject 的一个实例,表示 Python 函数类型。它以 types.FunctionType 的形式向 Python 编程人员公开。

int PyFunction_Check(PyObject *o)

如果 o 是一个函数对象(类型为 PyFunction_Type),则返回 true。该参数不能为 NULL。此函数始终成功。

PyObject *PyFunction_New(PyObject *code, PyObject *globals)
返回值:新引用。

返回与代码对象 code 关联的新函数对象。globals 必须是一个字典,其中包含函数可访问的全局变量。

函数的文档字符串和名称从代码对象中检索。 __module__globals 中检索。参数默认值、注释和闭包被设置为 NULL__qualname__ 设置为与代码对象的 co_qualname 字段相同的值。

PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
返回值:新引用。

作为 PyFunction_New(),但还允许设置函数对象的

PyObject *PyFunction_GetCode(PyObject *op)
返回值:借用引用。

返回与函数对象 op 关联的代码对象。

PyObject *PyFunction_GetGlobals(PyObject *op)
返回值:借用引用。

返回与函数对象 op 关联的全局字典。

PyObject *PyFunction_GetModule(PyObject *op)
返回值:借用引用。

返回对 __module__ 属性的 借用引用,该属性属于 函数对象 op。它可以为 NULL

这通常是一个包含模块名称的 string,但可以通过 Python 代码将其设置为任何其他对象。

PyObject *PyFunction_GetDefaults(PyObject *op)
返回值:借用引用。

返回函数对象 op 的参数默认值。这可以是参数元组或 NULL

int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)

设置函数对象 op 的参数默认值。defaults 必须是 Py_None 或元组。

引发 SystemError 并返回 -1 以表示失败。

void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)

设置给定函数对象func的 vectorcall 字段。

警告:使用此 API 的扩展必须保留未更改(默认)vectorcall 函数的行为!

在版本 3.12 中添加。

PyObject *PyFunction_GetClosure(PyObject *op)
返回值:借用引用。

返回与函数对象op关联的闭包。这可以是 NULL 或单元格对象的元组。

int PyFunction_SetClosure(PyObject *op, PyObject *closure)

设置与函数对象op关联的闭包。closure 必须是 Py_None 或单元格对象的元组。

引发 SystemError 并返回 -1 以表示失败。

PyObject *PyFunction_GetAnnotations(PyObject *op)
返回值:借用引用。

返回函数对象op的注释。这可以是可变字典或 NULL

int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)

设置函数对象op的注释。annotations 必须是字典或 Py_None

引发 SystemError 并返回 -1 以表示失败。

int PyFunction_AddWatcher(PyFunction_WatchCallback callback)

callback 注册为当前解释器的函数观察器。返回一个 ID,该 ID 可以传递给 PyFunction_ClearWatcher()。如果出错(例如,没有更多观察器 ID 可用),则返回 -1 并设置异常。

在版本 3.12 中添加。

int PyFunction_ClearWatcher(int watcher_id)

清除先前从 PyFunction_AddWatcher() 返回的、由watcher_id 标识的观察器,用于当前解释器。如果成功,则返回 0,如果出错(例如,给定的watcher_id 从未注册),则返回 -1 并设置异常。

在版本 3.12 中添加。

类型 PyFunction_WatchEvent

可能函数观察器事件的枚举:- PyFunction_EVENT_CREATE - PyFunction_EVENT_DESTROY - PyFunction_EVENT_MODIFY_CODE - PyFunction_EVENT_MODIFY_DEFAULTS - PyFunction_EVENT_MODIFY_KWDEFAULTS

在版本 3.12 中添加。

typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)

函数观察器回调函数的类型。

如果事件PyFunction_EVENT_CREATEPyFunction_EVENT_DESTROY,则new_value 将为 NULL。否则,new_value 将持有对即将存储在func 中的属性的新值的借用引用

回调可以检查func,但不能修改func;这样做可能会产生不可预测的影响,包括无限递归。

如果事件PyFunction_EVENT_CREATE,则在 func 完全初始化后调用回调。否则,在对func 的修改发生之前调用回调,因此可以检查func 的先前状态。运行时被允许在可能的情况下优化函数对象的创建。在这种情况下,不会发出事件。虽然这会根据优化决策创建运行时行为的可观察差异的可能性,但它不会改变正在执行的 Python 代码的语义。

如果事件PyFunction_EVENT_DESTROY,则在回调中引用即将被销毁的函数将使该函数复活,防止它此时被释放。当复活的对象稍后被销毁时,此时活动的任何观察器回调都将再次被调用。

如果回调设置了异常,则它必须返回 -1;此异常将使用 PyErr_WriteUnraisable() 作为不可引发异常打印。否则它应该返回 0

在进入回调时可能已经设置了挂起的异常。在这种情况下,回调应该返回 0,并且仍然设置相同的异常。这意味着回调不能调用任何其他可以设置异常的 API,除非它首先保存并清除异常状态,并在返回之前将其还原。

在版本 3.12 中添加。