2015-11-03 49 views
2

如何調用返回兩個變量的函數?如何調用返回多個值的函數

例如:

def F1(x): 
    do something with x 
    return y, z 

def F2(y, z, q): 
    do lots of other things 
    return profit 

應該使用什麼樣的語法來調用從F2這使得清楚F1F1輸出y並且是z

我的直覺說

F2(F1(x), q) 

這很好,但後來如何調用內F2yz

+0

爲什麼不只是做'y,z = f1(x)p = f2(y,z,q)' – Busturdust

+0

Hi @Florin Ghita。例如,你的意思是我使用F1中返回的變量名引用F2中的值嗎? – poppyseeds

+0

@Busterdust,謝謝!那麼在F2之外,我會使用y,z = F1(x),然後在F2中調用這些變量?有沒有辦法做到這一點,沒有中間步驟? – poppyseeds

回答

1

您已接近解決方案。 您的F1返回2倍的值,但如果你把直接在F2參數,F2將輸入看到

(y,z) <--- tuple 
q <--- variable 

一個解決方案是將F1返回到2個變量,然後將它們傳遞給F2

y,z = F1(x) 
F2(y,z,q) 

另一種解決方案是使用*args 第一遍的q,則y和z

def F2(q, *args): 
    y, z = *args 
    some other code 

def F1(x): 
    some code 
    return y, z 

F2(q, *F1(x)) 
+0

謝謝。這是一個非常明確和信息豐富的答案。 – poppyseeds

0

您可以返回到一個元組:

a, b = F1(x) 
0

您可以使用*argspass multiple positional arguments給你的函數:

演示:

>>> def F(q,*args): 
... x,y=args 
... print x,y 
... print q 
... 
>>> F('q',4,5) 
4 5 
q 

而當函數返回多個參數,你可以使用*在通話時解開元組,以便將所有參數傳遞給函數:

>>> def A(): 
... return 5,6 
... 
>>> F('q',*A()) 
5 6 
q 
0

如果你想打電話F2這樣的,你可以使用:

F2(*F1(x), q=q) 

此解壓縮的F1結果,只有命名參數可以按照那種操作的,所以你必須通過它的名字來稱呼q。但首先解壓F1的結果可能更有意義。

y, z = F1(x) 
F2(y, z, q) 
0

不是很優雅,但你可以叫F2爲:

F2(F1(x)[0], F1(x)[1], q) 

這將返回profit

3

您可以將F2函數定義更改爲以下幾點:

def F2((y, z), q): 

並將其稱爲:

F2(F1(x), q) 

返回的元組從F1的第0個元素將被視爲yF2和返回的元組的第一元件將被視爲zF2

相關問題