2009-06-02 77 views
1

我正在寫一個python擴展以提供對Solaris kstat數據的訪問(與運行perl庫Sun :: Solaris :: Kstat相同的精神),並且我有一個關於有條件地返回列表的問題或一個單一的對象。蟒蛇用例看起來像:Python擴展返回對象禮儀

 
    cpu_stats = cKstats.lookup(module='cpu_stat') 
    cpu_stat0 = cKstats.lookup('cpu_stat',0,'cpu_stat0') 

,因爲它是目前實現的,查詢()返回所有的kstat對象,其匹配的列表。第一種情況會導致一個對象列表(與CPU一樣多),第二個調用完全指定一個單一的kstat,並返回一個包含一個kstat的列表。

我的問題是可憐的形式返回一個單一的對象時,只有一個匹配,並有一個列表時,有很多?

謝謝你的深思熟慮的答案!我的蟒蛇很弱,但由於像你這樣的人而變得更強壯。

+0

即使你在編寫擴展模塊的上下文中提出這個問題,如果你正在編寫純Python函數,答案也是一樣的。 – Miles 2009-06-02 17:28:01

回答

7

「我的問題是隻有一個匹配時返回單個對象的可憐形式,以及有多少個時返回一個列表?」

返回不一致類型的方式很差。

返回一致的類型:kstat列表。

大多數Pythonistas不喜歡使用type(result)來確定它是否是kstat或kstats列表。

我們寧願以簡單一致的方式檢查列表的長度。另外,如果長度取決於系統信息,API方法可能會提供此元數據。

請看DB-API PEP以獲取關於如何處理查詢式事物的建議和想法。

+1

那麼我認爲你的答案應該是「是」,而不是「否」,因爲你認爲它*是壞的形式。 – 2009-06-02 17:14:45