功能上的功能

时间:2012-11-09 13:00:11

标签: python

我该如何制作功能。显示所有不良值而不只是一个?

def get_bad_results(person_results):
        for i in person_results:
                if i[1]>i[3] or i[1]<i[2]:
                    return i[0]

test_results = [["White blood cells",8.5,2,7],
                ["Neutrophils",5.3,2.5,5],
                ["Red blood cells", 12.4, 9,15]]

a = get_bad_results(test_results)
print a

显示White blood cells

而不是

White blood cells, Neutrophils

5 个答案:

答案 0 :(得分:5)

您的count_healthy()函数没有return一个值,因此bNone。由于该函数执行打印,然后是print b,它解释了函数输出后None的输出。

基本上,一个应该进行计数的函数可能不应该打印结果,而应该return它以便调用者可以决定应该打印结果或处理方式不同。

答案 1 :(得分:1)

您的函数没有return语句,因此隐式返回None

尝试添加return语句并返回您要打印的值。

答案 2 :(得分:1)

正如您期望每次调用多次结果一样,最好使用生成器函数:

def get_bad_results(person_results):
    for i in person_results:
        if i[1]>i[3] or i[1]<i[2]:
            yield i[0]

或生成器表达式:

def get_bad_results(person_results):
    return (i[0] for i in person_results if i[1]>i[3] or i[1]<i[2])

这样

test_results = [["White blood cells",8.5,2,7],
                ["Neutrophils",5.3,2.5,5],
                ["Red blood cells", 12.4, 9,15]]

for i in get_bad_results(test_results):
    print i
print list(get_bad_results(test_results))
print ", ".join(get_bad_results(test_results))

给出输出

White blood cells
Neutrophils
['White blood cells', 'Neutrophils']
White blood cells, Neutrophils

对于其他功能,请执行

def count_healthy(all_results):
    counter = 0
    for i in all_results:
        if len(list(get_bad_results(i))) == 0:
            counter += 1
    return counter

或只是

def count_healthy(all_results):
    return sum(1 for i in all_results if len(list(get_bad_results(i))) == 0)

编辑:

对于许多get_bad_results(),将其转换为列表可能会占用大量内存。

因此,您可以使用

代替len(list(get_bad_results(i))) == 0
def has_results(it):
    """Returns True if the iterator it yields any items."""
    return next((True for _ in it), False)

然后

def count_healthy(all_results):
    return sum(1 for i in all_results if not has_results(get_bad_results(i)))

答案 3 :(得分:0)

您正在尝试打印功能结果

a = get_bad_results(test_results)
print a

b =count_healthy(all_results)
print b

默认情况下,函数返回无

答案 4 :(得分:0)

好的我修好了但是现在

def get_bad_results(person_results):
        for i in person_results:
                if i[1]>i[3] or i[1]<i[2]:
                    return i[0]

test_results = [["White blood cells",8.5,2,7],
                ["Neutrophils",5.3,2.5,5],
                ["Red blood cells", 12.4, 9,15]]

a = get_bad_results(test_results)
print a

显示White blood cells

而不是White blood cells, Neutrophils