(仅适用于IPython,无论是终端还是QTConsole,而不是Notebook)有没有办法让常规的打印语句(是的,2.7)自动打印变量的头部和尾部(甚至只是头部)它超过一些任意大小?
如果我在大熊猫数据框架上print dataframe
太大,pandas会自动打印头部。我也喜欢它在列表和numpy数组上的工作方式,所以下次我不小心打印出一个巨大的阵列时,我不会忘记100页的数字。 (我确信我可以编写一个功能来执行此操作,但我反复使用打印,所以我想知道是否有方法可以控制IPython将显示多少 - 实际上,我' d而是改变控制台显示的内容而不是程序正在做什么。)
答案 0 :(得分:1)
您对print
语句的帮助真的很大,但您可以对ipython
的输出做些什么,请考虑以下命令:
In [13]: x = range(3)
In [14]: x
Out[14]: [0, 1, 2]
In [15]: print x
[0, 1, 2]
首先,x
将Out[14]
分配给表达式的值,然后显示Out[14]
。
您可以破解ipython
以不同方式显示它。据我所知,ipython
在内部使用pprint
或其副本。简单地修补猴子pprint.pprint/pprint.pformat/pprint.PrettyPrinter
并不起作用。你需要正确地破解ipython。
其次,print x
直接触及Python的核心。在python 2.x中,你不能改变print
的作用。在python 3.x中print()
只是一个函数,你可以对其进行修补。
如果您打印的内容是您自己班级的对象,请随意重新定义__str__
和__repr__
,如numpy所做的那样:
numpy.set_printoptions(threshold=2)
numpy.array(range(10)).__str__()
'[0 1 2 ..., 7 8 9]'
print numpy.array(range(10))
[0 1 2 ..., 7 8 9]
最后,ipython
附带%page
魔法命令,您可以发出%page x
,如果x
的代表足够大,您将被删除{ {1}}或类似的寻呼机,您可以在其中一次查看此文本表示。
P.S。 less
可通过" traits进行扩展,"它对我来说仍然是魔法,但也许你可以使用特征来解决第一种情况。