科学Python代码的可读性(线路连续,变量名称,导入)

cjh*_*cjh 9 python numpy scipy

Python的风格最佳实践是否适用于科学编码?

我发现很难保持科学Python代码的可读性.

例如,建议对变量使用有意义的名称,并通过避免来保持命名空间import *.因此,例如:

    import numpy as np
    normbar = np.random.normal(mean, std, np.shape(foo))
Run Code Online (Sandbox Code Playgroud)

但是这些建议可能导致一些难以阅读的代码,特别是考虑到79个字符的线宽.例如,我刚写了以下操作:

net["weights"][ix1][ix2] += lrate * (CD / nCases - opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2]))
Run Code Online (Sandbox Code Playgroud)

我可以跨越线条表达:

net["weights"][ix1][ix2] += lrate * (CD / nCases - 
     opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2]))
Run Code Online (Sandbox Code Playgroud)

但这似乎没有那么好,我不确定第二行缩进有多深.当一个双重缩进嵌套循环时,这些类型的行继续变得更加棘手,并且一行上只有50个字符可用.

我是否应该接受科学Python看起来很笨重,或者有没有办法避免像上面的例子那样的线条?

一些可能的方法是:

  • 使用较短的变量名称
  • 使用较短的字典键名
  • 直接导入numpy函数并为它们分配短名称
  • 为算术运算的组合定义辅助函数
  • 将操作分成小块,并在每条线上放置一个

我很欣赏任何有关这些方面的信息,以及要避免哪些方面,以及对其他补救措施的建议.

aba*_*ert 3

\n
    \n
  • 定义算术运算组合的辅助函数
  • \n
  • 将操作分成更小的部分,并在每行上放置一个
  • \n
\n
\n\n

这些都是好主意\xe2\x80\x94,与 PEP 8 背后的意图保持一致,并且总体上符合 Pythonic 风格。事实上,每当有人建议修改 PEP 8 以提供有关长行的更多信息时,一半的答复通常是“如果您超出行数限制,则您可能在一个表达式中执行了太多操作”。

\n\n

而且,更一般地说,分解代码并为合理的操作提供合理的名称始终是一个好主意。

\n\n

当然,在不确切知道所有这些东西代表什么的情况下,我只能猜测如何将它们分开,但我认为这样的东西会非常可读且有意义:

\n\n
cost = opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2])\nweight = lrate * (CD / nCases - cost)\nnet["weights"][ix1][ix2] += weight\n
Run Code Online (Sandbox Code Playgroud)\n