簡體   English   中英

Pythonic分裂數學計算的方法

[英]Pythonic way to split math calculations

我使用ninja-ide,我發現它可以抱怨所有事情的驚人方式(到處都是黃色的底線)因為我覺得它是一種改進我的編碼以使其更加標准的方法。

然而,因為它也抱怨代碼行的長度(這當然很有意義,因為沒有人喜歡水平滾動來閱讀代碼),我一直堅持這個問題。

讓我們說這句話:

 v1, v2 = np.sum(((b1 - m1) ** 2) * p1) / q1, np.sum(((b2 - m2) ** 2) * p2) / q2

它有81個字符,包括空格, 在這種情況下,我可以像這樣拆分它:

    v1 = np.sum(((b1 - m1) ** 2) * p1) / q1
    v2 = np.sum(((b2 - m2) ** 2) * p2) / q2

但這並沒有太多的pythonic,還有另一個問題:

如果沒有逗號怎么辦? 我的意思是我怎么能分裂這樣的東西:

   v2 = np.sum(((b1 - m1) ** 2 * np.sum(((b2 - np.sum(((b2 - m2) ** 2) * p2) / q2) ** 2) * p2) / q2) * p1) 

上面的內容在數學上沒有任何意義,只是為了解釋我的意思。

反斜杠可用於分割長行。

拆分的地方由您決定,但上述行可以重新編寫:

v2 = np.sum(((b1 - m1) ** 2 * \
        np.sum(((b2 - np.sum(((b2 - m2) ** 2) * p2) / q2) ** 2) * p2) \
                                                                / q2) * p1)

我首先嘗試以其他方式減少代碼(例如,重命名變量,使用其他模塊,改變操作的順序)。


@ user2357112正確地指出在不匹配的括號,括號或大括號內拆分代碼時不需要反斜杠,因此上面的代碼也可能如下所示:

v2 = np.sum(((b1 - m1) ** 2 *
        np.sum(((b2 - np.sum(((b2 - m2) ** 2) * p2) / q2) ** 2) * p2)
                                                                / q2) * p1)

PEP 8的最大線長度

包裝長行的首選方法是在括號,括號和括號內使用Python隱含的行繼續。 通過在括號中包裝表達式,可以在多行中分割長行。 這些應該優先使用反斜杠來繼續行。

不要打擾pythonic -way。 打擾您的代碼的良好閱讀,性能和可擴展性。 我認為下面會很好'pythonic':)解決方案:

formula = lambda b, m, p, q: np.sum(((b - m) ** 2) * p) / q
v1, v2 = formula(b1, m1, p1, q1), formula(b2, m2, p2, q2)

這種方式的優點是你可以多次使用formula 你得到最短的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM