[gt-users] python iterators

Brent Pedersen bpederse at gmail.com
Thu Oct 1 16:38:40 CEST 2009


On Thu, Oct 1, 2009 at 2:24 AM, Sascha Steinbiss
<steinbiss at zbh.uni-hamburg.de> wrote:
> Hi Brent,
>
> thanks for your efforts!
>
>> here's another option that just makes the feature itself
>> iterable--which actually is sorta nice:
>>
>> for sub_feature in feature:
>>       print sub_feature
>>
>> i've attached and even smaller patch to allow that. i think it's a
>> good way to keep the backwards compatiblity,
>> and i actually like it better.
>
> So do I. Is there any way to make both traversal strategies (DFS and
> direct children only) possible? There are iterators for both of them,
> and your patch only uses the DFS one. The __iter__() function can not
> take kwargs parameters, or can it? I tried the following:
>
> def __iter__(self, **kwargs):
>  if kwargs and kwargs["method"] == 'direct':
>    it = FeatureNodeIteratorDirect(self)
>  else:
>    it = FeatureNodeIteratorDepthFirst(self)
>  f = it.next()
>  while f is not None:
>    yield f
>    f = it.next()
>
> but when trying this:
>
> types = []
> for f in fn(method="direct"):
>  types.append(f.type)
>
> I got a "TypeError: 'FeatureNode' object is not callable". Any ideas?

good idea.
when you do fn(), you're accessing the __call__() method, so you could
override that instead, so then it'd be:
for f in fn(): ...

otherwise, it could still use __iter__() and just decide where to use
Direct or DepthFirst iterator
by an attribute:

if self.depth_first:
    it = FeatureNodeIteratorDepthFirst()
else:
    it = FeatureNodeIteratorDirect()


i prefer the latter.

-b

>
>
> Sascha
>
> --
> Sascha Steinbiss
> Center for Bioinformatics
> University of Hamburg
> Bundesstr. 43
> 20146 Hamburg
> Germany
>
> Email:  steinbiss at zbh.uni-hamburg.de
> URL:    http://www.zbh.uni-hamburg.de/steinbiss
> Phone:  +49 (40) 42838 7322
> FAX:    +49 (40) 42838 7312
>
> _______________________________________________
> gt-users mailing list
> gt-users at genometools.org
> http://genometools.org/mailman/listinfo/gt-users
>


More information about the gt-users mailing list