Str.lower()不是它的较低版本

时间:2019-06-26 13:47:08

标签: python python-3.x string equality

由于某种原因,当我尝试使字符串小写并使用'is'运算符检查是否相等时,它返回false。

我尝试将字符串转换为ascii元组,发现它们仍然具有完全相同的数字,并且具有完全相同的类型,但是它们仍然无法通过测试。

'HELLO'.lower() is 'hello'  # False
'hello' is 'hello'  # True

'HELLO'.lower()  # 'hello'
x = 'HELLO'.lower()
x  # 'hello'
x is 'hello'  # False

tuple(map(lambda x: ord(x), 'hello'))  # (104, 101, 108, 108, 111)
tuple(map(lambda x: ord(x), 'HELLO'.lower()))  # (104, 101, 108, 108, 111)

tuple(map(lambda x: ord(x), 'hello')) is tuple(map(lambda x: ord(x), 'HELLO'.lower()))  # False

这些字符串不应该相等吗?

2 个答案:

答案 0 :(得分:2)

如果要检查两个对象的值是否相同,则应改用==运算符。

is运算符验证两个操作数是否引用同一对象。

可以找到一些更好地说明这两个运算符之间差异的示例here

答案 1 :(得分:1)

两个对象'HELLO'.lower()'hello'没有与它们关联的相同字符串,is比较对象

“ HELLO”是第一个对象中的字符串,您正在对其应用方法.lower()。第二个对象的字符串是“ hello”。因此这两个对象是不同的

尝试

'HELLO'.lower() == 'hello'

当对象1转换为小写字母时,它将比较对象1的字符串,而不是对象本身。