if var is 'stringone' or 'stringtwo':
dosomething()
这不起作用!我有一个变量,当它是值中的任何一个时我需要它做某事,但它不会进入if语句。在Java中if (var == "stringone" || "stringtwo")
有效。我怎么用Python写这个?
答案 0 :(得分:129)
这不符合您的期望:
if var is 'stringone' or 'stringtwo':
dosomething()
与以下内容相同:
if (var is 'stringone') or 'stringtwo':
dosomething()
始终如此,因为'stringtwo'
被视为“真实”值。
有两种选择:
if var in ('stringone', 'stringtwo'):
dosomething()
或者你可以编写单独的相等测试,
if var == 'stringone' or var == 'stringtwo':
dosomething()
不要使用is
,因为is
会比较对象标识。你有时可能会因为Python内容很多字符串而侥幸成功,就像你可能在Java中使用Java一样,因为Java实际上有许多字符串。但是除非你真的想要对象标识,否则不要使用is
。
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False
答案 1 :(得分:18)
if var == 'stringone' or var == 'stringtwo':
do_something()
或更多pythonic,
if var in ['string one', 'string two']:
do_something()
答案 2 :(得分:3)
if var == 'stringone' or var == 'stringtwo':
dosomething()
'是'用于检查两个引用是否被引用到同一个对象。它比较了内存地址。 显然,' stringone'和' var'它们是不同的对象,它们只包含相同的字符串,但它们是类' str的两个不同实例。所以他们当然有两个不同的内存地址,'是'将返回False。
答案 3 :(得分:3)
两次单独检查。此外,使用==
而不是is
来检查是否存在相等性而非身份。
if var=='stringone' or var=='stringtwo':
dosomething()
答案 4 :(得分:0)
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
if createunicode(a.text) in ['<','<']:
links.append(a.attrMap['href'])
else:
continue
它对我有用。