这似乎是一个简单的问题,但我无法在任何地方找到答案。
我有一个函数,它将Unicode字符串作为参数,如下所示:
def foo(arg):
if str(arg) is 'wxyz':
print 'it is equal'
鉴于输入u'wxyz',该函数不会打印任何内容。我做了一些测试,我提出了一个问题。
为什么这不起作用:
>>> u = unicode('wxyz')
>>> str(u) is 'wxyz'
False
但这确实有效:
>>> str(u) == 'wxyz'
True
这是我已经尝试过的:
>>> u = unicode('wxyz')
>>> s = str(u)
>>> a = u.encode('ascii')
>>> type(u)
<type 'unicode'>
>>> type(s)
<type 'str'>
>>> type(a)
<type 'str'>
>>> type('wxyz')
<type 'str'>
>>> u is 'wxyz'
False # Should be False
>>> u == 'wxyz'
False # Should be False
>>> s is 'wxyz'
False # Should be True
>>> s == 'wxyz'
True # Should be True
>>> a is 'wxyz'
False # Should be True
>>> a == 'wxyz'
True # Should be True
>>> u is u'wxyz'
False # Should be True
>>> u == u'wxyz'
True # Should be True
我想我可以将'is'更改为'==',但我一直在使用'is'代码中的其他地方,并且它似乎不会像Python那样转换为使用' ==”。如果有人能帮助我理解这一点,我会非常感激。另外,如果您需要我更具体,请询问。
如果在其他地方被问到这个问题我真的很抱歉。我阅读了关于Unicode的Python文档,并在这里查找了类似的问题,但我找不到任何能回答我问题的内容。
答案 0 :(得分:2)
如果a和b 绑定到同一个对象,则运算符a is b
返回True。所以is
是在这里使用的错误操作符。这可能意味着您需要修复代码中使用is
的大多数地方。
a = []
b = a
a is b # true
a == b # true
a = []
b = []
a is b # false
a == b # true