【发布时间】:2020-12-15 13:48:00
【问题描述】:
有没有办法计算len(str(x)) 和/或len(repr(x)) 的结果 先计算str(x) 或repr(x)?怎么样?
我可能希望根据其打印长度有条件地打印一个对象,所以如果我不打算打印它,我不需要str(x) 或repr(x)。
# How might we redefine lenstr so that str(x) need not be computed?
def lenstr(x):
return len(str(x))
def maybe_str(x, maxlen=80, subst='*'):
return subst * maxlen if lenstr(x) > maxlen else str(x)
maybe_str(tuple(range(9)))
# '(0, 1, 2, 3, 4, 5, 6, 7, 8)'
maybe_str(tuple(range(99)))
# '********************************************************************************'
maybe_str(tuple(map(lambda k: tuple(range(k)), range(4))))
# '((), (0,), (0, 1), (0, 1, 2))'
maybe_str(tuple(map(lambda k: tuple(range(k)), range(42))))
'********************************************************************************'
【问题讨论】:
-
如果你定义了一个有“长度”的对象/类,不管那个长度是多少。每次您想知道它是什么时都不必计算该对象的长度,而是在对象/类中存储一个变量,该变量会随着您在其生命周期和使用期间增加其长度属性而更新。然后,您可以在条件语句中引用此变量。
-
@Bdyce 该解决方案将要求每个对象都有这样的方法,并且不适用于内置对象,例如
tuple。 -
一般来说没有什么好的方法可以做到这一点,事实上,即使内置对象具有明确定义的长度,它们所引用的对象的长度也必须递归查询,所以可以你缩小了一些范围?
标签: python python-3.x string printing string-length