16

PythonC-APIの標準的な規則は次のとおりです。

  • 関数は入力引数(オブジェクト)から参照を盗みません

  • 戻り値と出力引数(オブジェクト)は参照を所有します

Python C-APIのほとんどの関数は、この規則に従います。ただし、いくつかの例外があります。私は次のことに出くわしました:

入力引数から参照を盗む関数

PyModule_AddObject

参照を借用する戻り値または出力引数を持つ関数

PyErr_Occurred
PyTuple_GetItem
PyTuple_GETITEM
PyDict_GetItem
PyDict_GetItemString
PyDict_Next

そのような機能の包括的なリストはどこかにありますか?このようなリストは、Python拡張モジュールを作成するときに役立つリファレンスです。

4

2 に答える 2

13

Python 2.7.2 C-API ドキュメントで「盗む」および「借りる」という単語をテキスト検索すると、次のリストが得られました。

入力引数から参照を盗む関数

PyCell_SET (but not PyCell_Set)
PyList_SetItem, PyList_SET_ITEM
PyModule_AddObject
PyTuple_SetItem, PyTuple_SET_ITEM

参照を借用する戻り値または出力引数を持つ関数

all PyArg_Xxx functions
PyCell_GET (but not PyCell_Get)
PyDict_GetItem
PyDict_GetItemString
PyDict_Next
PyErr_Occurred
PyEval_GetBuiltins
PyEval_GetFrame
PyEval_GetGlobals
PyEval_GetLocals
PyFile_Name
PyFunction_GetClosure
PyFunction_GetCode
PyFunction_GetDefaults
PyFunction_GetGlobals
PyFunction_GetModule
PyImport_AddModule
PyImport_GetModuleDict
PyList_GetItem, PyList_GETITEM
PyMethod_Class, PyMethod_GET_CLASS
PyMethod_Function, PyMethod_GET_FUNCTION
PyMethod_Self, PyMethod_GET_SELF
PyModule_GetDict
PyObject_Init
PyObject_InitVar
PySequence_Fast_GET_ITEM
PySys_GetObject
PyThreadState_GetDict
PyTuple_GetItem, PyTuple_GET_ITEM
PyWeakref_GetObject, PyWeakref_GET_OBJECT
Py_InitModule
Py_InitModule3
Py_InitModule4
于 2012-04-20T17:23:18.600 に答える
1

Python-Dev のこのスレッドは、そのようなリストが存在しないことを強く示唆しています。スレッドでは、それについて何をすべきかについても議論しています。

于 2012-04-20T14:44:14.197 に答える