Python中str()与repr()函数的核心区别与实战应用
本文深入解析Python中str()与repr()函数的差异。str()侧重用户友好的可读性输出,而repr()旨在提供无歧义的调试信息,通常包含对象类型。通过对比字符串、浮点数及datetime对象的输出示例,展示两者在Python2与Python3中的表现。此外,文章还演示了如何通过定义__repr__和__str__方法自定义类的字符串表示行为,帮助开发者根据场景选择合适的转换函数。
本文通过具体实例详细解析Python中str()与repr()函数的区别,示例代码清晰易懂,对读者的学习或工作具有实际参考价值。
str()与repr()的核心区别
核心区别
两者最大的差异在于应用场景:str()主要用于生成面向终端用户的友好输出,强调可读性;而repr()则主要用于程序调试,其目标是消除歧义(例如确保浮点数精度信息的完整保留),力求还原对象的精确状态。
基本用法与输出对比
基本用法对比
In [12]: s = 'abc'
In [13]: print(str(s))
abc
In [14]: print(2.0/11)
0.18181818181818182
In [15]: repr(s)
Out[15]: "'abc'"
In [16]: repr(2.0/11)
Out[16]: '0.18181818181818182'
观察基础类型时,两者在Python3中可能产生相同的数值显示,但在Python2环境中差异更为明显。
>>> eval('2.0/11')
0.18181818181818182
>>> print(2.0/11)
0.181818181818
为了更直观地展示差异,我们更换一个包含复杂对象的例子。
In [17]: import datetime
In [18]: n = datetime.datetime.now()
In [19]: print(str(n)
...: )
2020-01-16 09:22:13.361995
In [20]: repr(n)
Out[20]: 'datetime.datetime(2020, 1, 16, 9, 22, 13, 361995)'
结果显示,str()输出的格式更符合人类阅读习惯,而repr()则打印出完整的类型信息及构造参数,这种包含类型信息的输出方式更适合开发者进行代码调试。
底层实现与自定义方法
底层实现机制
这两个函数均为Python内置函数。根据官方文档说明,repr()的作用是返回一个对象的“可打印表示”字符串。
Return a string containing a printable representation of an object.
A class can control what this function returns for its instances by defining a __repr__() method.
这意味着开发者可以在自定义类中重写__repr__()方法(str()同理,对应__str__()),从而控制对象的字符串表示形式。具体实现如下所示:
In [35]: class TestClass:
...: def __init__(self, name, age):
...: self.name = name
...: self.age = age
...: def __repr__(self):
...: return 'repr: ' + self.name + ' ,' + self.age
...: def __str__(self):
...: return self.name + ' ,' + self.age
...:
In [38]: tt = TestClass('tony', '23')
In [39]: repr(tt)
Out[39]: 'repr: tony ,23'
In [40]: str(tt)
Out[40]: 'tony ,23'
以上内容即为Python中str()与repr()区别的全部解析,希望能为读者提供有益的帮助,欢迎继续支持本站获取更多技术内容。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









