Python如何';s";及;在len()函数中解析的关键字?

Python如何';s";及;在len()函数中解析的关键字?,python,python-2.x,Python,Python 2.x,考虑以下代码: str1 = "Hi, how are you?" str2 = "Fine." str3 = "Goodbye." print len(str1 and str2 and str3) 最后一行始终打印len()的最后一个参数的长度 为什么会发生这种情况,解释器如何解析该表达式? 在len()中如何在语法上允许使用和关键字?真正的问题是str1和str2的计算结果是什么,或者实际上'a'和'b'的计算结果是什么。结果是'a'和'b'的计算结果是'b' 因此,在您的示例中,str

考虑以下代码:

str1 = "Hi, how are you?"
str2 = "Fine."
str3 = "Goodbye."
print len(str1 and str2 and str3)
最后一行始终打印
len()
的最后一个参数的长度

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

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

因此,在您的示例中,
str1、str2和str3
的计算结果为
再见。
这解释了为什么
len(str1、str2和str3)
为8

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

为什么?

我相信这与我的工作有关。 由于
bool('a')
(或任何非空字符串)为True,Python解释器需要计算
True和True
,或者在第二种情况下计算
True或True

出于我链接到的Wikipedia页面中解释的优化原因,在计算
True和True
时,将返回第二个
True
,但在计算
True或True
时,可以返回第一个
True
(因为
True或任何
都将始终是
True
,因此没有理由费心评估第二个术语)

为了获得所需的结果,应使用
+
运算符:

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

你问题的
len
部分是一条红鲱鱼,如果最后一个字符串都不是空的话,它会告诉你最后一个字符串的长度。看看我自己,为什么
“a”和“b”
的值不等于
真的
?@SamM“为什么”是什么意思?这就是语言参考所说的:。或者你的意思是为什么设计者决定实现它?@jornsharpe Option#2@SamM它也这么说:“这有时很有用,例如,如果
s
是一个字符串,如果它是空的,应该用默认值替换,那么表达式
s或'foo'
会产生所需的值。”@uʍopǝpısdn谢谢,我添加了获得op结果的方法。