[英]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.