Default scope of variables
Joshua Landau
joshua.landau.ws at gmail.com
Thu Jul 4 01:09:04 EDT 2013
On 4 July 2013 05:36, Chris Angelico <rosuav at gmail.com> wrote:
> On Thu, Jul 4, 2013 at 2:30 PM, Joshua Landau
> <joshua.landau.ws at gmail.com> wrote:
>> That said, I'm not too convinced. Personally, the proper way to do
>> what you are talking about is creating a new closure. Like:
>>
>> for i in range(100):
>> with new_scope():
>> for i in range(100):
>> func(i)
>> func(i) # Using i from original loop
>>
>> But it's not like Python'll ever support that.
>>
>
> def foo():
> for i in range(3):
> print("outer",i)
> def inner():
> for i in range(4):
> print("inner",i)
> inner()
> print("outer",i)
>
> That works, but you then have to declare all your nonlocals, and it
> hardly reads well.
Unfortunately that's what people, I included, end up doing. Stuff like:
def paranoia(...):
def safe_recursive(...):
safe_recursive(...)
return safe_recursive
safe_recursive = paranoia()
is blimmin ugly. Then you're only really left with
class safe_recursive:
def __call__(self, ...):
self(...)
which only solves it for recursive functions.
I guess this means I actually agree with your sentiment, just not the specifics.
More information about the Python-list
mailing list