为了创建一个充当序列的PyObject,我只在PyTypeObject
的变量tp_as_sequence
的槽sq_item
中添加了一个函数。你知道吗
这是我的sq_item
函数:
static PyObject *py_myseq__sq_item(PyMySeq *self, unsigned int keynum)
{
if (keynum < 0) keynum += self->len; /* ex.:>>> my_seq[-1] */
if (keynum >= 0 && keynum < self->len) {
MyItem *item = &self->items[keynum];
return PyMyItem_New(item);
}
PyErr_Format(PyExc_IndexError,
"PyMySeq[index]: index %d out of range", keynum);
return NULL;
}
每次我想获取序列的一个项时,都会调用PyMyItem_New
函数。这在大多数情况下是好的。但对于像使用for循环这样的情况,这是非常低效的:
for i in myPyObjSeq:
print(i)
如果我的序列有一百万个项目。这些物品将在这个循环中被创建和销毁100万次!!!你知道吗
问题是:有没有办法避免这种情况???你知道吗
您有几个选择:
See this question for details.
list.sort(key=function)
传递回调的方式类似。在这种情况下,您可以向每个函数传递相同的对象,使用修改后的索引
,但不要上当,也可以调用函数create的PyObject!你知道吗
相关问题 更多 >
编程相关推荐