当我尝试运行此代码时:
from pprint import PrettyPrinter
class MyPrettyPrinter(PrettyPrinter):
def __init__(self, *args, **kwargs):
PrettyPrinter.__init__(self, *args, **kwargs)
def format(self, object, context, maxlevels, level):
(repr, readable, recursive) = PrettyPrinter.format(self, object, context, maxlevels, level)
return (type(repr)(object), readable, recursive) if isinstance(object, str) else (repr, readable, recursive)
print(MyPrettyPrinter().pformat(['x']))
python3(['x']
)中的Iget输出与python2([x]
)中的Iget输出不同。你知道吗
为什么会这样?我如何获得与Python2相同的行为?你知道吗
python3的内部
_format
函数就是这样工作的:如您所见,如果
_repr
的输出适合于一行,则不使用用于生成repr的自定义逻辑。self._repr
委托给self.format
,这实际上只是做了一个更复杂的repr()
。因此,如果输出放在一行中,则只调用一次;否则,不使用输出,而是将(这里是:sequence)元素拆分为多个部分,并再次为子元素调用逻辑。你知道吗相比之下,python2的
_format
在任何阶段都实现了完全定制的逻辑,总是为列表中的所有子元素调用定制的格式化程序。这就是为什么触发器在Python2中工作,而在Python3中不工作。你知道吗不幸的是,如果不复制新的python3实现中的大量逻辑,我看不到任何简单的方法来实现这个功能。你知道吗
相关问题 更多 >
编程相关推荐