如何使用可選的輸出參數編寫函數。 在示例如何在Python中使用可選輸出參數編寫函數
1)mat = ReadBinFile(filename)
或
2)[mat,titles] = ReadBinFile(filename)
如果我完成與
return mat,titles
的 「ReadBinFile」 函數I在第一示例
具有元組中的 「墊」謝謝你的幫助
如何使用可選的輸出參數編寫函數。 在示例如何在Python中使用可選輸出參數編寫函數
1)mat = ReadBinFile(filename)
或
2)[mat,titles] = ReadBinFile(filename)
如果我完成與
return mat,titles
的 「ReadBinFile」 函數I在第一示例
具有元組中的 「墊」謝謝你的幫助
有兩種方法可以做到這一點。一個是接受一個決定返回值的參數。第二,(更有趣的)是返回一個生成器。
def ReadBinFile(filename):
yield mat
yield titles
mat,titles = ReadBinFile(filename)
這將讓你只獲得第一個或獲得第n個返回值。
這不起作用。如果你使用'mat = ReadBinFile(filename)','mat'將會獲得生成器本身,而不是第一個產生的值。 – BrenBarn
我不認爲有一種方法可以完成你想要做的事情。在Python中,您不能更改語法,但可以獲得功能性結果。我非常肯定,這提供了您所需要的所有功能。 –
如果不向函數指示需要哪種返回類型,或者屏蔽函數名稱(請參閱我的註釋),則無法執行此操作。
讓我來證明一下爲什麼。
在Perl中,我們可以通過測試調用的上下文來做到這一點。第一個(單一返回值)是標量上下文,第二個是列表上下文。我們可以使用名爲wantarray
的函數進行測試(谷歌「python wantarray」 - 其他搜索引擎可用)。由於這個原因,許多Perl不常見,如果不是唯一的話。
Python不能像那樣工作,儘管與其他語言相比,內省可以被用於極端。轉讓形式爲:
name = object
其中name
是無類型的參考。所以:
mat = ReadBinFile(filename)
即使通過一些偷偷摸摸的手段,我們考察了字節碼,我們就無法知道應該什麼類對象mat
的引用方式。 A list
,tuple
,int
,bird
,plane
?
的語法告訴你:
[mat,titles] = ReadBinFile(filename)
是一個謎。雖然有效,但它沒有實際區別:
mat,titles = ReadBinFile(filename)
哪一個當然是元組。那麼,我們如何才能知道:
mat = ReadBinFile(filename)
應該是一個tuple
,一個list
,或任何物體mat
的類應該參考一下。
畢竟,在我看來,不同類的返回對象是一個可疑的練習,即使在Perl中。有一些例外情況,例如在某些情況下返回None
。爲什麼懷疑?因爲代碼變得難以閱讀,修改和支持。
這是什麼情況?如果你不想要第二個元組元素,就忽略它。 – mhawke
你不能這樣做。無論如何,這不是一個好主意。只需解壓縮結果並丟棄任何不需要的元素。 – BrenBarn
在元組上使用生成器具有潛在的降低時間的優點(如果每個元素需要一段時間才能獲得) –