On 12/22/2017 8:53 AM, Kirill Balunov wrote:
On Dec 20, 2017 22:43, "Kirill Balunov" <kirillbalu...@gmail.com> wrote:

Since PEP 526 -- Syntax for Variable Annotations
<https://www.python.org/dev/peps/pep-0526/>  was approved, in Python 3.6+
it is possible to provide type hint information in the form *x: int*,
also the PEP says "However, annotating a local variable will cause the
interpreter to always make it local to the scope and leaves the variable
uninitialized".

It is unitialized only if you do not initialize it.

Therefore in Python 3.6+ it is syntactically legal to
write:

def outer():
     x: int
     def inner():
         nonlocal x
         x = 10
     inner()
     print(x)

Why would you write the above instead of

>>> def f():
        x:int = 10
        print(x)
        
>>> f()
10

while the above snippet is semantically more equivalent to:

More equivalent than what?

def outer():
     #x
     def inner():
         nonlocal x
         x = 10
     inner()
     print(x)

Which is obviously a *SyntaxError: no binding for nonlocal 'x' found`*,
sorry for the pun. Also there is nothing said about this style in PEP 8 and
Python 3.6 docs. So should I consider this as a bug, or an implementation
detail (side effect), or a wart, or a feature?

I don't understand the question.  Maybe people on SO did not either.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to