85
if var is 'stringone' or 'stringtwo':
    dosomething()

这不起作用!我有一个变量,当它是其中一个值时,我需要它来做某事,但它不会进入 if 语句。在 Javaif (var == "stringone" || "stringtwo")中工作。我如何用 Python 写这个?

4

5 回答 5

179

这不符合您的预期:

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 实习了很多字符串。is但除非你真的想要对象身份,否则不要使用。

>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True  # but could be False
于 2012-10-08T01:32:20.237 回答
27
if var == 'stringone' or var == 'stringtwo':
    do_something()

或者更多pythonic,

if var in ['string one', 'string two']:
    do_something()
于 2012-10-08T01:27:11.037 回答
6
if var == 'stringone' or var == 'stringtwo':
    dosomething()

'is' 用于检查两个引用是否指向同一个对象。它比较内存地址。显然,“stringone”和“var”是不同的对象,它们只是包含相同的字符串,但它们是“str”类的两个不同实例。所以它们当然有两个不同的内存地址,'is' 将返回 False。

于 2012-10-08T01:26:47.893 回答
4

两个单独的检查。此外,使用==而不是is检查相等性而不是身份。

 if var=='stringone' or var=='stringtwo':
     dosomething()
于 2012-10-08T01:27:34.413 回答
0
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
        if createunicode(a.text) in ['<','<']:
            links.append(a.attrMap['href'])
        else:
            continue

这个对我有用。

于 2014-05-31T09:54:18.697 回答