要创建一个充当序列的PyObject,我只是在sq_item
的变量tp_as_sequence
的插槽PyTypeObject
中添加了一个函数。
这是我的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万次!!!
问题是:有没有办法避免这种情况?
答案 0 :(得分:2)
您有几个选择:
list.sort(key=function)
。