Python"和#34;是怎样的?关键字在len()函数中解析?

时间:2015-11-28 21:21:20

标签: python python-2.x

请考虑以下代码:

str1 = "Hi, how are you?"
str2 = "Fine."
str3 = "Goodbye."
print len(str1 and str2 and str3)

最后一行始终打印len()的最后一个参数的长度。

为什么会发生这种情况,解释器如何解析该表达式? 如何在语法上允许在and中使用len()关键字?

1 个答案:

答案 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)