2013-09-25 23 views

回答

9

这是因为("YP" or "XP")解析"YP",因为它要求返回是否"YP""XP"决心True

在这种情况下,'或'是短路的(因为"YP"不是False,"XP"未被评估)。它返回非False值"YP"这是... "YP"

另外a[:2]等于XP。此外,您不需要拨打str(),因为a是一个字符串。

>>> a = "XPZC" 
>>> a[:2] 
'XP' 
>>> "YP" or "XP" 
'YP' 

你可能想使用in

>>> a[:2] in ("YP", "XP") 
True 

,或者只是检查使用or两个条件:

>>> s = a[:2] 
>>> s == "YP" or s == "XP" 
True 
+0

随着这两个改进,你可能甚至没有注意到你还从OP的代码中删除了整个表达式中无用的额外括号。 :) – abarnert

+2

(“YP”或“XP”)要求返回“YP”还是“XP”解析为True。在这种情况下,'或'短路(因为“YP”不是假,“XP”未被评估)。它返回“YP”的非“False”值,即“YP”。 –

+0

@GraemeStuart yup,这是一个很好的解释(比我的好得多),你应该把它作为答案发布。谢谢。 – alecxe

1
(str(a)[:2] in ["YP", "XP"]) 

"YP" or "XP"返回'YP'