函数输出

2024-06-30 08:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
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

Tags: intest功能getdeffunctionresultsperson
3条回答

您正在查找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

(当然,我在这里编了名字,因为我不知道上下文)。你知道吗

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

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]]

函数将返回符合语句的第一个匹配项。要返回全部,可以将它们保存在列表中,循环完成后,返回列表。你知道吗

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

相关问题 更多 >