如果elif其他构造和完全DRY符合

时间:2017-07-19 03:17:15

标签: python dry

首先,我为糟糕的头衔感到抱歉,但我不知道什么是合适的。我正在为下面的块寻找更好的语法,这样我就不会重复自己了。

  • self.rulerMajorTickLabel和self.rulerMinorTickLabel可以是True还是False
  • self.rulerMajorTickWidth和self.rulerMinorTickWidth只能是正浮点数

    if self.rulerMajorTickLabel and self.rulerMinorTickLabel:
        if self.rulerMajorTickWidth > self.rulerMinorTickWidth:
            halfTickHeight = self.rulerMajorTickWidth / 2
        else:
            halfTickHeight = self.rulerMinorTickWidth / 2
    elif self.rulerMajorTickLabel:
        halfTickHeight = self.rulerMajorTickWidth / 2
    elif self.rulerMinorTickLabel:
        halfTickHeight = self.rulerMinorTickWidth / 2
    else:
        halfTickHeight = 0
    

非常感谢你!

1 个答案:

答案 0 :(得分:0)

假设这里有一些方法可以使它优雅地工作,所以你可能想要在代码中的其他地方确保它。我的假设:

  • self.rulerMajorTickWidthself.rulerMinorTickWidth是正数,或等于零
  • 它们都被定义为属性,并且查找它们不会引发错误
  • 你想要两个中较大的一个除以2

假设这一切,你可以做到:

halfTickHeight = max(self.rulerMajorTickWidth, self.rulerMinorTickWidth) / 2

如果他们的“假”值是None或undefined,那就更复杂了。这就是为什么我建议在代码中的其他地方确保它是0或整数/浮点数。如果它们实际上是布尔值False,则可以float()将它们等于0

编辑:因为我发现标签与宽度部分不同,您仍然可以通过这样做更轻松地预先形成所有支票:

tmpMajor = self.rulerMajorTickWidth if self.rulerMajorTickLabel else 0
tmpMinor = self.rulerMinorTickWidth if self.rulerMinorTickLabel else 0
halfTickHeight = max(tmpMajor, tmpMinor) / 2

这相当于之前的所有if...elif...else条款