注意:在您下载或关闭我的问题或将其标记为重复之前,请允许我向您保证,我已经在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。请帮忙吗?
答案 0 :(得分:9)
您需要使用==
而不是is
。 is
检查对象标识不相等。
e.g。
我们假设你有foo
和bar
:
>>> 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}}。