2012-10-08 106 views
39
if var is 'stringone' or 'stringtwo': 
    dosomething() 

这不行!我有一个变量,我需要它做任何的值,但它不会输入if语句。在Java if (var == "stringone" || "stringtwo")的作品。我如何在Python中编写这个?如何检查一个变量是否等于一个字符串或另一个字符串?

+0

我很确定这两个错误都被覆盖过。 –

+0

为/ ==区别:http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – tanantish

回答

99

这不会做你所期望的:

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 
+0

非常感谢!这已经解决了我的程序中的许多问题。 :) –

3
if var == 'stringone' or var == 'stringtwo': 
    dosomething() 

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

14
if var == 'stringone' or var == 'stringtwo': 
    do_something() 

或更Python,

if var in ['string one', 'string two']: 
    do_something() 
+1

第二次丢失逗号 – DSM

+0

@DSM遗漏冒号,太。 – iMom0

+0

为什么第二个考虑更pythonic? –

0

两个独立的检查。此外,请使用==而不是is来检查平等而不是身份。

if var=='stringone' or var=='stringtwo': 
    dosomething() 
+1

别忘了投票! –

+0

我没有足够的信誉。我今天刚刚加入了StackOverflow。 –

0
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}): 
     if createunicode(a.text) in ['<','<']: 
      links.append(a.attrMap['href']) 
     else: 
      continue 

这对我的作品。

相关问题