Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Unicode字符串转换为ascii字符串,然后将其与ascii字符串进行比较总是返回false。(Python 2.7.6)_Python_Python 2.7_Unicode - Fatal编程技术网

将Unicode字符串转换为ascii字符串,然后将其与ascii字符串进行比较总是返回false。(Python 2.7.6)

将Unicode字符串转换为ascii字符串,然后将其与ascii字符串进行比较总是返回false。(Python 2.7.6),python,python-2.7,unicode,Python,Python 2.7,Unicode,这似乎是一个简单的问题,但我在任何地方都找不到答案 我有一个函数,它获取一个Unicode字符串作为参数,如下所示: def foo(arg): if str(arg) is 'wxyz': print 'it is equal' 给定输入u'wxyz',函数不打印任何内容。我做了更多的测试,我提出了一个问题 为什么这不起作用: >>> u = unicode('wxyz') >>> str(u) is 'wxyz' False 但

这似乎是一个简单的问题,但我在任何地方都找不到答案

我有一个函数,它获取一个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
u=unicode('wxyz') >>>s=str(u) >>>a=u.encode('ascii') >>>类型(u) >>>类型 >>>类型(a) >>>类型('wxyz') >>>u是“wxyz” 假#应该是假 >>>u==“wxyz” 假#应该是假 >>>s是“wxyz” 假#应该是真的 >>>s=='wxyz' 真的#应该是真的 >>>a是“wxyz” 假#应该是真的 >>>a==“wxyz” 真的#应该是真的 >>>u是u'wxyz' 假#应该是真的 >>>u==u'wxyz' 真的#应该是真的 我想我可以将“is”改为“==”,但是我在代码中的其他地方都使用了“is”,而且切换到使用“==”似乎不是很像Python。如果有人能帮我理解这一点,我将非常感激。另外,如果你需要我更具体一些,请询问


如果有人问我这个问题,我深表歉意。我阅读了Unicode上的Python文档,并在这里查找了类似的问题,但我找不到任何回答我问题的答案。

如果a和b绑定到同一个对象,则操作符
a is b
返回True。因此,
is
在这里使用的运算符是错误的。这可能意味着您需要修复代码中使用的大部分位置

a = []
b = a
a is b # true
a == b # true

a = []
b = []
a is b # false
a == b # true

但是如果我做了
a='hello'
b='hello'
a是b
返回True。a和b不是绑定到不同的对象吗?@user2103760,试试
a=906
b=906
a是b
,看看会发生什么。@user2103760:CPython从未承诺过它有时不会重用对象。当它们是不可变的时,这可以节省内存。例如,小整数对象经常被缓存——比较
a=1;b=1;a是b,a=10000;b=10000;a是b
。是的,这将是编译器将不可变字符串对象作为优化重用OK。谢谢你回答我的问题!我想我现在明白了。