gpt4 book ai didi

python - ObjA 列表的自定义显示输出

转载 作者:太空狗 更新时间:2023-10-30 01:37:49 24 4
gpt4 key购买 nike

我们可以使用 ipython 显示引擎为 numpy.polynomial.polynomial 注册自定义类型,如下所示

ip = get_ipython()

foramtter = ip.display_formatter.formatters['text/latex']

foramtter.for_type_by_name('numpy.polynomial.polynomial',
'Polynomial', display_func)

我想使用 .for_type_by_name(...) 方法为特定类型的列表注册自定义显示,比如 ObjA 而不仅仅是类型 ObjA 本身。

我该怎么做?

顺便说一句,我无权访问返回 ObjA 列表的类。

最佳答案

如何为 list 对象创建一个仅在看到 ObjA 列表时才起作用的格式化程序?

from decimal import Decimal   # Decimal is my ObjA here

ip = get_ipython()
formatter = ip.display_formatter.formatters['text/latex']

def format_list(obj):
if not isinstance(obj, list):
return None
if not all(isinstance(item, Decimal) for item in obj):
return None
return "$$[%s]$$" % ";".join(map(str, obj))

formatter.for_type_by_name('builtins', 'list', format_list)

似乎如果格式化函数返回None,则格式化程序将被忽略。至少它对我有用:

In[2]: [Decimal("1"), Decimal("2"), "not a decimal"]
Out[2]: [Decimal("1"), Decimal("2"), "not a decimal"]

In[3]: [Decimal("1"), Decimal("2")]
Out[3] 1, 2 # LaTeX-formatted, yeah

这是一个非常肮脏的 hack,但不幸的是我没有看到任何其他方式(除了猴子修补 DisplayFormatter,它甚至更肮脏,尽管它应该更强大)。如果有,希望有人赐教。

关于python - ObjA 列表的自定义显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com