On Tue, Nov 30, 2021 at 12:41 PM Richard Damon <rich...@damon-family.org> wrote: > > On 11/29/21 5:01 PM, Chris Angelico wrote: > > On Tue, Nov 30, 2021 at 8:55 AM Marco Sulla > > <marco.sulla.pyt...@gmail.com> wrote: > >> I must say that I'm reading the documentation now, and it's a bit > >> confusing. In the docs, inplace operators as |= should not work. They > >> are listed under the set-only functions and operators. But, as we saw, > >> this is not completely true: they work but they don't mutate the > >> original object. The same for += and *= that are listed under `list` > >> only. > >> > > Previously explained here: > > > >>> On Mon, 22 Nov 2021 at 14:59, Chris Angelico <ros...@gmail.com> wrote: > >>>> Yeah, it's a little confusing, but at the language level, something > >>>> that doesn't support |= will implicitly support it using the expanded > >>>> version: > >>>> > >>>> a |= b > >>>> a = a | b > >>>> > >>>> and in the section above, you can see that frozensets DO support the > >>>> Or operator. > >>>> > >>>> By not having specific behaviour on the |= operator, frozensets > >>>> implicitly fall back on this default. > >>>> > > The docs explicitly show that inplace operators are defined for the > > mutable set, and not defined for the immutable frozenset. Therefore, > > using an inplace operator on a frozenset uses the standard language > > behavior of using the binary operator, then reassigning back to the > > left operand. > > > > This is a language feature and applies to everything. You've seen it > > plenty of times with integers, and probably strings too. A frozenset > > behaves the same way that anything else does. > > > > ChrisA > > I suppose the question comes down to is it worth adding a reminder in > the description of the inplace operators that if a type doesn't support > the inplace operator, it is automatically converted into the equivalent > assignment with the binary operator? >
My view is: no, because you'd have to put that reminder on every single object in Python. The details are here, and apply to all Python code, not to any particular type: https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements ChrisA -- https://mail.python.org/mailman/listinfo/python-list