PyCharm控制台中使用is运算符出现异常警告的问题咨询
嘿,我来帮你理清这个关于is运算符的问题~
关于Python中
is与字符串字面量的警告及结果解析 先把你的代码整理下,方便看清楚:
x = 'abc' y = 'abc' print(x is y) print(x is 'abc')
为什么会出现那5次警告?
你看到的SyntaxWarning: "is" with a literal. Did you mean "=="?,是Python在贴心提醒你用错运算符啦!
==的作用是比较两个对象的值是否相等,这才是判断字符串内容一致的正确方式is的作用是判断两个对象是否是内存里的同一个实例(看身份,不是看值)
Python开发者设计这个警告,是因为很多新手会把is和==搞混——当你用is和字面量(比如'abc')比较时,它默认你大概率是想判断值相等,而不是身份相同,所以赶紧抛出警告提醒你。
为什么结果还是True?
这得归功于Python的字符串驻留(String Interning)优化机制:对于像'abc'这种短且符合标识符规则的字符串,Python会在内存里只创建一份实例,后续再用到相同的字符串时,直接复用这个实例。所以:
x = 'abc'和y = 'abc'其实指向的是内存里同一个字符串对象,所以x is y返回True- 你直接写
x is 'abc'时,字面量'abc'也会复用之前驻留的那个对象,结果自然也是True
但要注意:这种驻留是Python的优化手段,不是语法强制要求!比如遇到带特殊字符的长字符串、或者动态生成的字符串时,驻留机制可能不生效,这时候用is比较就会得到False,但==依然能正确判断值相等。
正确的写法
如果你的需求是判断字符串内容一致,一定要用==:
x = 'abc' print(x == 'abc') # 无警告,结果稳定,这才是正确姿势
只有当你确实需要判断两个对象是同一个实例时(比如判断变量是否为None,这时候用x is None是官方推荐写法),再用is就对了。
内容的提问来源于stack exchange,提问作者Bashar Ghanem
相关产品推荐
相关产品推荐

