小能豆

理解 Python 中的 repr() 函数

javascript

repr():对象的可评估字符串表示形式(可以对其进行“eval()”,这意味着它是一个可评估为 Python 对象的字符串表示形式)

换句话说:

>>> x = 'foo'
>>> repr(x)
"'foo'"

问题:

  1. 为什么我这样做时会出现双引号repr(x)?(我这样做时没有得到它们str(x)
  2. 'foo'为什么我这样做时得到eval("'foo'")的不是对象 x ?

阅读 37

收藏
2024-07-03

共1个答案

小能豆

1. 为什么我这样做时会出现双引号repr(x)?(我这样做时没有得到它们str(x)

函数repr()返回一个字符串,如果传递给 ,则会产生相同的对象eval()。这意味着 的输出repr()是一个表示有效 Python 表达式的字符串。对于字符串对象,函数repr()将返回带有附加引号的字符串,以表明它确实是一个字符串。

例如:

>>> x = 'foo'
>>> repr(x)
"'foo'"

结果"'foo'"包含引号,以表明字符串本身是"foo",从而清楚地表明输出是字符串对象的字符串表示形式。这有助于区分实际的字符串内容和字符串对象的表示形式。

另一方面,该str()函数旨在生成对象的可读、人性化表示。对于字符串,它仅返回字符串本身,不带附加引号:

>>> str(x)
'foo'

'foo'2. 为什么我这样做时会得到哪个对象eval("'foo'")而不是x哪个对象?

当您使用 时eval(),它会将传递给它的字符串作为 Python 表达式进行求值。该字符串"'foo'"是一个有效的 Python 表达式,表示内容为 的字符串对象"foo"。因此,当您执行以下操作时:

>>> eval("'foo'")
'foo'

eval()函数计算字符串"'foo'"(字符串的字符串表示形式)的值"foo",并返回该字符串"foo"

但是,如果您想要评估返回对象的表达式x,则需要将变量名称x作为字符串传递给eval()

>>> x = 'foo'
>>> eval('x')
'foo'

x这将评估当前上下文中保存值的变量名称"foo"

总结一下:

  • repr(x)提供包含引号的字符串表示形式,以明确它是一个字符串。
  • eval("'foo'")计算结果为字符串"foo",而不是变量x,因为eval()将字符串解释为 Python 表达式。
2024-07-03