好的,我想用repr()打印出一堆列表和嵌套数组的文本版本。
但我希望数字只有4位小数:42.7635745114但是32.7635。
我想使用repr(),因为它具有处理嵌套数组的良好能力。编写我自己的打印循环是一个没有吸引力的选择。
当然有一些方法可以让repr重做这个吗?我看到有一个repr和reprlib模块,但实例非常稀缺,就像不存在一样。
答案 0 :(得分:4)
不,没有办法超载repr()
。浮点数的格式在C源代码中是硬编码的。
float_repr()
function使用'r'
格式化程序调用辅助函数,最终调用utility function that hardcodes the format来归结为format(float, '.16g')
。
你可以继承float
,但只是为了表示值(特别是在更大的结构中)这样做是过度的。这是repr
(Python 3中的reprlib
)的来源;该库旨在打印任意数据结构的有用表示,并允许您挂钩打印该结构中的特定类型。
您可以通过继承repr.Repr()
来使用repr
模块,提供repr_float()
方法来处理浮点数:
import repr
class FloatRepr(repr.Repr):
def repr_float(self, value, level):
return format(value, '.4f')
print FloatRepr().repr(object_to_represent)
演示:
>>> import random
>>> import repr
>>> class FloatRepr(repr.Repr):
... def repr_float(self, value, level):
... return format(value, '.4f')
...
>>> print FloatRepr().repr([random.random() for _ in range(5)])
[0.5613, 0.9042, 0.3891, 0.7396, 0.0140]
您可能希望在子类上设置max*
属性,以影响每个容器类型打印的值数。
答案 1 :(得分:0)
也许您可以使用return "%.4f" %(self.float)
尝试字符串格式:
>>> class obj:
... def __init__(self, value):
... self.float = value
... def __repr__(self):
... return "%.4f" %(self.float)
...
>>> x = obj(8.1231231253252)
>>> x.float
8.1231231253252
>>> x
8.1231
>>>