[Wes Turner <wes.tur...@gmail.com>] > The use cases these TypeErrors would exclude include weightings (whether > from a generator without an intermediate tuple/list or from a dict) where > the need is to do elementwise multiplication:
Yes. That's exactly what I had in mind when I wrote: >> What we're trying to stop is things like "Counter * Counter" for now, >> because the obvious implementation(*) of Counter.__mul__ would do a >> strange thing with that, where a quite different thing is plausibly >> wanted (and may - or may not - be added later - but, due to backward >> compatibility, cannot be added later if the initial implementation >> does the strange thing). The obvious implementation (already given (*)) of Counter.__mul__ would NOT AT ALL do elementwise multiplication. Nobody has asked for that yet either, so nobody is proposing to add it now either. But it's predictable that someone _will_ ask for it when __mul__ is defined for "scalars". It may or may not be added at that time. But it will be flat-out impossible to add it later (because of backward compatibility) _if_ the initial implementation does something entirely different. So, at first, we want to raise an exception for a non-'scalar" argument, so that it remains _possible_ to do something sane with it later. ... >> (*) The obvious implementation: >> >> def __mul__(self, other): >> if isinstance(other, Sized): >> raise TypeError("cannot multiply Counter by Sized type %s" >> % type(other)) >> result = Counter() >> for k, v in self.items(): >> result[k] = v * other >> return result _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/