[Python-Dev] Py2.6 buildouts to the set API
"Martin v. Löwis"
martin at v.loewis.de
Sun May 20 07:36:10 CEST 2007
>> I'd rather see iterator versions of the set operations.
>
> Interesting idea. I'm not sure I see how to make it work.
> If s|t returned an iterator, then how would s|t|u work?
I don't think s.union(t) should return an iterator, if for
no other reason than compatibility. Instead, there might
be s.iunion(t) (or s.unioni(t), or s.iterating_union(t)).
Then, you could spell s.iunion(t.iunion(u)). iunion is
implemented as
def iunion(self, other):
for o in self:
yield o
for o in other:
if o not in self:
yield o
So rather than writing
x = a.union(b,c,d,e)
you could write
x = set(a.iunion(b.iunion(c.iunion(d.iunion(e)))))
or
x = a.union(b.iunion(c.iunion(d.iunion(e))))
Likewise
def iintersection(self, other):
for o in other:
if o in self:
yield o
> Are you proposing lazy evaluation of unions, intersections,
> and differences?
I'm not so sure about differences: union and intersections
are commutative, so one should typically be able to reorder
the evaluation so that the left operand is a true set,
and the other is the iterator. For difference, it would
be necessary that the right operand is the true set;
it couldn't be an iterator, as you need to test whether
an element of self is in the other operand.
Regards,
Martin
More information about the Python-Dev
mailing list