[Python-Dev] 'With' context documentation draft (was Re: Terminology for PEP 343

Walter Dörwald walter at livinglogic.de
Fri Jul 8 13:39:44 CEST 2005


Guido van Rossum wrote:
> On 7/7/05, Walter Dörwald <walter at livinglogic.de> 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


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /