You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数返回值疑问:为何return仅返回单个值,如何返回全部?

问题

我写了下面这个Python函数:

def filter_verdi_total_fruit_cost(file_name):
    output = []
    for token in file_name.split('\n'):
        items = token.split()
        if len(items) > 2 and items[1] in fruit_words:
            output.append((items[1], items[-1]))
            for _, v in output:
                return v

print(filter_verdi_total_fruit_cost(verdi50))

调用后只打印出单个值 123,20,但把return v换成print(v)后,调用print(filter_verdi_total_fruit_cost(verdi50))能输出所有匹配的成本值:

123,20
2.772,00
46,20
577,50
69,30
3.488,16
137,50
500,00
1.000,00
2.000,00
1.000,00
381,2

想知道怎么不用print语句,让函数返回所有这些值?

解决办法

你的问题出在两个关键点:

  1. return的特性:return语句一执行就会直接终止函数,所以第一次走到return v时,函数立刻结束,只能返回第一个匹配到的值。
  2. 冗余的内部循环:每次往output添加元素后就立刻遍历output并返回,完全打断了收集所有结果的逻辑。

要返回所有值,你需要先把所有匹配结果收集完成,再统一返回,有两种常用方案:

方案1:返回结果列表

先把所有符合条件的值收集到列表中,循环结束后一次性返回:

def filter_verdi_total_fruit_cost(file_name):
    output = []
    for token in file_name.split('\n'):
        items = token.split()
        if len(items) > 2 and items[1] in fruit_words:
            # 若需要保留水果名和成本的对应关系,用这句:
            # output.append((items[1], items[-1]))
            # 仅需成本值的话用这句:
            output.append(items[-1])
    # 循环执行完毕后返回所有结果
    return output

# 调用函数后可遍历结果输出或做其他处理
results = filter_verdi_total_fruit_cost(verdi50)
for cost in results:
    print(cost)

方案2:用生成器返回(适合大数据场景)

如果处理的内容体量较大,不想一次性占用过多内存,可以用生成器逐个返回结果:

def filter_verdi_total_fruit_cost(file_name):
    for token in file_name.split('\n'):
        items = token.split()
        if len(items) > 2 and items[1] in fruit_words:
            # 若需返回元组,替换为:yield (items[1], items[-1])
            yield items[-1]

# 调用生成器并遍历输出
for cost in filter_verdi_total_fruit_cost(verdi50):
    print(cost)
核心说明

return的作用是终止函数并返回单个值(或单个容器),不能在循环内用它返回多个值。要么把所有结果装进列表、元组等容器,循环结束后统一返回;要么用yield创建生成器,让函数变成可迭代对象,调用时遍历即可获取所有结果。

内容的提问来源于stack exchange,提问作者mightycode Newton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:45:37