python - Python的 "and"关键字在len()函数中是如何解析的?

标签 python python-2.x

考虑以下代码:

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

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

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

最佳答案

真正的问题是 str1 和 str2 的计算结果是什么,或者实际上 'a' 和 'b' 的计算结果是什么。事实证明,'a' 和 'b' 的计算结果为 'b'

因此,在您的示例中,str1 and str2 and str3 的计算结果为 Goodbye.,这解释了为什么 len(str1 and str2 and str3) 是8.

有趣的是,'a' 和 'b''b''a' 或 'b' >'a'.

为什么?

我相信这与Short-circuit evaluation有关。 由于 bool('a') (或任何非空字符串)为 True,Python 解释器需要评估 True 和 True 或在我们的第二种情况下,真还是真

出于我链接到的维基百科页面中解释的优化原因,在评估 True 和 True 时,将返回第二个 True 但在评估 True 或 True 可以返回第一个 True (因为 True 或任何内容 始终为 True,因此没有理由费心评估第二项) .

为了获得您想要的结果,您应该使用 + 运算符:

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

关于python - Python的 "and"关键字在len()函数中是如何解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33976578/

相关文章:

python - 在网页中搜索字符串并使用 python 打印包含该字符串的整行

python - 具有超过 32 个维度的 numpy ndarray

python - 为什么导入并不总是导入嵌套包?

Python:Google App Engine 源代码使用标签深度 2

python - http.client.HTTPConnection.request 与 urllib.request.Request

python - 是否有 Python 库来处理 OWL?

python - TwythonStreamer 重音编码? - 无法解码响应,无效 JSON,代码为 200

python - 根据列的分数使用 Python 计算并集和交集

python - 关于如何通过 Python 装饰器传递参数的困惑

python - 扫雷:显示周围方 block 功能卡住