为什么字符串相等不能按预期在这个Python代码中工作?

时间:2016-04-23 23:12:16

标签: python

注意:在您下载或关闭我的问题或将其标记为重复之前,请允许我向您保证,我已经在SO和Google上查看了几十个类似的问题但是更多不到一个小时,我仍然没有解决这个问题。没有其他答案解决了我的问题。

问题 我有这个Python代码:

text = ''
text += '<' + '/' + '>'

print text, '</>'
print repr(text), repr('</>')

if text is '</>':
    print 'Equal'
else:
    print 'Not equal!'

我只想比较两个字符串。出于某种原因,我需要逐个将字符连接到text。我希望if语句可以评估为True,但它没有。我不知道为什么!

这是输出:

</> </> '</>' '</>' Not equal!

我是Python的新手,我正在使用Python 2.7。请帮忙吗?

2 个答案:

答案 0 :(得分:9)

您需要使用==而不是isis检查对象标识不相等。

e.g。

我们假设你有foobar

>>> foo = 'green eggs and ham'
>>> bar = 'green eggs and ham'
>>> foo is bar
>>> False
>>> foo == bar
>>> True

在我的机器上:

>>> id(foo)
>>> 52008832 
>>> id(bar)
>>> 52010560

现在,看看这个:

>>> foobar = bar
>>> foobar is bar
>>> True

这是真的,因为我们将变量foobar别名化为指向作为参考的条形。显然,它们在此别名下引用相同的位置。因此,返回True。

更有趣的是,考虑两个ints。这仅适用于小的整数(-5,256)。

>>> foo = 123
>>> bar = 123
>>> foo is bar
>>> True
>>> id(foo)
>>> 1993000432 # == id(bar)

int s(-5,256)被缓存,因此在此范围内的整数将eval为true,用于比较对象标识。

答案 1 :(得分:2)

我在Python的整个历史中从未使用==(这可能是因为我仍然无法绕过OOP)。只需使用常规等于运算符{{1}}。