我有一個方法返回多個項目。清理python返回任務
def multiReturn():
return 1,2,3,4
和Im在一行
one, two, three, four = multiReturn()
分配給它有沒有辦法清理上面的行
喜歡的東西:
one,
two,
three,
four = multiReturn()
,因爲我有一些變量名它變得很大,頁面的寬度也困擾着我。
任何想法把它清理乾淨
我有一個方法返回多個項目。清理python返回任務
def multiReturn():
return 1,2,3,4
和Im在一行
one, two, three, four = multiReturn()
分配給它有沒有辦法清理上面的行
喜歡的東西:
one,
two,
three,
four = multiReturn()
,因爲我有一些變量名它變得很大,頁面的寬度也困擾着我。
任何想法把它清理乾淨
您可以使用括號:
(
one,
two,
three,
four
) = range(4)
但是,這並不清潔。 – delnan
@delnan Nope ...在這種情況下 - 它不像原來那麼清楚......;)只是顯示「正確」的方式來做多行分組 –
在每行的末尾使用反斜槓。
one, \
two, \
three, \
four = multiReturn()
最近,我告訴我,當你這樣做時,它會告訴解釋器忽略下一個字符,在通常情況下,當使用這樣的反斜槓時,它將成爲換行符。但是,如果您在該處輸入錯字或發表評論,則可能是另一個字符。所以,被警告。 – 2rs2ts
如果您已經返回這麼多項目,考慮創建某種形式的數據結構。一個班級應該沒問題,但是如果你認爲它過於矯枉過正,你可以使用一個字典或者甚至一個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''''''''''''''''' – kindall
我喜歡這個,因爲它也有使函數的返回值更有自我記錄的優點... –
縮短您的變量名稱。
不,真的。如果你無法適應通常的寬度約束,這暗示你需要重構。讓我來談談。
要保持清晰,名稱應該保持簡短。另一方面,您需要他們來描述他們持有的價值或他們正在執行的代碼(例如功能等)
如果您難以描述值和保持名稱簡短,這意味着對於任何人 讀取您的代碼,它將很可能甚至難閱讀和理解,因爲你讓他們專注於多個事情 。
對於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
這是更可讀,並允許添加更多的邏輯配置過程(比如說,退步,從文件讀取而不是數據庫...),而不會混淆我的代碼的要點。
我真的不認爲這是一個答案... –
@RickyMutschlechner是的,這是一個一點點*太簡短*。我試圖詳細說明這一點。 –
在我的小見解中,你的情況是一個強烈的暗示,你想用這個元組實現的行爲應該在它自己的類中被抽象出來,'multiReturn()'作爲它的構造函數。 –