
On Mon, 17 Jan 2022 at 18:51, John Sturdy <jcg.sturdy@gmail.com> wrote:
My idea is to support the style in which each variable comes into existence at a single well-defined point, whatever path is taken through the code, and so in the case of that example, it would be encouraging the use of conditional expressions.
But that's a style that Python explicitly rejected right back when it was first designed, and it's fundamental to the language that you *don't* explicitly declare variables. So sorry, but it's never going to happen[1]. If you want to be really precise, technically "the style in which each variable comes into existence at a single well-defined point" is actually what Python already does. The "well-defined point" is the start of the scope (function or class definition) where the variable is used, though, and not at some new "let" keyword. To see this, look at the following:
def f(): ... print(n) ... n = 1 ... f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f UnboundLocalError: local variable 'n' referenced before assignment
The variable "n" exists when the print statement runs (it's unbound, but it exists - that's what the exception says), and that's because the variable comes into existence at the *start* of the scope (function). And the choice to only have a limited number of ways to define scopes is *also* a fundamental design principle of Python, so arguing that suites should each define their own scope won't get you very far either. Essentially, you're proposing to change Python to no longer be Python, in some fairly fundamental ways. Don't be surprised if you get very few supporters for your idea... Paul [1] In theory, the SC could say that such a change is fine, but I can't see that ever happening.