[Python-ideas] Should Python have user-defined constants?
steve at pearwood.info
Tue Nov 21 19:27:59 EST 2017
On Tue, Nov 21, 2017 at 09:34:33AM -0800, Chris Barker wrote:
> On Tue, Nov 21, 2017 at 3:31 AM, Steven D'Aprano <steve at pearwood.info>
> > The
> > interesting (but is it useful?) concept is constant identifiers which
> > cannot be re-bound or re-assigned once they are set the first time.
> This would actually be a substantial shift in what Python is about --
> currently the concept of type is all about values, not names
I didn't say anything about types. My comments were about names and
- Mutability is a property of values (objects): some objects are
mutable, and other objects are not.
- Constantness is a property of names or other identifiers: some
names can only be bound once ("constants"), other names can be
bound and rebound at will ("variables").
Types are literally irrelevant to this, except in the sense that in many
languages, including Python, the distinction between mutable and
immutable is usually controlled by the type of object. But that's not
fundamental to the concept: we could, if we wanted, decouple the two.
> -- there are
> various rules about scope, and they can be adjusted with global and
> nonlocal, but it's only about scope -- a name is still a name, and can be
> bound to any type of object, etc.
Sure, that's the way Python is now. But that's not fundamental to the
concepts. Other languages allow other distinctions between names, not
just scope: for instance, names can be static (they keep their value
between function invocations), they can be read-only some languages
allow you to specify whether they are kept in RAM or in a register.
> static languages, on the other hand often (always) assign type to the name
> itself -- so adding constants and the like makes sense.
Constantness is orthogonal to the concept of static typing of variables.
> But changing the
> property of a name (this name can not be rebound) is a big shift in what
> names are about in Python -- and I don't think a good one.
It is a big shift, although not that big since we already have
read-only properties. This would "merely" (hah!) extend that concept to
other namespaces apart from instances.
I'm undecided as to whether the benefit would justify the cost.
More information about the Python-ideas