为什么这个Python ascii字符串不等同于常规字符串?

时间:2013-07-02 06:28:55

标签: python python-3.x comparison ascii

为什么以下失败?

assert ascii("cat") == "cat" => False

(我想这与Python对字符串的比较/ ASCII函数完成后的字符串编码有关。)

1 个答案:

答案 0 :(得分:5)

那是因为ascii的输出是这样的:

>>> ascii('cat')
"'cat'"

明显不同于'cat'

ascii返回字符串对象的repr版本,可以与evalast.literal_eval一起使用来重新生成字符串对象。

>>> eval (ascii('cat'))
'cat'
>>> from ast import literal_eval
>>> literal_eval(ascii('cat'))
'cat'

来自docs

  

str()函数用于返回值的表示   是人类可读的,而repr()是生成的   可由解释者阅读的表示(或将强制执行   SyntaxError如果没有等效的语法)。对于没有的对象   有一个特定的人类消费代表,str()会   返回与repr()相同的值。许多值,例如数字或   列表和词典之类的结构具有相同的表示形式   使用任一功能。中的字符串和浮点数   特别是,有两个不同的表示。