了解双引号和单引号在 __repr__() 中的区别

5

print、object和repr()之间有什么区别?为什么会以不同的格式打印输出?

看一下输出的差异:

>>> 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的值是字符串'This is New era'。例如,当我调用repr(x)时,解释器会输出'This is New era'而不是x,并且接着调用repr('This is New era')。 - Mushahid Khan
3个回答

6
在Python中,'"之间没有语义上的区别。如果字符串包含",可以使用',反之亦然,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的名称与字符串'This is New era'相关联。例如,当我调用repr(x)时,解释器会将'This is New era'放在x的位置,然后调用repr('This is New era')。 - Mushahid Khan
__repr__通常被构造成这样的方式,当你将其返回值传递给eval时,你会收到与__repr__在第一次定义时相同的对象。因此,在单引号字符串周围加上双引号,因为eval("'My string'")可以工作,但eval('my string')会引发SyntaxError。请参见此处 - karlson
是的 @karlson ...... eval计算表达式的结果。结果始终是一个值(例如数字、字符串或对象)。 - Mushahid Khan

1

请参见__repr__

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

以及__str__

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

我添加了强调。


0

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

然而,在Python中,单引号和双引号没有区别


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接