Peter Hansen wrote: > Tom Anderson wrote: >> How about just getting rid of del? Removal from collections could be >> done with a method call, and i'm not convinced that deleting variables >> is something we really need to be able to do (most other languages >> manage without it). > > Arguing the case for del: how would I, in doing automated testing, > ensure that I've returned everything to a "clean" starting point in all > cases if I can't delete variables? Sometimes a global is the simplest > way to do something... how do I delete a global if not with "del"? > I generally find that unit tests force me to structure the code in a cleaner manner, e.g. to not use globals as much, but if you do need to delete a global you do it in exactly the same way as you delete anything: use the "del" statement:
>>> x = 3 >>> def f(): global x del x >>> x 3 >>> f() >>> x Traceback (most recent call last): File "<pyshell#7>", line 1, in -toplevel- x NameError: name 'x' is not defined >>> Where I have used 'del' in a unit test it has been to delete local variables rather than globals. Specifically I wanted to ensure that some data structures were being torn down properly, so the test went something like this: setup: creates a weakref dictionary. teardown: asserts that the weakref dictionary is empty. then each test does: try: create something add it to the weakref dictionary then test it finally: use del to remove local variables force a garbage collection Without the del, when a test fails you get two failures, because the traceback information keeps the variables alive. -- http://mail.python.org/mailman/listinfo/python-list