是文件中的运算符 python
is operator python in file
刚遇到这个问题,百思不得其解!我的代码只是想比较 song[-3:] is "mp3"
如果我不使用 is
,它会通过,但是通过我对我无法理解的事情的所有耐心,我发现了一个奇怪的行为。我了解到 is
应该测试两个事物是否是同一个实例或其他什么,但是当值相同时,为什么,哦,为什么,它会失败?当我在一行上测试两个字符串的 id 时,另一行使用 is
运算符,然后是 ==
运算符:
>>> id("String"[-3:]), id("String"[-3:])
(4347723880, 4347723880)
>>> id("String"[-3:])
4347241952
>>> "String"[-3:] is "String"[-3:]
False
>>> "String"[-3:] == "String"[-3:]
True
所以我想我的问题是,为什么当我使用 is
时,或者在单独的行上测试时,id 会改变,但在同一行上却不会?这是什么奇怪的异常,还是我的疏忽?
发生这种情况是因为当您这样做时:
"String"[-3:] is "String"[-3:]
python 创建两个具有不同 id 的不同对象。
is
测试它们是否是 same 字符串,而不仅仅是相同的字符串。由于字符串是不可变的,如果您要求一个具有相同值的字符串,Python 可以选择重用旧字符串 - 您会遇到它确实选择这样做的某些情况。如您所见,并非总是如此。无法保证 会 的规则。要在所有情况下都获得正确的结果,请在您表示 "do these strings have all the same letters".
时使用 str1 == str2
当你调用"String"[-3:]
时,python给你一个字符串对象。如果有相同的 str。两个 str 应该相同。但是,如果您不将 "String"[-3:]
分配给 varible.The,"String"[-3:]
将是 "disapeared"。我测试了你是否使用a="String"[-3:]
。那么"String"[-3:]
的id就不会再变了
刚遇到这个问题,百思不得其解!我的代码只是想比较 song[-3:] is "mp3"
如果我不使用 is
,它会通过,但是通过我对我无法理解的事情的所有耐心,我发现了一个奇怪的行为。我了解到 is
应该测试两个事物是否是同一个实例或其他什么,但是当值相同时,为什么,哦,为什么,它会失败?当我在一行上测试两个字符串的 id 时,另一行使用 is
运算符,然后是 ==
运算符:
>>> id("String"[-3:]), id("String"[-3:])
(4347723880, 4347723880)
>>> id("String"[-3:])
4347241952
>>> "String"[-3:] is "String"[-3:]
False
>>> "String"[-3:] == "String"[-3:]
True
所以我想我的问题是,为什么当我使用 is
时,或者在单独的行上测试时,id 会改变,但在同一行上却不会?这是什么奇怪的异常,还是我的疏忽?
发生这种情况是因为当您这样做时:
"String"[-3:] is "String"[-3:]
python 创建两个具有不同 id 的不同对象。
is
测试它们是否是 same 字符串,而不仅仅是相同的字符串。由于字符串是不可变的,如果您要求一个具有相同值的字符串,Python 可以选择重用旧字符串 - 您会遇到它确实选择这样做的某些情况。如您所见,并非总是如此。无法保证 会 的规则。要在所有情况下都获得正确的结果,请在您表示 "do these strings have all the same letters".
str1 == str2
当你调用"String"[-3:]
时,python给你一个字符串对象。如果有相同的 str。两个 str 应该相同。但是,如果您不将 "String"[-3:]
分配给 varible.The,"String"[-3:]
将是 "disapeared"。我测试了你是否使用a="String"[-3:]
。那么"String"[-3:]
的id就不会再变了