Python 从哪里开始换行?

Where to start line breaking in Python?

PEP 8好像没有规定换行应该从该行的开头还是从结尾开始, 以保持在 79 个字符的限制内。

例如,我应该在哪里断行?

long_function_name_1(long_function_name_2(long_function_name_3(long_function_name_4(long_function_name_5(long_function_name_6(long_function_name_7(long_function_name_8(args))))))))

从头开始?

long_function_name_1(
    long_function_name_2(
        long_function_name_3(
            long_function_name_4(
                long_function_name_5(
                    long_function_name_6(
                        long_function_name_7(long_function_name_8(args))))))))

还是从头开始?

long_function_name_1(long_function_name_2(long_function_name_3(
    long_function_name_4(long_function_name_5(long_function_name_6(
        long_function_name_7(long_function_name_8(args))))))))

我对推荐一种形式优于另一种形式的理由特别感兴趣。

我从头开始

long_function_name_1(
    long_function_name_2(
        long_function_name_3(
            long_function_name_4(args))))

缩进可以清楚地表明什么函数接受什么。如果有多个参数,那么它们将形成一个 'column'(在这种情况下最好也将结束括号移到新行)。

首先,请记住 PEP8 是指南,而不是处方。实际上 Python 代码只要符合语言规范就是有效的。实际上,我会说 "as long as CPython doesn't complain, it's OK".

使用类似 yapf or black 的程序来格式化您的 Python 代码。这样你就不用担心细节了。在您的编辑器中设置快捷方式以调用格式化程序,或者在您在修订控制软件中签入文件之前自动调用它。

我建议将这些工具可接受的行长度设置为 90 左右的值。PEP8 中过时的 79 个字符限制来自低分辨率监视器(并返回到硬件终端和电传打字机),这在今天几乎不相关。在具有列表理解和 f 字符串的现代 Python 代码中严格遵守此限制实际上可以使您的代码 更少 可读。观看评论中链接的 Raymond Hettinger 的 beyond PEP8. See also his post

PEP 8 is mostly about readability. However, the line length limit often seems to cause less readable code.

有了这样的设置,yapf就变成了:

long_function_name_1(
    long_function_name_2(long_function_name_3(long_function_name_4(args)))
)