处理python

时间:2017-07-13 19:33:16

标签: python

我在python中编写了一个带有四个返回值的函数(testFunction):

diff1, diff2, sameCount, vennPlot

其中前3个值(在输出元组中)用于在函数内部绘制“vennPlot”。

提出了类似的问题:How can I plot output from a function which returns multiple values in Python?,但就我而言,我还想了解另外两件事:

  1. 我稍后可能会使用此功能,似乎我需要记住返回的顺序,以便我可以为下游工作提取正确的返回值。我在这里纠正吗?如果是这样,有没有比输出[1]或输出[2]更好的方式来引用元组返回? (输出= testFunction(...))

  2. 一般来说,从函数中获取多个输出是否合适? (例如,在我的情况下,我可以返回前三个值并在函数外部绘制维恩图。)

  3. 非常感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

从技术上讲,每个函数只返回一个值;但是,该值可以是元组,列表或包含多个值的其他类型。

也就是说,你可以返回一些东西而不仅仅是值的顺序来区分它们。你可以返回一个字典:

def testFunction(...):
    ...
    return dict(diff1=..., diff2=..., sameCount=..., venn=...)

x = testFunction(...)
print(x['diff1'])

或者您可以定义一个命名元组:

ReturnType = collections.namedtuple('ReturnType', 'diff1 diff2 sameCount venn')


def testFunction(...):
    ...
    return ReturnType(diff1=..., diff2=..., sameCount=..., venn=...)

x = testFunction(...)
print(x.diff1)  # or x[0], if you still want to use the index

答案 1 :(得分:1)

要回答您的第一个问题,您可以解压缩从函数返回的元组:

diff1, diff2, samecount, vennplot = testFunction(...)

其次,函数的多个输出没有任何问题,但是为了清楚起见,通常最好避免在同一函数中使用多个return语句。

答案 2 :(得分:1)

  

我稍后可能会使用此功能,似乎就像我需要记住返回的顺序,这样我就可以为下游工作提取正确的回报。我在这里纠正吗?

似乎你是对的(取决于你的使用案例)。

  

如果是这样,有没有比输出[1]或输出[2]更好的方式来引用元组返回? (输出= testFunction(...))

您可以使用namedtupledocs

或 - 如果顺序不重要 - 您可以只返回一个字典,这样您就可以按名称访问这些值。

  

一般来说,从函数中获得多个输出是否合适? (例如,在我的情况下,我可以返回前三个值并在函数外部绘制维恩图。)

当然,只要它被记录下来,那么它就是函数所做的事情,程序员知道如何处理返回值。

答案 3 :(得分:1)

  1. Python支持直接解压缩到变量中。因此下游,当您调用该函数时,您可以将返回值检索为单独的变量,如下所示:

    diff1, diff2, sameCount, vennPlot= testFunction(...)

    编辑:您甚至可以吞下"那些你不需要的。例如:

    diff1, *stuff_in_the_middle, vennPlot= testFunction(...)

    在这种情况下stuff_in_the_middle将包含2的元组。

  2. AFAIK非常合适,即使是标准库模块也会返回元组。

    例如 - 来自子流程模块的Popen.communicate()