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结果的方法。