函数对象¶
有一些特定于 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()
,但还允许设置函数对象的在 3.3 版本中添加。
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- 返回值:借用引用。
返回对
__module__
属性的 借用引用,该属性属于 函数对象 op。它可以为 NULL。这通常是一个包含模块名称的
string
,但可以通过 Python 代码将其设置为任何其他对象。
-
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 中添加。
-
int PyFunction_SetClosure(PyObject *op, PyObject *closure)¶
设置与函数对象op关联的闭包。closure 必须是
Py_None
或单元格对象的元组。引发
SystemError
并返回-1
以表示失败。
-
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_CREATE
或PyFunction_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 中添加。