关于函数:如果N个变量中有多个为真,则为Python

Python if more than one of N variables is true

我需要检查是否定义了A、B、C和D中的多个:

1
2
3
def myfunction(input, a=False, b=False, c=False, d=False):
    if <more than one True> in a, b, c, d:
    print("Please specify only one of 'a', 'b', 'c', 'd'.)

我目前正在嵌套if语句,但这看起来很可怕。你能提出更好的建议吗?


首先想到的是:

1
if [a, b, c, d].count(True) > 1:


尝试添加值:

1
2
if sum([a,b,c,d]) > 1:
    print("Please specify at most one of 'a', 'b', 'c', 'd'.")

这是因为布尔值继承自int,但如果有人传递整数,则可能会受到滥用。如果这是一种风险,那就把他们都扔给布尔人:

1
2
if sum(map(bool, [a,b,c,d])) > 1:
    print("Please specify at most one of 'a', 'b', 'c', 'd'.")

或者,如果您只希望一个标志是True

1
2
if sum(map(bool, [a,b,c,d])) != 1:
    print("Please specify exactly one of 'a', 'b', 'c', 'd'.")


如果只需要1个真值:

1
2
3
 def myfunction(input, a=False, b=False, c=False, d=False):
    if filter(None,[a, b, c, d]) != [True]:
        print("Please specify only one of 'a', 'b', 'c', 'd'.)")