Guido van Rossum wrote:
> On 7/7/05, Walter Dörwald <[EMAIL PROTECTED]> wrote:
>
>>What is still unspecified (or at least not explicitely mentioned) in
>>the PEP is the lifetime of VAR in:
>>
>> with EXPR as VAR:
>> BLOCK
>
> It is specified well enough IMO -- you're supposed to take the
> translation into basic Python seriously. That translation specifies a
> simple assignment to VAR, and that's what I meant (and what I'm sure
> most folks understood). IOW VAR lives in the surrounding scope,
> overwrites a previous value, and survives past the with-statement
> (unless it is set inside of course).
Are there use cases for both variants?
If VAR would live only until the end of the with block, this would give
us a nice way of generating nested data structures:
class blist(list):
def __init__(self, parent=None):
if parent:
parent.append(self)
list.__init__(self)
def __enter__(self):
return self
def __call__(self, *items):
self.extend(items)
return self
x = blist()
x(1)
with blist(x) as x:
x(2)
with blist(x) as x:
x(3)
x(4)
x(5)
This would create the list:
[1, [2, [3], 4], 5]
With the current version of PEP 343, we would either have to use
different variable names on each level or use a global stack where
__enter__() and __exit__() push and pop values.
Bye,
Walter Dörwald
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com