加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在pyd中实现迭代器

发布时间:2020-12-20 13:11:22 所属栏目:Python 来源:网络整理
导读:我试图为包含pyd.wrap_class的D类提供 python迭代器支持.根据文档( https://github.com/ariovistus/pyd/wiki/ClassWrap#Iterator_wrapping和 http://pyd.readthedocs.org/en/latest/classes.html#iterator-wrapping),下一个方法应该返回null以信号终止. 这是
我试图为包含pyd.wrap_class的D类提供 python迭代器支持.根据文档( https://github.com/ariovistus/pyd/wiki/ClassWrap#Iterator_wrapping和 http://pyd.readthedocs.org/en/latest/classes.html#iterator-wrapping),下一个方法应该返回null以信号终止.

这是我的最小D例子:

import pyd.pyd;
import pyd.pydobject;
import pyd.class_wrap;

class IteratorTest
{
    IteratorTest _iter()
    {
        return this;
    }

    PydObject _next()
    {
        return null;
    }

}

extern(C) void PydMain() {
    module_init();

    wrap_class!(
        IteratorTest,Def!(IteratorTest._iter,PyName!("__iter__")),Def!(IteratorTest._next,PyName!("next"))
    );
}

但是,使用python测试代码调用它

for item in IteratorTest() :
    print item

打印出一个永无止境的无流.有谁知道我在做错了什么?

解决方法

感谢DejanLekic,我找到了问题的解决方案.
正确的实现是(注意_next()方法的更改签名):

import pyd.pyd;
import pyd.class_wrap;
import deimos.python.object;

class IteratorTest
{
    IteratorTest _iter()
    {
        return this;
    }

    PyObject *_next()
    {
        return null;
    }

}

extern(C) void PydMain() {
    module_init();

    wrap_class!(
        IteratorTest,PyName!("next"))
    );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读