s="0" and "2"
我理解的是先s=“0”,然后s and“2”因为s的bool值为False,遇假输出,所以s应该输出0
但是输出结果为2
为什么QAQ
这个是属于运算符的优先问题吗
等号作为赋值运算,优先级是最低的,所以先计算等号右边的逻辑运算,"0" and "2",因为你用引号把0和2圈起来,它们就不是数字,而是字符了。而除非是空字符,其它字符的bool值都是True。所以检查左边"0"的结果是True,因为是与运算(and),还要检查右边,右边"2"也是True,所以最终结果返回的是右边的值,然后赋值给s,最后s等于字符串“2”。
如果想要s等于“0”,把and换成or就可以,这也是程序设计里比较常用的短路计算小技巧