了解Python中repr()函数

31 浏览
0 Comments

了解Python中repr()函数

repr(): 对象的可执行字符串表示形式(可以使用“eval()”来执行它,这意味着它是一个表示为Python对象的字符串表示形式)

换句话说:

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

问题:

  1. 为什么在使用repr(x)时会有双引号?(在使用str(x)时就没有)
  2. 为什么在使用eval(\"\'foo\'\")时会得到\'foo\'而不是表示对象的x?
admin 更改状态以发布 2023年5月24日
0
0 Comments

交互式解释器返回的反馈也使用repr。当您输入表达式(例如expr)时,解释器基本上执行result = expr; if result is not None: print repr(result)。因此,您示例中的第二行正在将字符串foo格式化为您想要的表示形式('foo')。然后,解释器创建该表达式的repr表示,留下您的双引号。

当我将%r与单引号和双引号转义组合在一起并打印时,为什么它打印出我在.py文件中编写的方式,而不是我想看到的方式?

我不确定您在这里在问什么。文本single ' and double " quotes,当经过repr处理时,包括一种引号的转义。当然,否则它就不会是Python规则的有效字符串字面值。这正是通过调用repr来请求的。

此外,请注意,eval(repr(x))== x类比并不是字面意义上的。它是一种近似值,并对于大多数(全部?)内置类型都成立,但主要的是,您可以通过查看repr输出来获得类型和逻辑“值”的相当好的思路。

0
0 Comments

>>> x = 'foo'
>>> x
'foo'

因此,变量名x与字符串'foo'相关联。例如,当您调用repr(x)时,解释器将'foo'而不是x放在其中,并随后调用repr('foo')

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr实际上调用了x的一个魔术方法__repr__,该方法返回包含分配给x的值'foo'字符串表示的字符串。因此,它在字符串""中返回'foo',从而得到"'foo'"repr的思想是提供一个字符串,其中包含一系列符号,我们可以在解释器中键入这些符号,从而得到与发送给repr的值相同的值。

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

当我们调用eval("'foo'")时,这等同于我们在解释器中键入'foo'。这就好像我们直接在解释器中输入外部字符串""的内容。

>>> eval('foo')
Traceback (most recent call last):
  File "", line 1, in 
    eval('foo')
  File "", line 1, in 
NameError: name 'foo' is not defined

如果我们调用eval('foo'),这等同于我们在解释器中键入foo。但是并不存在可用的foo变量,因此会引发异常。

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str只是对象的字符串表示(请记住,x变量指的是'foo'),因此该函数返回字符串。

>>> str(5)
'5'

整数5的字符串表示是'5'

>>> str('foo')
'foo'

字符串'foo'的字符串表示是同样的字符串'foo'

0