由于某种原因,当我尝试使字符串小写并使用'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
这些字符串不应该相等吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
两个对象'HELLO'.lower()
和'hello'
没有与它们关联的相同字符串,is
比较对象
“ HELLO”是第一个对象中的字符串,您正在对其应用方法.lower()
。第二个对象的字符串是“ hello”。因此这两个对象是不同的
尝试
'HELLO'.lower() == 'hello'
当对象1转换为小写字母时,它将比较对象1的字符串,而不是对象本身。