分割数学计算的Python式方法

2024-06-28 19:12:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用NinjaIDE,我发现它可以抱怨所有事情(黄色文本线下到处都是),因为我认为这是一种改进我的代码,使之更标准的方法。在

但是,由于它也会抱怨代码行的长度(这当然很有意义,因为没有人喜欢水平滚动来阅读代码),所以我一直在解决这个问题。在

让我们这样说:

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

它有81个字符,包括空格,在这种情况下,我可以这样拆分它:

^{pr2}$

但这并不让人觉得太像Python,还有另一个问题:

如果没有逗号呢?我的意思是我怎么能把这样的东西分开:

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

上面的这些在数学上没有任何意义,只是为了解释我的意思。


Tags: 代码np事情b2b1v2意义sum
2条回答

反斜杠可以用来分割长线。在

在哪里拆分取决于您,但上面的行可以这样修改:

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

我首先尝试用其他方法减少代码(例如重命名变量、使用其他模块、更改操作顺序)。在


@user2357112正确地指出,在拆分不匹配的括号、方括号或大括号内的代码时,不需要反斜杠,因此上面的代码也可以如下所示:

^{pr2}$

来自PEP 8's Maximum Line Length

The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces. Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation.

不要为pythonic-方式而烦恼。关于代码的可扩展性和良好的性能。我认为以下是好的“Python”解决方案:

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。你得到最短的绳子。在

相关问题 更多 >