我正在用Python编写一些脚本,这些脚本需要与某些Java库一起使用,因此我使用Jython。我注意到在编译后,将变量与is
进行比较会产生与Python Shell中不同的结果。
我知道is
和==
在Python中的用途不同,但是在shell中编译匹配行为之后的行为不应该吗?
这是我在脚本中编写的简化功能:
def test(myString='AAA'):
print myString is 'AAA'
test()
现在,当我使用Python运行此程序时,结果为True,但是在使用Jython编译后,结果为False。
此后,我将is
关键字更改为==
,结果匹配。
我很好奇为什么结果不同。我假设编译后,Java将检查引用而不是值,但是Python也应该,对吧?
答案 0 :(得分:0)
Python中的is
关键字用于测试两个值是否引用同一对象。在您的示例中,仅当字符串是 interned (参见https://en.wikipedia.org/wiki/String_interning)时,它才会返回True
。这是高度实现特定的。
要按字典顺序比较字符串,应使用==
。