python return语句只打印一个值,print语句打印所有值[duplicate]

xsuvu9jc  于 2022-10-30  发布在  Python
关注(0)|答案(2)|浏览(167)

此问题在此处已有答案

What is the purpose of the return statement? How is it different from printing?(共15个答案)
10小时前就关门了。
我有这个方法:

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

但是我不明白,我只返回v,然后它只打印一个值,如果我做print(v),它会打印所有的值。
问:在没有print语句的情况下,如何返回方法中的所有值?

6yt4nkrj

6yt4nkrj1#

当您叫用return陈述式时,您的函数会停止并传回值。
您可以像这样在函数外打印元素,返回包含所有元组的数组。

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]))
    return [v for _, v in output]

print(x for x in filter_verdi_total_fruit_cost(verdi50))
t2a7ltrp

t2a7ltrp2#

要以列表形式返回output中的所有值,请更改以下内容:

for _, v in output:
                return v

更改为:

return [v for _, v in output]

注意,它需要在for循环之外(即,去缩进到与output = []相同的级别),以便在构建完整个output列表之前不会发生这种情况。
你也可以把它写成一个列表解析,而不是append ing到一个列表中,例如:

def filter_verdi_total_fruit_cost(file_contents):
    return [
        items[-1] for items in (
            token.split() for token in file_contents.split('\n')
        ) if len(items) > 2 and items[1] in fruit_words
    ]

相关问题