2012-06-20 82 views
4

我正在寫一個Python腳本,它需要打印一行到控制檯。很簡單,但我不記得(或決定)接受的做法是否是在功能打印,例如:函數應該打印一個字符串還是返回它?

def exclaim(a): 
    print (a + '!') 

還是有它返回一個字符串,如:

def exclaim(a): 
    return (a + '!') 

然後在主腳本中打印。我可以爲任何一種方法提出論點。有沒有一個普遍接受的方式來做到這一點,或者是否偏好?


編輯:澄清,這不是我正在使用的功能。我覺得在這裏發佈代碼並不舒服,所以我把這些功能寫成了一個簡單的例子。

+1

我不認爲你應該返回一個字符串只是爲了打印它在不同的功能 –

+0

我很確定它只是無論你的偏好是什麼,但它似乎更有意義,我打印從函數內在那個例子中)。但是,我可以看到其他方式更有意義的情況 - 例如,如果您有時想使用該功能,但並不總是希望它打印某些內容。 – Herohtar

回答

5

通常,函數應該生成並返回其輸出,並讓調用者決定如何處理它。

如果直接在函數中打印結果,那麼很難重用該函數來執行其他操作,並且很難進行測試,因爲您必須攔截stdout而不是僅測試返回值。

但是,在這個微不足道的例子中,幾乎不需要重用或測試函數,甚至根本不需要函數。

+0

這個例子就是這個例子。我不允許分享代碼,所以我決定寫一些能讓我理解的東西。謝謝您的幫助! – Neghtasro

0

在我看來,函數應該返回值。

1

要記住的一件事是,如果你打印它,你的函數將不會返回任何東西,所以如果你打算使用這條線,你希望寫的東西應該返回它。

1

如果您確定該功能無法重複使用,並且您爲了增強代碼可讀性而形成該功能,則可以在該功能中打印該功能。

否則,如果您有任何方法可以稍後以任何方式重新使用它,則應該返回該值。第二種方法是首選,因爲功能的目的之一是重複使用。

沒有實際的開銷。

0

我混兩種方式所有的時間,但我認爲這可能歸結如下:

  • 如果整體功能的唯一目的是輸出端子(打印一條消息給用戶),那麼該功能應該打印。可選地,你可以使用一些返回值作爲錯誤狀態或布爾值,但是作爲一個側面步驟。通常,打印的字符串/消息在程序流內不會有其他用途,因爲用戶收到消息並且消耗的字符串變量可以被垃圾收集。

  • 如果該函數實際上是PERFORMS的東西,因此返回一個真實的值(即使這個值是一個字符串),並且您想要在終端上檢查該值,而不是調用該函數並在其中輸出結果另一種說法。在調試的情況下,您只需刪除或註釋該打印語句,但該功能將繼續默默執行。僅僅爲了比較,如果print語句在函數內部,則需要修改函數本身。

作爲最後的考慮,這兩種方法都有些相當,但對任何人閱讀你的代碼(甚至自己一段時間後),它的方式是奠定了艾滋病捕捉代碼的意圖,在可讀性觀點看法。

希望這有助於

2

的事情之一,我最欣賞的Python是,它鼓勵的擔憂正確分離。將任務分解爲原子組件的過程中幾乎沒有摩擦。

計算一個值和顯示一個值是兩回事,它們不應該混合在一起。

+0

這就是我所傾向的,但將我的腳本轉換爲「打印」列表也感覺有點不合適。感謝您的建議! – Neghtasro

0

如果函數計算值然後立即打印它們,我會經常發現我最終想要以不同的地方或以不同的方式顯示或使用這些值。

我會決定結果寫入到一個文件,把他們作爲一個網頁的一部分,將其用作其他功能的部分值,顯示它們排序或篩選不同等

這是可以在函數原型時立即打印計算值,或者函數非常簡單......但遲早,如果一個程序變得更大更有價值,那麼您需要將這個簡單的「僅僅打印它!「函數轉換爲更純粹的計算和返回函數。

所以我試着從一個返回結果打印它們以後的編碼風格開始。它看起來更乾淨,並且通常會在以後節省時間但正如所有的文體風格一樣,這是一個判斷的呼喚,而YMMV。

相關問題