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

sda*_*das 2 python comparison ascii python-3.x

为什么以下失败?

assert ascii("cat") == "cat" => False
Run Code Online (Sandbox Code Playgroud)

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

Ash*_*ary 5

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

>>> ascii('cat')
"'cat'"
Run Code Online (Sandbox Code Playgroud)

这显然不同于'cat'.

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

>>> eval (ascii('cat'))
'cat'
>>> from ast import literal_eval
>>> literal_eval(ascii('cat'))
'cat'
Run Code Online (Sandbox Code Playgroud)

来自文档:

str()函数用于返回值相当于人类可读的值的表示,同时repr()用于生成可由解释器读取的表示(或者SyntaxError如果没有等效语法则强制执行 ).对于没有特定人类消费代表的对象,str()将返回与之相同的值repr().许多值,例如数字或结构(如列表和字典),使用任一函数都具有相同的表示.特别地,字符串和浮点数具有两个不同的表示.