Python 为什么可以将eval()与函数repr(y)一起使用,而不是str(y)?

Python 为什么可以将eval()与函数repr(y)一起使用,而不是str(y)?,python,string,eval,repr,Python,String,Eval,Repr,下面是我找到的一些代码,希望有人能解释一下 如果我将一个字符串赋给变量y,使用eval函数对其求值,并将内容赋给变量y2,解释器将返回true >>> y = 'a string' >>> y2 = eval(repr(y)) >>> y == y2 >>> True 其中,以这种方式使用str(y): >>> eval(str(y)) Traceback (most recent call last):

下面是我找到的一些代码,希望有人能解释一下

如果我将一个字符串赋给变量y,使用eval函数对其求值,并将内容赋给变量y2,解释器将返回true

>>> y = 'a string'
>>> y2 = eval(repr(y))
>>> y == y2
>>> True
其中,以这种方式使用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
评估(str(y)) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“”,第1行 一串 ^ SyntaxError:分析时出现意外的EOF 这是不允许的。这是为什么?

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

y2 = eval(repr(y))
相当于:

y2 = 'a string'
y2 = a string
因为
repr()
添加了引号,所以这是有效的

y2 = eval(str(y))
相当于:

y2 = 'a string'
y2 = a string
这显然是无稽之谈,因为没有引号。

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

y2 = eval(repr(y))
相当于:

y2 = 'a string'
y2 = a string
因为
repr()
添加了引号,所以这是有效的

y2 = eval(str(y))
相当于:

y2 = 'a string'
y2 = a string
这显然是无稽之谈,因为没有引号。

@Luis请参阅文档,特别是其中的一部分:对于许多类型,此函数试图返回一个字符串,该字符串将在传递给eval()时生成一个值相同的对象,并与上面的字符串进行比较:[…]与repr(object)的区别在于str(object)不总是尝试返回eval()可接受的字符串;它的目标是返回一个可打印的字符串[…]”。@Luis请参阅文档,特别是其中的一部分:对于许多类型,此函数试图返回一个字符串,该字符串在传递给eval()时将生成一个值相同的对象,并与上面的字符串进行比较:[…]与repr(object)的区别在于str(object)不总是尝试返回eval()可接受的字符串;它的目标是返回一个可打印的字符串[…]”。