gpt4 book ai didi

python - 科学 Python 代码的可读性(行连续、变量名、导入)

转载 作者:太空狗 更新时间:2023-10-29 20:27:34 27 4
gpt4 key购买 nike

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

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

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

    import numpy as np
normbar = np.random.normal(mean, std, np.shape(foo))

但是这些建议可能会导致一些难以阅读的代码,尤其是考虑到 79 个字符的行宽。比如我刚才写了下面的操作:

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

我可以将表达式跨行:

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

但这似乎并没有好多少,我不确定第二行缩进多深。当在嵌套循环中进行双缩进并且一行中只有 50 个字符可用时,这种续行变得更加棘手。

我应该接受科学 Python 看起来很笨重,还是有办法避免像上面示例那样的行?

一些可能的方法是:

  • 使用较短的变量名
  • 使用较短的字典键名
  • 直接导入 numpy 函数并为其分配短名称
  • 为算术运算的组合定义辅助函数
  • 将操作分解成更小的部分,并在每一行中放置一个

我将不胜感激关于应该追求和避免哪些问题的任何智慧,以及对其他补救措施的建议。

最佳答案

  • defining helper functions for combinations of arithmetic operations
  • breaking operations into smaller pieces, and placing one on each line

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

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

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

cost = opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2])
weight = lrate * (CD / nCases - cost)
net["weights"][ix1][ix2] += weight

关于python - 科学 Python 代码的可读性(行连续、变量名、导入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com