[Python-Dev] The proliferation of simple lowercase words in builtins (was: Default constructor values)

Anders J. Munch andersjm@dancontrol.dk
Fri, 13 Jun 2003 10:43:24 +0200


Hi all, this is my first post to python-dev.

I see this a lot in replies to newbies on c.l.py: The newbie has used
'open' or 'list' as a variable name, and is warned not to do that
because it shadows the builtin by the same name.

But dir(__builtins__) tells me that it's unrealistic to expect
pythoneers to avoid shadowing the builtins; there are simply too many
builtins with names that are lowercase dictionary words.

I could find plenty of examples from my own code, or from the standard
library, e.g. in code.py:
    list = traceback.format_exception_only(type, value)

Now scoping means that this still works, but error reporting is
affected.  By Murphy's law, someone is at sometime going to
accidentally call a builtin when a user-defined variable was intended.

    weekdays = list()
    def list():
        """lists weekdays"""
        return ['Mon', 'Tue', 'Wed', 'worn out already, see ya next week']

To aid in error reporting I think builtins should, all else equal, be
strict about their arguments -- the fewer valid argument combinations,
the better the chance that a mistaken use is flagged right away.

int(), str() and list() I don't understand -- lambda:0, lambda:'' and
lambda:[] communicate intent better than int, str and list.

- Anders