Steven D'Aprano wrote:

> If you want iterator operations "similar to itertools", why does this
> mean you need to replace anything? Just create your own iterators.
> 
> Or use pre-processing and post-processing to get what you want.
> 
> Can you show an example of what you would like to happen?

Steven, 

my classes repesent musical objects. The fundamental paradigm I want to
apply is that of a Sequence, i.e. the most abstract aspect of music is
that "things" occur in a certain order.

Then I have a TimedSequence class, which is a Sequences whose elements
have a "time" attribute. I now want to be able to append such Sequences
by writing

s1 = TimedSequence (time=1,'a') # one-element Sequence
s2 = TimedSequence (time=2,'b')

y = s1*2 + s2

Naively appending those sequences would give me
Time=1,'a'
Time=1,'a'
Time=2,'b'

but this is not what I want. Time needs to progress if I append a
sequence to another. So what I really want is something like

Time=1,'a'
Time=2,'a'
Time=3,'b'

This implies that time is shifted to the next integer, but this is not
always the case. I need to know about some kind of "alignment". In
music this translates to "let a sequence start at the beginning of a
bar", or half bar or quarter note or whatever.

So I want to write

y = s1*2 + s2(align=10)

which should iterate as

Time=1,'a'
Time=2,'a'
Time=10,'b'

I have no difficulty passing "align" to the object (using __call__) and
use it while I furnish my own __iter__() method. However I don't quite
see how I can do this with bare itertools, though I may be wrong here.

Bare in mind that it is not only about somehow getting the job done. The
beauty of the resulting syntax is also important.




-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to