On Sat, May 30, 2020 at 04:34:49PM +1200, Greg Ewing wrote:
> On 30/05/20 12:11 am, Steven D'Aprano wrote:
> >I said that the storage mechanism of *how* local variables are stored,
> >and hence whether or not writes to `locals()` are reflected in the
> >local variables, is an implementation detail.
>
> That's true, but just to be clear, my ?= idea doesn't rely on
> that implementation detail. If locals were kept in a dict, for
> example, it could work by testing whether the name has an
> entry in the dict.
This thread is huge and I'm losing track of who said what and what they
meant by it. I thought `?=` was Chris' idea :-)
Is this `?=` idea for a general purpose operator we can use anywhere we
like? That's what I thought it was, but now I'm doubting my own memory.
E.g. I do this lots of times:
try:
spam
except NameError:
spam = expression
(Well, usually I end up using `def spam()...` but that's another story.)
If we had that operator I could use:
spam ?= value
Or do you mean for it to be purely syntax for function signature lines,
i.e. only valid in a signature line:
def spam(arg?=expression):
...
If so, I thought you were opposed to putting late-binding inside
signature lines.
Also, it would still require special handling by the interpreter to
ensure that the expression was re-evaluated each time it was needed.
Otherwise it's still just early binding.
> This also means that it *could* be made to work in class and
> global scopes if it were so desired.
I cannot imagine why it could only be made to work in locals but not
elsewhere. A NameError (including subclasses) is a NameError, and a name
is always either bound or unbound, there is no third state it could be.
It either is bound to a value, or not bound to a value.
Some people (Alex, Chris I think?) have tried to argue that there is a
distinction between an unbound variable and a variable that doesn't
exist at all, but I'm not clear what they think that distinction would
be, or why (if such a distinction exists) the interpreter doesn't tell
when it's one or the other:
NameError: name 'grue' is not defined
NameError: name 'bleen' doesn't exist at all
--
Steven
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/C6XLJF6OXEA6I4VT7MBGMPCHZ2LSNOZK/
Code of Conduct: http://python.org/psf/codeofconduct/