On Thu, 2 Dec 2021 at 17:28, Chris Angelico <ros...@gmail.com> wrote:
>
> On Fri, Dec 3, 2021 at 4:22 AM Nicholas Cole <nicholas.c...@gmail.com> wrote:
> > There is nothing that this proposal makes possible that is not already
> > possible with more explicit code.
>
> It's worth noting that "explicit" does not mean "verbose". For
> instance, this is completely explicit about what it does:
>
> x += 1
>
> It does not conceal what it's doing, yet it uses a very compact
> notation to say "augmented addition". The proposal in question uses an
> explicit symbol to indicate that the default should be late-bound.
>
> In contrast, a less explicit and much worse proposal might be: "If the
> argument default defines a mutable object, construct a new one every
> time", so "def f(x=1):" would be early bound and "def f(x=[]):" would
> be late-bound. This is implicit behaviour, since it's not stated in
> the code which one is which.

A bit of an aside but I find it interesting that you pick += for the
example here because there is very much an implicit behaviour with +=
that it mutates in-place or not depending on the mutability of the
object in question (a property that is invisible in the code). For x
+= 1 you can guess that x is a number and remember that all the
standard number types are immutable. Where you have e.g. mutable and
immutable versions of a type though there is no way to know just by
looking at the augmented assignment statement itself:

>>> S1 = {1, 2, 3}
>>> S2 = frozenset(S1)
>>> S3, S4 = S1, S2
>>> S3 |= {4}
>>> S4 |= {4}
>>> S1
{1, 2, 3, 4}
>>> S2
frozenset({1, 2, 3})

Is this implicitness a problem in practice? Usually it isn't but very
occasionally it gives the kind of bug that can send someone banging
their head against a wall for a long time.

--
Oscar
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/4DGKVUH2EYUP4PUUWUVJE5MTIJ3DUFHJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to