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

What's the proper way to (PEP8)line break for when constants are called from a function?

我正在使用 spyder,我有一段代码是这样的

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

decay_positions 中的第二个 i 超出了建议的一行字符数(大约 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)

您提供了选项 {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)

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

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

现在我看了一下总长度,如果是一行的话,是96个字符。即使这超过了 ~79 个字符的 PEP8 限制,我仍然建议将其保留为一行。在实践中,79 个字符非常短,如果您制作 100 个字符的行,可读性也不会降低。在我工作的地方,我们还将行长度指南增加到 100 个字符。

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