从函数调用常量时,(PEP8)换行的正确方法是什么?

时间:2019-03-26 21:07:26

标签: python python-3.x pep8 code-structure

我正在使用spyder,并且我有一个类似这样的代码

    detector_x, detector_y, smeared_x, smeared_y = gamma_detection(decay_positions, cos_theta, phi)

i中第二个decay_positions超过一行中建议的字符数(大约为90)。我具有动态PEP8分析功能,因此它自然会给我进行代码分析的警告。那么在这种情况下正确的PEP8方法是什么?是

detector_x, detector_y, smeared_x, smeared_y = \
gamma_detection(decay_positions, cos_theta, phi)

从技术上讲它仍然可以运行,但它会警告我

E122 continuation line missing indentation or outdented

还是

detector_x, detector_y, smeared_x, smeared_y = gamma_detection(
    decay_positions, cos_theta, phi)

还是

detector_x, detector_y, smeared_x, smeared_y = gamma_detection(
                                        decay_positions, cos_theta, phi)

2 个答案:

答案 0 :(得分:0)

您提供了选项{1,2,3}。

绝对使用2或3。 他们之间的品味问题 或您最喜欢的编辑器鼓励您使用的内容。 (使用光标将所有内容放在打开的括号上方的一行上,单击RETURN,然后使用建议的缩进。) 只要

$ flake8

不要抱怨,你很金。 (通过pip install flake8获取。)

对于很多参数, 或涉及冗长表达式的参数, 您甚至可以考虑每行列出一个参数。

如果您要分配很多长标识符, 您可能会考虑将LHS包围在元组中以进行包装:

(detector_x, detector_y,
 smeared_x, smeared_y) = gamma_detection(
    decay_positions,
    cos_theta + epsilon * some_long_expression(),
    phi)

答案 1 :(得分:0)

在VS代码上使用autopep8,您的代码将更改为以下内容:

detector_x, detector_y, smeared_x, smeared_y = \
    gamma_detection(decay_positions, cos_theta, phi)

现在我看一下如果是单线的总长度,即96个字符。即使超出了〜79个字符的PEP8限制,我仍然建议将其保持为一行。实际上,如果您每行100个字符,则79个字符非常短,并且可读性不会降低。在我工作的地方,我们还将行长准则提高到100个字符。

# 96 characters
detector_x, detector_y, smeared_x, smeared_y = gamma_detection(decay_positions, cos_theta, phi)