[Python-ideas] Boolean parameters guidelines

Steven D'Aprano steve at pearwood.info
Sat May 7 21:59:33 EDT 2016


On Sun, May 08, 2016 at 12:41:45AM +0300, Serhiy Storchaka wrote:
> I propose to add following recommendations in PEP 8 or other documents:
> 
> 1. It is preferable to pass boolean arguments as keyword arguments (if 
> this is not the only argument).
> 
> 2. It is preferable to declare boolean parameters as keyword-only 
> parameters.
> 
> What are you think about this?

I think it is preferable *not* to have boolean parameters at all.

I don't remember if this is Guido's name for it, but I remember him 
expressing the guideline "No constant bool arguments". If you have an 
argument which takes a bool, and is used solely to switch between two 
different modes, and the caller will most likely call the function with 
the argument as a constant known when writing the code (rather than 
taking an expression or variable with value not known until runtime), 
then it is usually better to split the function into two, one for 
each mode.

For example, in the statistics module, I could have written:

def variance(data, pop=False):
    ...

and have the `pop` argument switch between population variance and 
sample variance (the default). But that would fail the "No constant bool 
args" test, since you almost always know ahead of time which variance 
you want. So instead there are two separate functions, variance and 
pvariance.

Obviously this is a guideline, not a hard rule, like all rules in PEP 
8, and there may be exceptions, e.g. the closefd argument to open.

So I think that if you are going to write a recommendation for treatment 
of bool arguments, it should start with "(1) Try to avoid bool args", 
explain the "No constant bool arguments" principle, and only then go on 
with "(2) if you still have bool arguments, then use keyword 
arguments..." as you suggest above.



-- 
Steve


More information about the Python-ideas mailing list