格式化大条件

时间:2018-05-24 19:07:39

标签: python conditional pep8

我有以下,相当大的条件已嵌套4个标签。我不想创建占位符变量以降低可读性,但我也想遵守行长。

将此条件分组并打破多行的pythonic方法是什么?

格式为if(a和b)或(c和d)

if self.container.name == 'bill' and self.container.box.chest.props.by_idnum 
    or self.container.name == 'steve' and self.container.box.trunk.props.by_idnum:

1 个答案:

答案 0 :(得分:0)

没有括号,yapf或autopep8都不会清除它。但添加它们时更清洁:

 % yapf code.py             
if (self.container.name == 'bill' and self.container.box.chest.props.by_idnum
        or self.container.name == 'steve'
        and self.container.box.trunk.props.by_idnum):
    pass

 % autopep8 code.py               
if (self.container.name == 'bill' and self.container.box.chest.props.by_idnum
        or self.container.name == 'steve' and self.container.box.trunk.props.by_idnum):
    pass

如果它适合80个字符,我会选择后者。如果这仍然太长,我会考虑将(a和b)移动到一个函数中。通常这可能是优选的,因为你可以在代码中解释 - 通过变量名称 - (a和b)意味着什么。

注意:在这种情况下,它可能更清洁:

if (self.container.name in ['bill', 'steve']
        and self.container.box.trunk.props.by_idnum):
    pass