Python garbage collector/memory manager behaving strangely

Aahz aahz at
Wed Nov 14 15:19:05 CET 2012

In article <50570de3$0$29981$c3e8da3$5496439d at>,
Steven D'Aprano  <steve+comp.lang.python at> wrote:
>On Mon, 17 Sep 2012 06:46:55 -0400, Dave Angel wrote:
>> On 09/16/2012 11:25 PM, alex23 wrote:
>>>     def readlines(f):
>>>         lines = []
>>>         while "f is not empty":
>>>             line = f.readline()
>>>             if not line: break
>>>             if len(line) > 2 and line[-2:] == '|\n':
>>>                 lines.append(line)
>>>                 yield ''.join(lines)
>>>                 lines = []
>>>             else:
>>>                 lines.append(line)
>> There's a few changes I'd make:
>> I'd change the name to something else, so as not to shadow the built-in,
>Which built-in are you referring to? There is no readlines built-in.
>py> readlines
>Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>NameError: name 'readlines' is not defined
>There is a file.readlines method, but that lives in a different namespace 
>to the function readlines so there should be no confusion. At least not 
>for a moderately experienced programmer, beginners can be confused by the 
>littlest things sometimes.

Actually, as an experienced programmer, I *do* think it is confusing as
evidenced by the mistake Dave made!  Segregated namespaces are wonderful
(per Zen), but let's not pollute multiple namespaces with same name,

It may not be literally shadowing the built-in, but it definitely
mentally shadows the built-in.
Aahz (aahz at           <*>

"....Normal is what cuts off your sixth finger and your tail..."  --Siobhan

More information about the Python-list mailing list