如何在Tree方法中正确放置返回False语句?

时间:2016-03-09 14:46:02

标签: python function python-3.x tree

如果存在具有通过测试测试的值的Tree节点,则返回True的函数如果没有这样的值则返回False。这里我遇到了第一个文档字符串示例def greater_than_nine(n): return n > 9的问题。如您所见,10.5大于9,因此contains_test_passer应返回True。但我很难放置返回False语句。现在,该函数始终返回False。有人可以帮忙吗?

def contains_test_passer(t, test):
"""
Return whether t contains a value that test(value) returns True for.

@param Tree t: tree to search for values that pass test
@param (object)->bool test: predicate to check values with
@rtype: bool

>>> t = descendants_from_list(Tree(0), [1, 2, 3, 4.5, 5, 6, 7.5, 10.5], 4)
>>> def greater_than_nine(n): return n > 9
>>> contains_test_passer(t, greater_than_nine)
True
>>> def even(n): return n % 2 == 0
>>> contains_test_passer(t, even)
True
"""
if test(t.value):
    return True
else:
    for x in t.children:
        contains_test_passer(x,test)

    return False

2 个答案:

答案 0 :(得分:2)

因为contains_test_passer返回一个布尔值,你只需要捕获递归调用的值:

for x in t.children:
    if contains_test_passer(x,test):
        return True
return False

答案 1 :(得分:2)

我会使用any

return test(t.value) or any(contains_test_passer(x, test) for x in t.children)

如果对contains_test_passer的任何调用返回True,则返回True,否则返回False。它的行为完全几乎与Tadhg McDonald-Jensen的答案中的代码相同,但我认为它更具可读性。