2013-07-24 70 views
3

我有一個方法返回多個項目。清理python返回任務

def multiReturn(): 
    return 1,2,3,4 

和Im在一行

one, two, three, four = multiReturn() 

分配給它有沒有辦法清理上面的行

喜歡的東西:

one, 
two, 
three, 
four = multiReturn() 

,因爲我有一些變量名它變得很大,頁面的寬度也困擾着我。

任何想法把它清理乾淨

+3

在我的小見解中,你的情況是一個強烈的暗示,你想用這個元組實現的行爲應該在它自己的類中被抽象出來,'multiReturn()'作爲它的構造函數。 –

回答

10

您可以使用括號:

(
    one, 
    two, 
    three, 
    four 
) = range(4) 
+3

但是,這並不清潔。 – delnan

+0

@delnan Nope ...在這種情況下 - 它不像原來那麼清楚......;)只是顯示「正確」的方式來做多行分組 –

2

在每行的末尾使用反斜槓。

one, \ 
two, \ 
three, \ 
four = multiReturn() 
+0

最近,我告訴我,當你這樣做時,它會告訴解釋器忽略下一個字符,在通常情況下,當使用這樣的反斜槓時,它將成爲換行符。但是,如果您在該處輸入錯字或發表評論,則可能是另一個字符。所以,被警告。 – 2rs2ts

8

如果您已經返回這麼多項目,考慮創建某種形式的數據結構。一個班級應該沒問題,但是如果你認爲它過於矯枉過正,你可以使用一個字典或者甚至一個namedtuple

# First define the structure 
myStruct = namedtuple('myStruct', ['item1', 'item2', 'item3', 'item4']) 

# Then use it 
def multiReturn(): 
    return myStruct(1,2,3,4) 

# No unpacking required! 
this_is_awesome = multiReturn() 
+1

+1''''''''''''''''' – kindall

+1

我喜歡這個,因爲它也有使函數的返回值更有自我記錄的優點... –

-1

縮短您的變量名稱。

不,真的。如果你無法適應通常的寬度約束,這暗示你需要重構。讓我來談談。

要保持清晰,名稱應該保持簡短。另一方面,您需要他們來描述他們持有的價值或他們正在執行的代碼(例如功能等)

如果您難以描述值保持名稱簡短,這意味着對於任何人 讀取您的代碼,它將很可能甚至閱讀和理解,因爲你讓他們專注於多個事情 。

對於comaprison,如果我寫的東西,如:

class App(): 

    def __init__(self): 

     self.config = {} 
     self.error = "" 
     # ... 
     configDatabaseConnection = mydbmodule.conect(credentials) 
     configQuery = "this and that" 
     config = configDatabaseConnection.query(configQuery) 
     configDatabaseConnectionErrorString = (configDatabaseConection.error) 
     if configDatabaseConnectionErrorString: 
      raise configError(configDatabaseConnectionErrorString) 
     # ... 

它通常意味着我需要在configutation分離到的另一種方法,並使用它:

class App(): 

    def __init__(self, credentials): 

     self.config = self.load_config(credentials) 
     self.error = "" 
     # ... 

     self.load_config() 

    def load_config(self, credentials): 

     conn = mydbmodule.conect(credentials) 
     q = "this and that" 
     config = conn.query(q) 
     if conn.error: 
      raise configError(conn.error) 
     self.config = config 

這是更可讀,並允許添加更多的邏輯配置過程(比如說,退步,從文件讀取而不是數據庫...),而不會混淆我的代碼的要點。

+2

我真的不認爲這是一個答案... –

+0

@RickyMutschlechner是的,這是一個一點點*太簡短*。我試圖詳細說明這一點。 –