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")) ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |