Awful code of the week

Chris Angelico rosuav at gmail.com
Tue Aug 9 01:37:47 EDT 2016


On Tue, Aug 9, 2016 at 3:20 PM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
>>     def process(self, stuff):
>>         files = self.files
>>         files = [] # to save memory
>>         files = self.files
>>         for file in files:
>>             file.process(stuff)
>>         return 1
>
>     def process(self, stuff):
>         try:
>             files = self.files
>             del files  # to save memory
>             files = []  # just to be sure
>             files = self.files
>             for file in files:
>                 file.process(stuff)
>             return 1
>         finally:
>             del files
>             del file
>             del stuff
>             del self  # this has to come last
>
>
> You can't be too careful with memory management.

Right. Of course, it gets very onerous, so we tend to use a context
manager instead.

    def process(self, stuff):
        with deallocate() as cleanup:
            cleanup(self)
            cleanup(stuff)
            files = self.files
            cleanup(files)
            del files
            files = []
            cleanup(files)
            files = self.files
            cleanup(files)
            for file in files:
                cleanup(file)
                file.process(stuff)
            return 1

There, isn't that so much better?

ChrisA



More information about the Python-list mailing list