The del statement

Duncan Booth duncan.booth at invalid.invalid
Thu May 8 05:46:37 EDT 2008


Arnaud Delobelle <arnodel at googlemail.com> wrote:

> 
> 
> Duncan Booth wrote:
>> Arnaud Delobelle <arnodel at googlemail.com> wrote:
>>
>> >
>> >
>> > George Sakkis wrote:
>> >> One of the few Python constructs that feels less elegant than
>> >> necessary to me is the del statement. For one thing, it is 
overloaded
>> >> to mean three different things:
>> >> (1) del x: Remove x from the current namespace
>> >> (2) del x[i]: Equivalent to x.__delitem__(i)
>> >> (3) del x.a: Equivalent to x.__delattr__('a') (or delattr(x,'a'))
>> >
>> > Note that the 'X = Y' construct has the corresponding three 
meanings:
>> >
>> > (1) x = 4 # Bind x to 4 in the 'current namespace'
>> > (2) x[i] = 4 # equivalent to x.__setitem__(i, 4)
>> > (3) x.a = 4 # Equivalent to x.__setattr__('a', 4)
>>
>> I think you both missed a case:
>>
>>   (1b) global x; del x    # Remove x from global namespace
>>   (1b) global x; x = 4    # Bind x to 4 in the global namespace
> 
> This is why you put 'current namespace' in quotes!  But all three of
> us missed the case:

I'd assumed you were just trying to say that the current namespace might 
be different things: locals or a class namespace. I would say that the 
global statement makes the assign/del refer to a non-current namespace.

> 
> (1-3000) What about nonlocal?

What about nonlocal? You can't (in Python 2.x) assign or del a name from 
an enclosing scope if that's what you mean. If that isn't what you mean 
then you'll have to explain it to me in simpler terms.




More information about the Python-list mailing list