我一直在阅读reprPython.我想知道输出的应用是什么repr.例如
class A:
pass
repr(A) ='<class __main__.A at 0x6f570>'
b=A()
repr(b) = '<__main__.A instance at 0x74d78>'
Run Code Online (Sandbox Code Playgroud)
什么时候会对'<class __main__.A at 0x6f570>'或感兴趣'<__main__.A instance at 0x74d78>'?
从理论上讲,repr(obj)应该吐出一个字符串,以便可以将其输入eval以重新创建对象.换一种说法,
obj2 = eval(repr(obj1))
Run Code Online (Sandbox Code Playgroud)
应该重现该对象.
在实践中,repr通常是"精简版" str.str可能会打印一个人类可读的对象形式,而repr打印出类似对象类的信息,通常用于调试目的.但有用性在很大程度上取决于您的情况以及相关对象的处理方式repr.
有时您必须处理或呈现字节字符串,例如
\n\nbob2=\'bob\\xf0\\xa4\\xad\\xa2\'\nRun Code Online (Sandbox Code Playgroud)\n\n如果你打印出来(在 Ubuntu 中)你会得到
\n\nIn [62]: print(bob2)\nbob\nRun Code Online (Sandbox Code Playgroud)\n\n这对于其他试图理解您的字节字符串的人来说并不是很有帮助。John 在评论中指出,在 Windows 中,print(bob2)会产生类似bob\xc3\xb0\xc2\xa4\xc2\xad\xc2\xa2. 问题是 Python 检测终端/控制台的默认编码,并尝试根据该编码解码字节字符串。由于 Ubuntu 和 Windows 使用不同的默认编码(可能utf-8分别cp1252),因此会产生不同的结果。
相反,字符串的 repr 是明确的:
\n\nIn [63]: print(repr(bob2))\n\'bob\\xf0\\xa4\\xad\\xa2\'\nRun Code Online (Sandbox Code Playgroud)\n\n当人们在这里发布有关 Python 字符串的问题时,他们经常被要求显示字符串的 repr,以便我们确定他们正在处理什么字符串。
\n\n一般来说,repr 应该是对象的明确字符串表示。repr(obj)调用对象obj的__repr__方法。由于在您的示例中,该类A没有自己的__repr__方法,repr(b)因此只能指示类和内存地址。
您可以重写该__repr__方法以提供更多相关信息。
在您的示例中,\'<__main__.A instance at 0x74d78>\'告诉我们两件有用的事情:
b类的实例,A__main__例如,您可能有两个 class 实例A。如果它们具有相同的内存地址,那么您就会知道它们“指向”同一个底层对象。(请注意,也可以使用 获取此信息id)。
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |