如果 elif else 构造并完全符合 DRY
If elif else construct and full DRY conform
首先,对于不好的标题,我深表歉意,但我不知道什么才是合适的。我正在为以下块寻找更好的语法,这样我就不会重复自己了。
- 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
非常感谢!
这里假设一些事情可以让它优雅地工作,所以你可能想在代码的其他地方确保这一点。我的假设:
self.rulerMajorTickWidth
和 self.rulerMinorTickWidth
要么是正数,要么等于零
- 它们都被定义为属性,查找它们不会抛出错误
- 您只想将两者中较大的一个除以 2
假设所有这些,你可以简单地做:
halfTickHeight = max(self.rulerMajorTickWidth, self.rulerMinorTickWidth) / 2
如果它们的 "false" 值是 None 或未定义,则情况会更复杂。这就是为什么我建议在代码的其他地方确保它是 0 或 integer/float。如果它们实际上是布尔值 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
子句
首先,对于不好的标题,我深表歉意,但我不知道什么才是合适的。我正在为以下块寻找更好的语法,这样我就不会重复自己了。
- 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
非常感谢!
这里假设一些事情可以让它优雅地工作,所以你可能想在代码的其他地方确保这一点。我的假设:
self.rulerMajorTickWidth
和self.rulerMinorTickWidth
要么是正数,要么等于零- 它们都被定义为属性,查找它们不会抛出错误
- 您只想将两者中较大的一个除以 2
假设所有这些,你可以简单地做:
halfTickHeight = max(self.rulerMajorTickWidth, self.rulerMinorTickWidth) / 2
如果它们的 "false" 值是 None 或未定义,则情况会更复杂。这就是为什么我建议在代码的其他地方确保它是 0 或 integer/float。如果它们实际上是布尔值 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
子句