2017-10-06 93 views
-1

我是python的新手,我需要如何從函數調用中獲取返回值。 我試圖做這顯然是錯誤的我需要將返回值分配給所提到的變量,我不能改變我如何從函數返回值,因爲這是問題中需要的。從元組元組中獲取值

((cross_low,cross_high),cross_sum)=find_maximum_crossing_subarray(A,low,mid,high) 

我從find_maximum_crossing_subarray函數返回這種類型的值:

tup=(max_left,max_right) 
tup1=(tup,left_sum+right_sum) 
return tup1 
+1

什麼是left_sum和right_sum的價值?當我寫了一些測試代碼,其中max_left,max_right,left_sum和right_sum是浮動的,我沒有錯誤,它一切正常。當你運行代碼時會發生什麼?你有錯誤嗎? –

+0

你能提供一些樣本數據,一些你期望的輸入和輸出。尤其是輸出格式? – MooingRawr

+0

請將您的代碼包裝在[mcve]中。可能是某處的拼寫錯誤 –

回答

0

剛落,外面包圍括號:

(cross_low, cross_high), cross_sum = find_maximum_crossing_subarray(A,low,mid,high) 
+1

刪除這些括號對我自己的測試代碼沒有任何影響。 –

+0

這根本不是問題。那些parens是不需要的,但也不是問題 –

0

這真是奇怪的語法,但基本上你顯示來自find_maximum_crossing_subarray(..)的返回簽名。

你可以看到一個簡化版本,

def some_function(): 
    return (1, 2), 3 

x = ((a, b), c) = some_function() 

print(x, a, b, c) 

... 
... output: 
((1, 2), 3) 1 2 3 

注意我是如何仍然不得不ab,並c訪問。同樣,您將有權訪問您的cross_*變量。

如果您需要查找最大值,max是一個內置函數,因此sum也是。


如果你可以改變的find_maximum_crossing_subarray(..)的返回簽名,我會做這個:

# .. 
    return max_left, max_right, left_sum + right_sum 


results = find_maximum(A, low, mid, high) 

cross_low, cross_high, cross_sum = results 
+0

這並不真正回答他們的問題。當然,目前沒有足夠的信息來真正回答他們的問題。 –

+0

那麼,問題是什麼?他需要訪問'cross_low','cross_high'和'cross_sum' ......第一個例子表明他一直都有訪問權限。他還暗示他不能改變返回簽名,這有點不相關。 – blakev

+0

問題是一個很好的問題。就像我說的,他沒有給我們足夠的信息。我們所知道的只是「這顯然是錯誤的」,但代碼看起來應該運行。我們沒有足夠的信息來調試此代碼無法工作的原因。 –