我通常根据PEP8:
中的建议使用括号括起长行包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行中分割长行。这些应该优先使用反斜杠来继续行。
但是在像这样的长线的情况下,我不确定推荐的方式是什么:
my_object = my_toolbox_with_a_pretty_long_name.some_subset_with_a_pretty_long_name_too.here_is_what_i_was_looking_for
关键是即使=
符号之后的部分仍然太长而且我不知道在哪里/如何切割。
我经常做
toolbox = my_toolbox_with_a_pretty_long_name
subset = toolbox.some_subset_with_a_pretty_long_name_too
my_object = subset.here_is_what_i_was_looking_for
但它有点不同,因为它创建了中间变量,尽管在功能上它是等价的。此外,如果该行处于多个条件,我不能真正这样做,例如if a is not None and len(my_toolbox_..._for) == 42
。
这也有效:
my_object = (
my_toolbox_with_a_pretty_long_name
).some_subset_with_a_pretty_long_name_too.here_is_what_i_was_looking_for
my_object = ((my_toolbox_with_a_pretty_long_name
).some_subset_with_a_pretty_long_name_too
).here_is_what_i_was_looking_for
但在可读性方面却非常糟糕,并建议避免85-ish字符线使我看起来像PEP8纳粹。我甚至不能让后者取悦pylint和flake8。
答案 0 :(得分:4)
您只需要一对括号:
my_object = (my_toolbox_with_a_pretty_long_name
.some_subset_with_a_pretty_long_name_too
.here_is_what_i_was_looking_for)
换行符表达式中的换行符不重要,它们可以在允许使用空格的任何地方出现。
对于你的另一个例子:
if (a is not None
and len(my_toolbox_with_a_pretty_long_name
.some_subset_with_a_pretty_long_name_too
.here_is_what_i_was_looking_for) == 42):