(仅适用于在 IPython 中工作,无论是终端还是 QTConsole,而不是笔记本)有没有一种方法可以使常规打印语句(是的,2.7)自动打印变量的头部和尾部(甚至只是头部)如果它超过了某个任意大小?
如果我 print dataframe
在一个太大的 pandas dataframe 上,pandas 会自动打印头部。我希望它在列表和 numpy 数组上也能这样工作,这样下次我不小心打印出一个巨大的数组时,我就不会得到 100 页的数字。 (我确定我可以编写一个函数来执行此操作,但我反射性地使用打印,所以我想知道是否有一种方法可以控制 IPython 将显示多少 - 实际上,我宁愿更改控制台显示的内容而不是程序在做什么。)
最佳答案
你不能用 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
的表示code> 足够大,您将转到 less
或类似的寻呼机,您可以在其中一次一页查看此文本表示。
附言ipython
可以通过“traits”进行扩展,对我来说它仍然很神奇,但也许你可以使用 traits 解决第一种情况。
关于python - IPython - 打印默认值以在长变量上打印头和尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868254/