简单表达式

时间:2017-10-06 01:22:40

标签: python

我在python中得到了一个奇怪的结果。我一直得到错误的结果。

string = '94070'
string[0:2] is '95' or string[0:2] is '94'

返回False,但是当我在值' 94'中进行硬编码时,它会起作用

'94' is '95' or '94' is '94'

返回True。我检查了数据类型,它们都是类型' str'所以我不确定这里发生了什么。

3 个答案:

答案 0 :(得分:5)

使用==代替is。在Python中,is运算符执行对象标识检查。 ==运算符检查两个对象(可能是不同的对象)以查看它们是否包含相同的内容。

答案 1 :(得分:1)

is是一个身份测试(这是完全相同的对象?),而不是相等测试。虽然is巧合地工作,但作为某些不属于逻辑单例的事物的实现细节,它不应该像这样使用;使用==进行价值平等测试。

由于一些相关的可能性,您对'94' is '94'的测试可以起作用:

  1. Python经常在函数中合并常量文字(有时只在一行上)
  2. 字符串文字通常由Python实现,因此代码中任何位置表示的相同字符串文字引用该字符串的通用副本
  3. 当你切掉一些字符串时,没有涉及实习,所以身份测试失败了。

答案 2 :(得分:0)

使用is查看两个参数是否引用同一个对象,==查看它们是否具有相同的值。

>>> a = 'this is some text.'
>>> b = 'this is some text.'
>>> a == b
True
>>> a is b
False

>>> a = 'this is some text.'
>>> b = a
>>> a == b
True
>>> a is b
True