Use of a variable in parent loop
Terry Reedy
tjreedy at udel.edu
Sat Sep 26 03:22:00 EDT 2020
On 9/26/2020 12:43 AM, Stephane Tougard via Python-list wrote:
[Example of Perl block scoping.]
> ===PYTHON===
> #!/usr/local/bin/python
> if 4 == 4:
if True: # Only usefel in Python if you might might to switch to False.
> name = "Stephane"
> print(name)
> pass
Noise. Only 'pass' when there is no other code.
> print("Out {}".format(name))
> ============
>
> The exact same code in Python works fine, the variable name is used
> outside of the if block even it has been declared inside.
'name' is bound to a object, not declared
The only declarations are 'global' and 'nonlocal'.
Python only creates new scopes for class and function definitions. At
least for CPython, comprehensions are implicit function definitions.
> This does not look right to me.
Because you are accustomed to block scoping.
Can we change this behavior
No.
> or is there any point to keep it this way ?
Aside from not breaking most every existing Python program? If block
scoped, one would have to add an otherwise useless fake declaration
before the block to use the name outside the block. Python tries to
avoid boilerplate code.
--
Terry Jan Reedy
More information about the Python-list
mailing list