请考虑以下代码:
str1 = "Hi, how are you?"
str2 = "Fine."
str3 = "Goodbye."
print len(str1 and str2 and str3)
最后一行始终打印len()
的最后一个参数的长度。
为什么会发生这种情况,解释器如何解析该表达式?
如何在语法上允许在and
中使用len()
关键字?
答案 0 :(得分:3)
真正的问题是str1 and str2
评估的内容,或实际上'a' and 'b'
评估的内容。事实证明'a' and 'b'
评估为'b'
。
因此,在您的示例中,str1 and str2 and str3
评估为Goodbye.
,这解释了为什么len(str1 and str2 and str3)
为8。
有趣的是,虽然'a' and 'b'
为'b'
,但'a' or 'b'
为'a'
。
为什么?
我认为这与Short-circuit evaluation有关。
由于bool('a')
(或任何非空字符串)为True,因此Python解释器需要评估True and True
或我们的第二种情况True or True
。
出于优化原因,在我链接到的维基百科页面中解释,在评估True and True
时,将返回第二个True
,但在评估True or True
时,可以返回第一个True
(因为True or anything
永远是True
,所以没有理由去评估第二个词。)
为了获得理想的结果,您应该使用+
运算符:
str1 = "Hi, how are you?"
str2 = "Fine."
str3 = "Goodbye."
print len(str1 + str2 + str3)