为什么你可以在内部使用函数repr(y)而不是str(y)使用eval()?

Lui*_*off 0 python string eval repr

以下是我发现并希望有人解释的一些代码.

如果我将一个字符串赋给变量y,用eval函数计算它并将内容分配给变量y2,解释器返回true.

>>> y = 'a string'
>>> y2 = eval(repr(y))
>>> y == y2
>>> True
Run Code Online (Sandbox Code Playgroud)

以这种方式使用str(y):

>>> eval(str(y))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
a string
       ^
SyntaxError: unexpected EOF while parsing
Run Code Online (Sandbox Code Playgroud)

不被允许.这是为什么?

Bar*_*mar 5

str()只返回字符串本身,它不会像它那样在它周围加上引号repr().

y2 = eval(repr(y))
Run Code Online (Sandbox Code Playgroud)

相当于:

y2 = 'a string'
Run Code Online (Sandbox Code Playgroud)

由于repr()添加了引号,这是有效的.

y2 = eval(str(y))
Run Code Online (Sandbox Code Playgroud)

相当于:

y2 = a string
Run Code Online (Sandbox Code Playgroud)

这显然是无稽之谈,因为没有引号.

  • @Luis查看[repr](https://docs.python.org/2/library/functions.html#repr)的文档,特别指出:*对于许多类型,此函数尝试返回一个字符串当传递给eval()*时会产生一个具有相同值的对象,并将其与[str](https://docs.python.org/2/library/functions.html#str)进行比较,其中说:*[.与repr(object)的区别在于str(object)并不总是尝试返回eval()可接受的字符串; 它的目标是返回一个可打印的字符串[...]''.* (3认同)