1 对象
- int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
int PyObject_HasAttr(PyObject *o, const char *attr_name)
若对象o含有属性attr_name则返回1,否则返回0。等价与Python函数hasattr(o, attr_name)。该函数正常不会出问题。PyObject * PyObject_GetAttr(PyObject *o, PyObject *attr_name)
PyObject * PyObject_GetAttrString(PyObject *o, const char *attr_name)
返回一个新引用,该引用是对象o中名为attr_name的属性,失败返回NULL。等价与o.attr_name()。int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)
设置对象o的属性attr_name为v,失败返回-1。等价于o.attr_name=v。int PyObject_DelAttr(PyObject *o, PyObject *attr_name)
int PyObject_DelAttrString(PyObject *o, const char *attr_name)
从对象o中移除对象属性attr_name,失败返回-1。等价于del o.attr_name。int PyObject_IsInstance(PyObject *inst, PyObject *cls)
若inst是cls的实例或是cls的子类,则返回1,否则返回0。
若cls是元组,则inst会与cls中的每一项进行比较,若元组中最后一项匹配成功则返回1,否则返回0。PyObject * PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)
返回执行结果的一个新引用,失败返回NULL。调用Python对象callable_object,args是一个参数元组,命名参数kw是一个字典,若元组参数args不需要,则将args设为空元组,若不需要命名参数,则kw设为NULL。等价于callable_object(*args, **kw)。PyObject * PyObject_CallObject(PyObject *callable_object, PyObject *args)
返回执行结果的一个新引用,失败返回NULL。args为一个元组,若不需要参数,args设为NULL。等价于callable_object(*args)。PyObject * PyObject_CallFunction(PyObject *callable_object, const char *format, …)
返回执行结果的一个新引用,失败返回NULL。参数format的形式与函数Py_BuildValue()一样,并可以为NULL。等价于callable(*args)。PyObject * PyObject_CallMethod(PyObject *o, const char *method, const char *format, …)
返回执行结果的一个新引用,失败返回NULL。调用对象o的成员函数method,等价于o.method(args),从3.4版本开始method和format改为char *。PyObject * PyObject_CallFunctionObjArgs(PyObject *callable, …, NULL)
返回执行结果的一个新引用,失败返回NULL。调用对象callable,参数是若干个PyObject对象,以NULL结尾。PyObject * PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, …, NULL)
返回执行结果的一个新引用,失败返回NULL。调用对象o的函数name,参数与PyObject_CallFunctionObjArg()一样。Py_hash_t PyObject_Hash(PyObject *o)
计算并返回对象o的hash值,失败返回-1。等价于hash(o)。int PyObject_IsTrue(PyObject *o)
若对象o可转为true则返回1,否则返回0,有异常返回-1。等价于not not 0。int PyObject_Not(PyObject *o)
若对象o可转为true则返回0,否则返回1,又一场返回-1。等价于not o。PyObject * PyObject_Type(PyObject *o)
若对象o非NULL,返回对象o对应的类型对象的一个新引用,失败抛出SystemError并返回NULL。等价于type(o)。int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)
若对象o的类型为type或type的子类,则返回true,两个参数都不能为NULL。Py_ssize_t PyObject_Length(PyObject *o)
Py_ssize_t PyObject_Size(PyObject *o)
返回对象o的长度,无论对象o是序列还是字典都返回其长度,出错返回-1。等价于len(o)。PyObject * PyObject_GetItem(PyObject *o, PyObject *key)
成功返回对象o中键为key的元素的一个新引用,失败返回NULL。等价于o[key]。int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
等价于o[key]=v,失败返回-1。int PyObject_DelItem(PyObject *o, PyObject *key)
从对象o中删除key对应的元素,失败返回-1。等价于del o[key]。PyObject * PyObject_GetIter(PyObject *o)
返回一个新的引用,等价于iter(o)。返回对象o的一个新的iterator,若参数o已经是iterator,则直接返回o本身。若有异常则抛出TypeError并返回NULL。
2 数字
int PyNumber_Check(PyObject *o)
若对象o提供了数字protocol则返回1,否则返回0。PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
返回o1 + o2- PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)
返回o1 - o2 - PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)
返回o1 * o2 - PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
返回o1 // o2 PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)
返回o1 % o2- PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2)
返回divmod(o1, o2) - PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
返回pow(o1, o2, o3) - PyObject* PyNumber_Negative(PyObject *o)
返回-o - PyObject* PyNumber_Positive(PyObject *o)
返回+o - PyObject* PyNumber_Absolute(PyObject *o)
返回abs(o) - PyObject* PyNumber_Invert(PyObject *o)
返回~o - PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)
返回o1 << o2 - PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)
返回o1 >> o2 - PyObject* PyNumber_And(PyObject *o1, PyObject *o2)
返回o1 & o2 - PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)
返回o1 ^ o2 - PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)
返回o1 | o2 - PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
返回o1 += o2 - PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
返回o1 -= o2 - PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
返回o1 *= o2 - PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
返回o1 //= o2 PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
返回o1 %= o2- PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
返回o1 **=o2(when o3==Py_None)或o1=pow(o1, o2, o3) - PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
返回o1 <<= o2 - PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
返回o1 >>= o2 - PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
返回o1 &= o2 - PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
返回o1 ^= o2 - PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
返回o1 |= o2 - PyObject* PyNumber_Long(PyObject *o)
返回int(o) - PyObject* PyNumber_Float(PyObject *o)
返回float(o) - PyObject* PyNumber_ToBase(PyObject *n, int base)
转换进制,n为整数
3 序列
int PySequence_Check(PyObject *o)
若对象o提供队列protocol则返回2,否则返回0。Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)
返回对象o中元素的数量,失败返回-1。len(o)PyObject* PySequence_Concat(PyObject *o1, PyObject *o2)
返回o1 + o2PyObject* PySequence_Repeat(PyObject *o, Py_ssize_t count)
返回o * countPyObject* PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
返回o1 += o2PyObject* PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
返回o *= countPyObject* PySequence_GetItem(PyObject *o, Py_ssize_t i)
- PyObject* PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
- int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)
- int PySequence_DelItem(PyObject *o, Py_ssize_t i)
- int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)
- int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
- Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)
- int PySequence_Contains(PyObject *o, PyObject *value)
Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)
PyObject* PySequence_List(PyObject *o)
返回一个list,内容来自序列对象o或迭代器o,失败返回NULL。- PyObject* PySequence_Tuple(PyObject *o)
从序列对象o构造tuple返回,失败返回NULL。
4 字典
int PyMapping_Check(PyObject *o)
若对象o提供字典protocol,则返回1,否则返回0。Py_ssize_t PyMapping_Size(PyObject *o)
- Py_ssize_t PyMapping_Length(PyObject *o)
返回len(o) - int PyMapping_DelItemString(PyObject *o, const char *key)
- int PyMapping_DelItem(PyObject *o, PyObject *key)
返回del o[key] - int PyMapping_HasKeyString(PyObject *o, const char *key)
- int PyMapping_HasKey(PyObject *o, PyObject *key)
返回key in o - PyObject* PyMapping_Keys(PyObject *o)
返回list(o.keys()) - PyObject* PyMapping_Values(PyObject *o)
返回list(o.values()) - PyObject* PyMapping_Items(PyObject *o)
返回list(o.items()),每一项都是一个元组(键,值) - PyObject* PyMapping_GetItemString(PyObject *o, const char *key)
返回o[key] - int PyMapping_SetItemString(PyObject *o, const char *key, PyObject *v)
o[key]=v,失败返回-1。
5 迭代器
- int PyIter_Check(PyObject *o)
若对象o支持迭代器操作则返回true - PyObject * PyIter_Next(PyObject *o)
从迭代器o取下一个值并返回该值的新引用。若已没有数据可取或出错则返回NULL。
PyObject *iterator = PyObject_GetIter(obj);
PyObject *item;
if (iterator == NULL)
{
// error
}
while (item = PyItem_Next(iterator))
{
// do something with item
...
// release reference when done
Py_DECREF(item);
}
Py_DECREF(iterator);
if (PyErr_Occurred())
{
// error
}
else
{
// continue do something
}