了解Python中的repr()函数

repr() :可评估的对象的字符串表示形式(可以是“eval()”it,表示它是一个字符串表示,其计算结果为Python对象)

换一种说法:

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

问题:

  • 为什么我在做repr(x)时会得到双引号? (当我执行str(x)时,我不会得到它们)
  • 当我做eval("'foo'")而不是x这个对象时,为什么我会得到'foo'

  • >>> 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 "<pyshell#5>", line 1, in <module>
        eval('foo')
      File "<string>", line 1, in <module>
    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'


    你在交互式解释器上得到的反馈也使用repr 。 当你输入一个表达式(让它是expr )时,解释器基本上是result = expr; if result is not None: print repr(result) result = expr; if result is not None: print repr(result) 。 因此,示例中的第二行将字符串foo格式化为所需的表示形式( 'foo' )。 然后解释创建repr的这esentation,让你用双引号。

    为什么当我将%r与双引号和单引号转义结合起来并打印出来时,它会以我将它写入我的.py文件的方式打印,但不是我希望看到的方式?

    我不确定你在这里问什么。 当通过repr运行时, single ' and double " quotes的文本包含一种引用的转义,当然它会引用,否则它不会成为Python规则中的有效字符串,这正是您通过调用repr

    另请注意, eval(repr(x)) == x类比不是字面意思。 这对大多数(所有)内置类型来说都是一个近似值,并且是正确的,但最主要的是,您可以通过查看repr输出获得相当好的类型和逻辑“值”。


    1) repr('foo')是字符串'foo' 。 在你的Python shell中,表达式的结果也被表示为表达式,所以你基本上看到了repr(repr('foo'))

    2) eval计算表达式的结果。 结果总是一个值(例如数字,字符串或对象)。 多个变量可以引用相同的值,如下所示:

    x = 'foo'
    y = x
    

    x和y现在指的是相同的值。

    3)我不知道你在这里的意思。 你能发表一个例子吗?你想看什么?

    链接地址: http://www.djcxy.com/p/63437.html

    上一篇: Understanding repr( ) function in Python

    下一篇: How to get VARCHAR2 columns to use BYTE and not CHAR?