On 9/24/2015 2:35 AM, Steven D'Aprano wrote:
On Thursday 24 September 2015 16:16, Paul Rubin wrote:

Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> writes:
for k, v in mydict.items():
     del(k)

That looks wrong: it's deleting k from what?

The local namespace.

py> k = 23
py> print k
23
py> del k
py> print k
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
NameError: name 'k' is not defined


instead of the more obvious
for v in mydict.values():
     ...

Maybe you mean

    while mydict:
       k, v = mydict.popitem()
       ...


Hah, no, you're the second person to make that mistake! One of the guys I
work with suggested `mydict = {}` to empty the dict.

`del k` (aside: no need for parens, del is a statement, not a function)
doesn't delete the key from the dictionary. It just deletes the name k. The
obvious intent is to iterate over the *values* of the dictionary, but the
coder didn't know about values, so he iterated over (key,value) pairs, then
deleted the key local variable (not the key in the dict!) to keep the
namespace clean.

but, but, each iteration rebinds k, so del k is only needed after the loop .. unless one is super fanatic about cleanliness within the loop ;-)


--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to