On Tue, Aug 04, 2015 at 10:37:00PM -0400, random832@fastmail.us wrote:
Suppose iterator * number returns a new iterator which will iterate through the original iterator once, caching the results, and then yield the cached results n-1 times.
Repetition on an arbitrary iterator is ambiguous. If I say, "repeat the list [1,2,3] twice" there is no ambiguity, I must get [1, 2, 3, 1, 2, 3] or there is some problem. But iterators can have non-deterministic lengths and values: def gen(): while random.random() < 0.9: yield random.random() What does it mean to "repeat gen twice"? It might mean either of: - generate one run of values using gen, then repeat those same values; - generate two runs of values using gen. Both are easy to write, e.g.: list(gen())*2 # explicitly cache the values, then repeat chain(gen(), gen()) # explicitly use two separate runs In the face of ambiguity, resist the temptation to guess. There's no obvious right behaviour here, whichever you bake into iterator * you will make about half the users unhappy because it doesn't support their use-case. Not every simple expression needs to be an operator. -- Steve