首頁 >後端開發 >Python教學 >在 Python 中使用列表推導式來產生副作用是否被認為是不好的做法?

在 Python 中使用列表推導式來產生副作用是否被認為是不好的做法?

Susan Sarandon
Susan Sarandon原創
2024-12-27 16:39:09381瀏覽

Is Using List Comprehensions for Side Effects in Python Considered Bad Practice?

使用列表推導式實現副作用:非Python 實踐

Python 的列表推導式是基於現有可迭代對象創建新列表的強大工具。雖然它們提供了簡潔且富有表現力的語法,但僅因為其副作用而使用列表推導式被認為是反 Python 的。

問題

考慮一個執行副作用的函數,例如例如列印到螢幕、更新 GUI 或寫入檔案。它會傳回一個值,但該值通常不令人感興趣。

def fun_with_side_effects(x):
    ...side effects...
    return y

人們可能會想使用列表理解來調用此函數以獲取其副作用,如下所示:

[fun_with_side_effects(x) for x in y if (...conditions...)]

請注意,結果列表未分配給變數。

反Pythonic Nature

強烈建議不要以這種方式使用列表推導式,原因如下:

  • 效率低下:建立中間列表可能會很昂貴,特別是在以下情況下可迭代物件很大。該清單被創建但立即被丟棄,導致資源浪費。
  • Unidiomatic:經驗豐富的Python開發人員喜歡使用明確for迴圈來進行副作用操作。列表推導式通常用於建立新值。
  • 混亂:丟棄列表,其他程式設計師可能會不清楚程式碼的意圖。最好將副作用明確化。

首選方法

首選方法是使用for 循環迭代可迭代對象並調用僅在必要時才使用副作用函數:

for x in y:
    if (...conditions...):
        fun_with_side_effects(x)

這種方法更有效率、更慣用、更不易混淆。這清楚地表明該函數被呼叫主要是因為它的副作用。

以上是在 Python 中使用列表推導式來產生副作用是否被認為是不好的做法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn