函式物件¶
有一些函式是 Python 函式特有的。
-
type PyFunctionObject¶
用於函式的 C 結構體。
-
PyTypeObject PyFunction_Type¶
這是
PyTypeObject
的一個例項,表示 Python 函式型別。它以types.FunctionType
的形式暴露給 Python 程式設計師。
-
int PyFunction_Check(PyObject *o)¶
如果 o 是一個函式物件(具有型別
PyFunction_Type
),則返回真。該引數不能為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)¶
- 返回值:借用的引用。
返回對
__module__
屬性的 借用的引用, 該屬性是 函式物件 op 的屬性。它可能為 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
。
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback)¶
將 callback 註冊為當前直譯器的函式監視器。返回一個 ID,該 ID 可以傳遞給
PyFunction_ClearWatcher()
。如果發生錯誤(例如,沒有更多可用的監視器 ID),則返回-1
並設定異常。3.12 版本加入。
-
int PyFunction_ClearWatcher(int watcher_id)¶
清除由 watcher_id 標識的監視器,該監視器之前由當前直譯器的
PyFunction_AddWatcher()
返回。成功時返回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 版本加入。