首先,PEP 8 说你可以在Maximum Line Length 下拆分长行:
通过将表达式括在括号中,可以将长行分成多行。应该优先使用这些,而不是使用反斜杠来续行。
事实上,由于括号,您的示例中不需要反斜杠。
PEP 8 说您可以在 multiline if-statements 下拆分条件,尽管该部分的主要重点是如何将其与以下块区分开来。
当if-statement 的条件部分足够长以至于需要将其写成多行时,值得注意的是两个字符的关键字(即if)加上一个空格的组合,加上一个左括号为多行条件的后续行创建一个自然的 4 空格缩进。这可能会与嵌套在if-statement 中的缩进代码套件产生视觉冲突,该代码也自然缩进为 4 个空格。这个 PEP 没有明确说明如何(或是否)进一步在视觉上将这些条件行与if-语句中的嵌套套件区分开来。在这种情况下可接受的选项包括但不限于:
# No extra indentation.
if (this_is_one_thing and
that_is_another_thing):
do_something()
# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
that_is_another_thing):
# Since both conditions are true, we can frobnicate.
do_something()
# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
and that_is_another_thing):
do_something()
就个人而言,我会选择最后一个选项以获得最大的可读性。所以这给了我们:
if (self.SuperLongSpecificCorperateVariableNameIcantChangeCommunication
!= self.SuperLongSpecificCorperateVariableNameIcantChangeControl):
do_something()
其他选项
您可以使用临时“内部使用”名称来缩短行:
_Comm = self.SuperLongSpecificCorperateVariableNameIcantChangeCommunication
_Control = self.SuperLongSpecificCorperateVariableNameIcantChangeControl
if _Comm != _Control:
do_something()
这是假设上下文不在本地范围内。如果它实际上在本地范围内,则不需要“内部使用”。
您可以使用辅助函数在本地范围内为它们提供更短的名称。由于它们是属性,因此您可以传入它们的对象:
def _compare(instance):
a = instance.SuperLongSpecificCorperateVariableNameIcantChangeCommunication
b = instance.SuperLongSpecificCorperateVariableNameIcantChangeControl
return a != b
if _compare(self):
do_something()