Steven D'Aprano wrote: >>> The most common idiom for such a marker is the None value. >>> >> >> Can you provide any firm evidence that using None is more common? > > > Yes, I wrote a quick and dirty script to roughly count the default > values in the Python 2.3 standard library. Here are my results: > > $ python default_counter.py > 185 .py source files were opened. > 4437 function or method definitions were found. > These functions included at least 1228 arguments with default values. > 529 or 4.307818e+01% used None as the default value. > > So, roughly 40% of default values in the standard library are None.
Fair enough, although I would point out that you haven't made any attempt to distinguish those cases where None is being used as a marker from the cases where it is being used as a value in its own right or a flag to control the function logic. The marker cases do seem to be the most common but there are plenty of other cases: e.g. base64.b64encode & base64.b64decode avoid part of the code if passed None, but don't actually substitute another value in place of the default. cgi.FieldStorage has methods getvalue, getfirst where the default=None is simply that: the default to be returned. The make_file method has a defaulted argument which it doesn't use at all. Also, most of the standard library predates a time when you could create a unique marker value just by calling 'object()'. When it was written None was by far the simplest option even in cases where a separate marker value might have been more appropriate. -- http://mail.python.org/mailman/listinfo/python-list