The del statement

Arnaud Delobelle arnodel at googlemail.com
Thu May 8 05:22:01 EDT 2008



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:

(1-3000) What about nonlocal?

> That Python is simple and consistent.

Seems reasonable to me.

--
Arnaud



More information about the Python-list mailing list