python - 为什么 python 的 __repr__ 的 dict 比它的 __str__ 更具可读性?
问题描述
请参见以下示例:
In [33]: test = {x:str(x)*10 for x in range(10)}
In [35]: print test
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
In [34]: test
Out[34]:
{0: '0000000000',
1: '1111111111',
2: '2222222222',
3: '3333333333',
4: '4444444444',
5: '5555555555',
6: '6666666666',
7: '7777777777',
8: '8888888888',
9: '9999999999'}
打印函数 (__str__) 的输出客观上比 __repr__ 输出可读性差。这是一条长线,将自动换行成多行,没有间距。它们都足够明确,可以让您使用它们的输出重建对象。
相反的输出在这里是否有意义, __repr__ 是紧凑的表示形式,而 __str__ 具有更易读的换行符?
解决方案
这只是一个 ipython 的事情。在标准 Python 3.7 REPL 中,这是输出:
>>> test = {x:str(x)*10 for x in range(10)}
>>> print(test)
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
>>> test
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
>>>
如果我们将其作为“普通”脚本执行,则输出是相同的:
test = {x: str(x) * 10 for x in range(10)}
print(str(test))
# {0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
print(repr(test))
# {0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
str
或表示中没有换行符repr
,正如之前在评论中提到的那样:
print(repr(test) == str(test))
# True
结论是,这只是 ipython 主动让repr
' 输出更人性化。
推荐阅读
- r - 替换列表元素中的值
- reactjs - 使用 Jasmine 对已导入 SVG 的 Typescript/React 进行单元测试
- c# - 查看函数执行时间的最佳方法
- haskell - 如何在 Template Haskell 中“应用”类型变量?
- python - Python中的特定选择和排列
- c# - 更改属性内的值后,PropertyChanged 事件为空
- javascript - 看不到 Date1 中元素的日期值
- java - 当每个面板都在 Gridlayout 中时,如何将两个面板添加到单个 JFrame?
- c# - 将 ac# winform 移植到 linux?
- jenkins-pipeline - 将模块导入 DSL 作业