S
Steven D'Aprano
One design principle often mentioned here (with a certain degree of
disagreement[1]) is the idea that as a general rule, you shouldn't write
functions that take a bool argument to switch between two slightly
different behaviours.
This is a principle often championed by the BDFL, Guido van Rossum.
Here's a Javascript-centric article which discusses the same idea, and gives
it a name: the Boolean Trap.
http://ariya.ofilabs.com/2011/08/hall-of-api-shame-boolean-trap.html
No doubt there are counter arguments as well. The most obvious to me is if
the flag=True and flag=False functions share a lot of code, it is poor
practice to implement them as two functions with two copies of almost
identical code.
My solution to this is a technical violation of the "Avoid Boolean Trap"
principle, but only in a private function:
def spam_on(arg):
_spam(arg, True)
def spam_off(arg):
_spam(arg, False)
def _spam(arg, flag):
do stuff
if flag:
a
else:
b
more stuff
[1] This is the Internet. There's *always* a certain amount of disagreement.
disagreement[1]) is the idea that as a general rule, you shouldn't write
functions that take a bool argument to switch between two slightly
different behaviours.
This is a principle often championed by the BDFL, Guido van Rossum.
Here's a Javascript-centric article which discusses the same idea, and gives
it a name: the Boolean Trap.
http://ariya.ofilabs.com/2011/08/hall-of-api-shame-boolean-trap.html
No doubt there are counter arguments as well. The most obvious to me is if
the flag=True and flag=False functions share a lot of code, it is poor
practice to implement them as two functions with two copies of almost
identical code.
My solution to this is a technical violation of the "Avoid Boolean Trap"
principle, but only in a private function:
def spam_on(arg):
_spam(arg, True)
def spam_off(arg):
_spam(arg, False)
def _spam(arg, flag):
do stuff
if flag:
a
else:
b
more stuff
[1] This is the Internet. There's *always* a certain amount of disagreement.