功能输出

时间:2012-11-10 16:48:51

标签: python

  

可能重复:
  function in function

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

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

4 个答案:

答案 0 :(得分:4)

您正在寻找生成生成器的yield关键字:

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

然后,您可以迭代函数的结果(例如,调用list()来创建列表)。生成器比直接生成列表更可取,因为这意味着这些值是懒惰生成的,在很多情况下更节省内存。

作为旁注,索引i有点难看,在这种情况下,解压缩值会使代码更具可读性:

def get_bad_results(person_results):
        for name, age, height, weight in person_results:
                if age > weight or age < height:
                    yield name

(当然,由于我不知道上下文,因此我在这里编写了名称。)

答案 1 :(得分:2)

该函数将返回适合该语句的第一个匹配项。要返回all,可以将它们保存在列表中,当循环完成后,返回列表。

for i in person_results:
    bads = []
    if i[1]>i[3] or i[1]<i[2]:
        bads.append(i[0])
return bads

答案 2 :(得分:1)

如果您不想使用生成器,可以将坏元素附加到列表中然后将其返回:

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

或使用列表理解:

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

答案 3 :(得分:0)

为什么不从您正在进行比较的功能中打印?然后你不需要任何额外的跟踪

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