python 3的布尔参数

时间:2013-05-29 18:30:26

标签: python python-3.x

我是否需要使用elif来解决这个问题?我该怎么办呢? 抱歉,这是一个巨大的菜鸟问题。

def hint1(p1, p2, p3, p4):
    ''' (bool, bool, bool, bool) -> bool
    Return True iff at least one of the boolen parameters 
    p1, p2, p3, or p4 is True. 
    >>> hint1(False, True, False, True)
    True
    '''

4 个答案:

答案 0 :(得分:4)

def hint1(*args):
    return any(args)

any函数采用iterable,如果其中的任何元素为真,则返回True

问题是any采用可迭代的,而不是一堆单独的值。

这就是*args的用途。它接受你所有的参数并将它们放在一个元组中,这个元组被输入到你的单个参数中。然后,您可以将该元组作为可迭代项传递给any。有关详细信息,请参阅教程中的Arbitrary Argument Lists


正如Elazar所指出的,这不适用于4个参数,它适用于任何个参数(甚至0)。这种情况是好还是坏取决于你的用例。

如果你想在3个参数或5个参数上得到错误,你当然可以添加一个明确的测试:

if len(args) != 4:
    raise TypeError("The number of arguments thou shalt count is "
                    "four, no more, no less. Four shall be the "
                    "number thou shalt count, and the number of "
                    "the counting shall be four. Five shalt thou "
                    "not count, nor either count thou three, "
                    "excepting that thou then proceed to four. Six "
                    "is right out.")

但实际上,在这种情况下使用静态参数列表要简单得多。

答案 1 :(得分:1)

关于你能得到的最短......

def hint1(p1,p2,p3,p4):
    return any([p1,p2,p3,p4])

答案 2 :(得分:0)

any()方法只需一次迭代,如果任何元素为真,则返回true。

def hint1(p1, p2, p3, p4):
    return any([p1, p2, p3, p4])

答案 3 :(得分:-2)

您可以尝试

def hint1(p1,p2,p3,p4):
    if p1 or p2 or p3 or p4:
        return True

或者

def hint1(p1,p2,p3,p4)
    if p1:
        return True
    if p2:
        return True
    if p3:
        return True
    if p4:
        return True
    return False