Many long-time posters have advised "Don't rebind built-in names*.

* Unless you really mean to mask it, or more likely wrap it, such as wrapping print to modify some aspect of its operation than one cannot do with its keyword parameters. The point for this post is that such wrapping modify or extend the basic meaning of the builtin, but do not abolish it.

Reasons have been given in various related forms: 'my long experience tells me its bad', 'you may need the builtin later', 'you may forget that you rebound the builtin, 'it can lead to subtle bugs, etc.

Leaving aside the code writer and code operation, I recently discovered that it is not nice for readers, whether humans or programs.

For instance, open Lib/idlelib/GrepDialog.py in an editor that colorizes Python syntax, such as Idle's editor, jump down to the bottom and read up, and (until it is patched) find
                    list.append(fn)
with 'list' colored as a builtin. Stop. That looks wrong. List.append needs two arguments: a list instance and an object to append to the list. The 'solution' is in a previous line
        list = []
Reading further, one sees that the function works with two lists, a list of file names, unfortunately called 'list', and a list of subdirectories, more sensibly call 'subdirs'. I was initially confused and reading the code still takes a small bit of extra mental energy. Idle stays confused and will wrongly color the list instance name until it is changed. Calling the file list 'fnames' or 'filenames' would have been clearer to both me and Idle.

--
Terry Jan Reedy

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

Reply via email to