我们可以使用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列表的类。答案 0 :(得分:0)
如何为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
这是一个相当肮脏的黑客,但不幸的是我没有看到任何其他方式(除了猴子修补DisplayFormatter
,这甚至更脏,虽然它应该更强大)。如果有的话,希望有人能够启发我们。