2017-07-13 53 views
0

我在python具有四個返回值寫的函數(testFunction):處理來自一個函數的多個返回在python

diff1, diff2, sameCount, vennPlot 

其中第一3個值(在輸出元組)來繪製「vennPlot」在函數內部。

類似的問題,有人問:How can I plot output from a function which returns multiple values in Python?,但對我來說,我也想知道另外兩個東西:

  1. 我可能會使用此功能後,又好像我要記住回報順序,以便我可以爲下游工作提取正確的回報。我在這裏糾正?如果是這樣,是否有更好的方法來引用元組返回比輸出[1],或輸出[2]? (output = testFunction(...))

  2. 一般來說,函數中有多個輸出是合適的嗎? (例如,在我的情況,我可以返回前三個值,繪製函數外的維恩圖)

非常感謝您的幫助。

+3

回報的字典這將是最好的選擇你的情況 –

+0

或者,你可能想看看定義一個類 – jeremycg

+0

你的函數返回一個*單個對象*,這是一個'tuple'。 –

回答

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 
+0

非常感謝。我很感激。 – Helene

1

要回答你的第一個問題,你可以解壓元組的函數也返回:

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

其次,有沒有錯從功能多路輸出,雖然使用多個相同功能的內return聲明爲了清楚起見,如果可能的話,通常最好避免。

+0

非常感謝 – Helene

1

我可能會在以後使用此功能,並似乎像我需要記住的順序的回報,以便我可以爲下游工作提取正確的回報。我在這裏糾正?

似乎你是正確的(取決於你的用例)。

如果是這樣,有沒有比輸出[1]或輸出[2]更好的引用元組返回的方法? (輸出= testFunction(...))

你可以使用一個namedtupledocs

或 - 如果順序並不重要 - 你可以只返回一個字典,這樣你就可以接取名字的值。

一般來說,從一個函數有多個輸出是否合適? (例如,在我的情況,我可以返回前三個值,繪製函數外的維恩圖)

當然,只要它的記錄,那麼它的功能不只是什麼,程序員知道那麼如何處理返回值。

+0

非常感謝您的幫助! – Helene

1
  1. Python支持直接解壓縮到變量中。所以下游,當你調用函數,你可以檢索返回值放入不同的變量簡單,如:

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

    編輯:你甚至可以「吞」你並不需要的人。例如:

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

    在這種情況下stuff_in_the_middle將包含2.

  2. 元組這是很合適的AFAIK,甚至標準庫模塊返回的元組。

    例如 - Popen.communicate()來自子流程模塊。

+0

感謝您的幫助 – Helene

相關問題