Jython:'is' 关键字的不同行为
Jython: different behaviour with 'is' keyword
我正在 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 也应该如此,对吧?
Python中的is
关键字用于测试两个值是否指向同一个对象。在您的示例中,当且仅当字符串为 interned(参见 https://en.wikipedia.org/wiki/String_interning)时,它才会 return True
。这是高度特定于实现的。
要按字典顺序比较字符串,您应该使用 ==
。
我正在 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 也应该如此,对吧?
Python中的is
关键字用于测试两个值是否指向同一个对象。在您的示例中,当且仅当字符串为 interned(参见 https://en.wikipedia.org/wiki/String_interning)时,它才会 return True
。这是高度特定于实现的。
要按字典顺序比较字符串,您应该使用 ==
。