函式物件¶
有一些特定於 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()
類似,但也允許設定函式物件的__qualname__
屬性。qualname 應該是一個 unicode 物件或NULL
;如果為NULL
,則__qualname__
屬性設定為與程式碼物件的co_qualname
欄位相同的值。在 3.3 版本加入。
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- 返回值:借用引用。
返回 函式物件 op 的
__module__
屬性的 借用引用。它可以是 NULL。這通常是一個包含模組名稱的
字串
,但可以由 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
。
-
PyObject *PyFunction_GET_CODE(PyObject *op)¶
-
PyObject *PyFunction_GET_GLOBALS(PyObject *op)¶
-
PyObject *PyFunction_GET_MODULE(PyObject *op)¶
-
PyObject *PyFunction_GET_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_KW_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_CLOSURE(PyObject *op)¶
-
PyObject *PyFunction_GET_ANNOTATIONS(PyObject *op)¶
- 返回值:借用引用。
這些函式與其
PyFunction_Get*
對應函式類似,但不進行型別檢查。傳遞任何不是PyFunction_Type
例項的物件都會導致未定義行為。
-
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 新版功能.
-
type 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)¶
函式觀察器回撥函式的型別。
如果 event 是
PyFunction_EVENT_CREATE
或PyFunction_EVENT_DESTROY
,則 new_value 將為NULL
。否則,new_value 將持有要儲存在 func 中以修改屬性的新值的 借用引用。回撥可以檢查但不能修改 func;這樣做可能會產生不可預測的影響,包括無限遞迴。
如果 event 是
PyFunction_EVENT_CREATE
,則在 func 完全初始化後呼叫回撥。否則,在對 func 進行修改之前呼叫回撥,以便可以檢查 func 的先前狀態。執行時允許在可能的情況下最佳化掉函式物件的建立。在這種情況下,將不會發出任何事件。儘管這會根據最佳化決策導致執行時行為可能出現可觀察的差異,但它不會改變正在執行的 Python 程式碼的語義。如果 event 是
PyFunction_EVENT_DESTROY
,在回撥中獲取對即將被銷燬的函式的引用將使其復活,從而阻止它在此刻被釋放。當復活的物件稍後被銷燬時,當時處於活動狀態的任何觀察器回撥將再次被呼叫。如果回撥設定了異常,它必須返回
-1
;此異常將使用PyErr_WriteUnraisable()
列印為無法引發的異常。否則,它應該返回0
。進入回撥時可能已經設定了掛起異常。在這種情況下,回撥應返回
0
,並保持相同的異常設定。這意味著回撥不能呼叫任何其他可能設定異常的 API,除非它首先儲存並清除異常狀態,並在返回之前恢復它。3.12 新版功能.