2014-02-18 23 views
0

我有一個返回兩個值的函數:如何以這種特定的方式使用多個返回值函數?

def dbfunc: 
    # ... 
    return var1, var2 

我有這個類:

class MyClass: 
    foo = ... 
    bar = ... 

我想分配dbfunc(的結果)的MyClass的實例,我想創造。 我會嘗試這樣做:

my_object = MyClass(dbfunc()) # does not work because the return type is a tuple 

我可以這樣做:

res = dbfunc() 
my_object = MyClass(foo=res[0], bar=res[1]) 

,但實際上,我想這樣做全面列表的中間,所以我不能讓這幾樣「預做作」。我必須一次做到這一點。

感謝您的幫助。

回答

3

Argument unpacking

my_object = MyClass(*dbfunc()) 

放一個*的最後一個參數的函數之前和Python將遍歷該參數,並通過元素到功能作爲單獨的位置參數。您可以使用**和關鍵字參數的詞典。

此外,它看起來像你可能有一個關於類與實例屬性的錯誤。請參閱「How do I avoid having Python class data shared among instances?」。它可能會或可能不會很好,具體取決於您剝離的MyClass的部分。

0

你可以更簡單地定義你的功能和你的班級,我認爲如下所示。

def dbfunc: 
    # ... 
    return var1, var2 

class MyClass: 
    def __init__(foo, bar): 
     self.foo = name 
     self.bar = bar 

[var1, var2] = dbfunc() 
my_object = MyClass(var1, var2) 
相關問題