为什么自我两次?我无法找到该线的逻辑。有人可以帮我这个吗?
return (self.year and self.year == date.year or True)
我正在经历http://www.openp2p.com/pub/a/python/2004/12/02/tdd_pyunit.html并遇到了这一行...当然,我理解并且,或者,xor,xnor或任何布尔表达式都没有问题。但我对它在这里使用的方式感到困惑。
: - )
答案 0 :(得分:2)
return (self.year and self.year == date.year or True)
在这种情况下,首先在self.year
上存在检查,如果它不存在,它将返回(我假设)None
(在python == False中)。之后将其与date.year
我认为这有点多余,因为如果self.year不存在,那么比较将会返回false。
正如Bereal在你的问题上评论的那样,最后or True
确实很奇怪,因为这似乎导致总表达总是返回True
一般注意:在python中,布尔表达式总是按照“外观顺序”进行评估。
答案 1 :(得分:1)
评估顺序很重要(见here)。代码:
return self.year and self.year == date.year
可以改写:
return self.year and (self.year == date.year)
或者,完整:
if self.year:
if self.year == date.year:
return True
else:
return False
return False # Actually return self.year, but usually a boolean is intended in this sort of situation
但是,由于最后的True
,您发布的表达式始终会评估为or True
。使用括号显示评估顺序:
return (self.year and (self.year == date.year)) or True
答案 2 :(得分:1)
此行将始终返回true,因为您正在使用具有真值的or
。
除此之外,首先检查self.year
是None
还是False
,而不是检查self.year
是否等于date.year
。
答案 3 :(得分:1)
return (self.year and self.year == date.year or True)
是的,需要两次包括self.year。因为它将检查是否存在self.year定义的东西,如果它没有定义,它将给出一个错误,即没有像“self.year”这样的东西,即它是未定义的。因为它认可self.year是定义的东西,而不是它将检查它的价值。