On 16/11/2017 06:16, Saeed Baig wrote:
Hey guys I am thinking of perhaps writing a PEP to introduce constants to 
Python. Something along the lines of Swift’s “let” syntax (e.g. “let pi = 

Since I’m sort of new to this, I just wanted to ask:
- Has a PEP for this already been written? If so, where can I find the 
link/info to it?
- Do you guys think it would be a good idea? Why or why not? Do you think 
there’s a better way to do it? I’d like to know what others think about this 
idea before making any formal submission.

I've taken part in a few discussions here on the subject.

However, if you're going to write a PEP, does that require that you have some idea of how it would be implemented?

For example, you write this:

  let A = 10
  let B = 20
  x = A + B

On CPython, would the byte-code compiler reduce the A+B to 30, or would it still do the calculation?

Suppose those lets were in an imported module M:

  import M

  x = M.A + M.B

Would it reduce the expression here or not? (And if so, how? Remember that M itself is not constant, so M could have been reassigned as another module, or a class, so that another M.A is not a constant.)

What would happen here:

  let A = 10
  A = 12

Would the assignment be allowed or not? Because the way Python works now, is that EVERY (top-level) identifier created by the user is a variable, and can be assigned something else. To prohibit A=12 would mean creating a new category of identifier that is fixed.

And the error would be hard to pick up at compile-time here:

  M.A = 12

As the category of M.A is not known to the byte-code compiler (also that M is not constant as I said).

Note that names are created also with 'import', 'def' and 'class', and it might be desirable to have these constant too, for example:

   let def F():


Reply via email to