【问题标题】:Understanding difference between Double Quote and Single Quote with __repr__()使用 __repr__() 了解双引号和单引号之间的区别
【发布时间】:2016-05-27 11:41:29
【问题描述】:

printobjectrepr() 有什么区别? 为什么它以不同的格式打印?

output difference

>>> x="This is New era"
>>> print x             # print in double quote when with print()
This is New era

>>> x                   #  x display in single quote
'This is New era'

>>> x.__repr__()        # repr() already contain string
"'This is New era'"

>>> x.__str__()         # str() print only in single quote ''
'This is New era'

【问题讨论】:

  • 我认为名称 x 附加到“这是新时代”字符串。例如,当我调用 repr(x) 时,iterpreter 会输入 'This is New era' 而不是 x,然后调用 repr('This is New era')。

标签: python repr


【解决方案1】:

'" 之间没有语义差异。如果字符串包含",则可以使用',反之亦然,Python 也会这样做。如果字符串同时包含两者,则必须转义其中一些(或使用三引号,"""''')。 (如果'" 都是可能的,那么Python 和许多程序员似乎更喜欢'。)

>>> x = "string with ' quote"
>>> y = 'string with " quote'
>>> z = "string with ' and \" quote"
>>> x
"string with ' quote"
>>> y
'string with " quote'
>>> z
'string with \' and " quote'

关于printstrreprprint打印给定的字符串,不带额外的引号,而str创建一个来自给定对象的字符串(在这种情况下,字符串本身)和repr 创建来自对象的“表示字符串”(即包含一组引号的字符串)。简而言之,strrepr 之间的区别应该是str 易于理解用户repr 易于理解Python.

此外,如果您在交互式 shell 中输入任何表达式,Python 将自动回显结果的 repr。这可能有点令人困惑:在交互式 shell 中,当您执行print(x) 时,您看到的是str(x);当你使用str(x)时,你看到的是repr(str(x)),当你使用repr(x)时,你看到的是repr(repr(x))(因此是双引号)。

>>> print("some string") # print string, no result to echo
some string
>>> str("some string")   # create string, echo result
'some string'
>>> repr("some string")  # create repr string, echo result
"'some string'"

【讨论】:

  • 我认为名称 x 附加到“这是新时代”字符串。例如,当我调用 repr(x) 时,iterpreter 会输入 'This is New era' 而不是 x,然后调用 repr('This is New era')。
  • __repr__ 通常是这样构造的,当您将其返回值传递给eval 时,您将收到与最初定义的__repr__ 完全相同的对象。因此,单引号字符串周围的双引号,因为eval("'My string'") 会起作用,但eval('my string') 会引发SyntaxError。另见here
  • 是的@karlson ...... eval 计算表达式的结果。结果始终是一个值(例如数字、字符串或对象)
【解决方案2】:

__repr__:

由 repr() 内置函数和字符串转换(反引号)调用,以计算对象的“官方”字符串表示。 如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。

还有__str__

由 str() 内置函数和 print 语句调用以计算对象的“非正式”字符串表示。 这与 __repr__() 的不同之处在于它不必是有效的 Python 表达式:可以使用更方便或更简洁的表示来代替。

我添加的重点。

【讨论】:

    【解决方案3】:

    __str____repr__ 都是获取对象的字符串表示的方法。 __str__ 应该更短且对用户更友好,而__repr__ 应该提供更多细节。

    但是,在 python 中,单引号和双引号之间没有区别

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2016-07-08
      • 2021-08-29
      • 2016-08-31
      相关资源
      最近更新 更多