打印 Python 的一切 —— pprint beeprint
打印,是所有程序員從小白時期就具備的神技,遇事不決打印一下,是 DEBUG 最簡單且不依賴 IDE 的方式,自定義各種日志輸出,也是項(xiàng)目成型后必備功能。
但是為了優(yōu)雅的打印格式,往往需要對各種對象進(jìn)行特殊格式化,可遇到字典和大段字符串也不好處理。
這篇文章介紹兩個庫模塊,可以快速有效的解決所有 Python 對象的打印輸出,沒錯,所有。
pprint
這是 Python 標(biāo)準(zhǔn)庫模塊,全稱 pretty printer,可以讓各種數(shù)據(jù)結(jié)構(gòu)更美觀地輸出。
>>> print(game) {'players': [{'name': 'player_1', 'hp': 3}, {'name': 'player_2', 'hp': 5}]} >>> pprint.pprint(game, width=4) {'players': [{'hp': 3,'name': 'player_1'},{'hp': 5,'name': 'player_2'}]}pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False)
- stream:輸出流,默認(rèn)是 sys.stdout ,也就是屏幕輸出。
- indent:縮進(jìn)空格數(shù)。
- width:每行最大寬度,默認(rèn)為80個字符,超過寬度會換行,但如果單個對象超過不會被換行,比如一段長字符串。
- depth:限制數(shù)據(jù)的層級,設(shè)置后可以限制過多的嵌套。
- compact:3.4版本新加入的參數(shù),若設(shè)為 True ,則輸出會在接近 width 限制才進(jìn)行換行。
pprint.pformat(object, indent=1, width=80, depth=None, *, compact=False)
和 pprint.pprint 的區(qū)別是,該函數(shù)不會打印到輸出流,而是返回一個格式化字符串。
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>,'spam','eggs','lumberjack','knights','ni']classpprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False)
上文兩個函數(shù),實(shí)際都是構(gòu)建一個 PrettyPrinter 對象,并調(diào)用對應(yīng)的方法,所以當(dāng)需要復(fù)用格式化的時候,我們可以提前構(gòu)建該對象。
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> pp = pprint.PrettyPrinter(width=40, compact=True) >>> pp.pprint(game) {'players': [{'hp': 3,'name': 'player_1'},{'hp': 5,'name': 'player_2'}]} >>> pp.pprint(stuff) ['spam', 'eggs', 'lumberjack','knights', 'ni']pprint 對字典 列表這類數(shù)據(jù)結(jié)構(gòu)確實(shí)很好用,但遇到類、字符串仍然和 print 差別不大,因此這里有一個國人寫的第三方庫介紹給大家。
beeprint
除了和 pprint 一樣支持 dict, list, tuple 等常規(guī)變量的格式化輸出,還支持 object 變量打印、長文本自動剪切。
下面是作者 README 中和 pprint 的對比:
pprint:
{'entities': {'hashtags': [],'urls': [{'display_url': 'tumblr.com/xnr37hf0yz','expanded_url': 'http://tumblr.com/xnr37hf0yz','indices': [107, 126],'url': 'http://t.co/cCIWIwg'}],'user_mentions': []}}beeprint:
{'entities': {'hashtags': [],'urls': [{'display_url': 'tumblr.com/xnr37hf0yz','expanded_url': 'http://tumblr.com/xnr37hf0yz','indices': [107, 126],'url': 'http://t.co/cCIWIwg',},],'user_mentions': [],}, }pprint:
<class 'definition.NormalClassNewStyle'>beeprint:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' class(NormalClassNewStyle):dicts: {},lists: [],static_props: 1,tuple: (1, 2)pprint:
<definition.NormalClassNewStyle object at 0x7f338e5a9dd0>beeprint:
instance(NormalClassNewStyle):dicts: {},lists: [],say_hi: 'hello world',static_props: 1,tuple: (1, 2)pprint:
[['\nThe sky and the earth were at first one blurred entity like an egg. Pangu was born into it.\n \n\tThe separation of the sky and the earth took eighteen thousand years-the yang which was light and pure rose to become the sky, \tand the yin which was heavy and murky\xef\xbc\x88\xe6\x9c\xa6\xe8\x83\xa7\xe7\x9a\x84\xef\xbc\x89 sank to form the earth. Between them was Pangu, who went through nine \tchanges every day, his wisdom greater than that of the sky and his ability greater than that of the earth. Every day the sky rose ten feet higher, the earth became ten feet thicker, and Pangu grew ten feet taller.\n \nAnother eighteen thousand years passed, and there was an extremely high sky, an extremely thick earth, and an extremely tall Pangu. After Pangu died, his head turned into the Five Sacred Mountains (Mount Tai, Mount Heng, Mount Hua, Mount Heng, Mount Song), his eyes turned into the moon and the sun, his blood changed into water in river and sea, his hair into grass.\n \nIn all, the universe and Pangu combine in one.\n','\n\xe6\x8d\xae\xe6\xb0\x91\xe9\x97\xb4\xe7\xa5\x9e\xe8\xaf\x9d\xe4\xbc\xa0\xe8\xaf\xb4\xe5\x8f\xa4\xe6\x97\xb6\xe7\x9b\x98\xe5\x8f\xa4\xe7\x94\x9f\xe5\x9c\xa8\xe9\xbb\x91\xe6\x9a\x97\xe5\x9b\xa2\xe4\xb8\xad\xef\xbc\x8c\xe4\xbb\x96\xe4\xb8\x8d\xe8\x83\xbd\xe5\xbf\x8d\xe5\x8f\x97\xe9\xbb\x91\xe6\x9a\x97\xef\xbc\x8c\xe7\x94\xa8\xe7\xa5\x9e\xe6\x96\xa7\xe5\x8a\x88\xe5\x90\x91\xe5\x9b\x9b\xe6\x96\xb9\xef\xbc\x8c\xe9\x80\x90\xe6\xb8\x90\xe4\xbd\xbf\xe5\xa4\xa9\xe7\xa9\xba\xe9\xab\x98\xe8\xbf\x9c\xef\xbc\x8c\xe5\xa4\xa7\xe5\x9c\xb0\xe8\xbe\xbd\xe9\x98\x94\xe3\x80\x82\n\t\xe4\xbb\x96\xe4\xb8\xba\xe4\xb8\x8d\xe4\xbd\xbf\xe5\xa4\xa9\xe5\x9c\xb0\xe4\xbc\x9a\xe9\x87\x8d\xe6\x96\xb0\xe5\x90\x88\xe5\xb9\xb6\xef\xbc\x8c\xe7\xbb\xa7\xe7\xbb\xad\xe6\x96\xbd\xe5\xb1\x95\xe6\xb3\x95\xe6\x9c\xaf\xe3\x80\x82\xe6\xaf\x8f\xe5\xbd\x93\xe7\x9b\x98\xe5\x8f\xa4\xe7\x9a\x84\xe8\xba\xab\xe4\xbd\x93\xe9\x95\xbf\xe9\xab\x98\xe4\xb8\x80\xe5\xb0\xba\xef\xbc\x8c\xe5\xa4\xa9\xe7\xa9\xba\xe5\xb0\xb1\xe9\x9a\x8f\xe4\xb9\x8b\xe5\xa2\x9e\xe9\xab\x98\xe4\xb8\x80\xe5\xb0\xba\xef\xbc\x8c\n\t\xe7\xbb\x8f\xe8\xbf\x871.8\xe4\xb8\x87\xe5\xa4\x9a\xe5\xb9\xb4\xe7\x9a\x84\xe5\x8a\xaa\xe5\x8a\x9b\xef\xbc\x8c\xe7\x9b\x98\xe5\x8f\xa4\xe5\x8f\x98\xe6\x88\x90\xe4\xb8\x80\xe4\xbd\x8d\xe9\xa1\xb6\xe5\xa4\xa9\xe7\xab\x8b\xe5\x9c\xb0\xe7\x9a\x84\xe5\xb7\xa8\xe4\xba\xba\xef\xbc\x8c\xe8\x80\x8c\xe5\xa4\xa9\xe7\xa9\xba\xe4\xb9\x9f\xe5\x8d\x87\xe5\xbe\x97\xe9\xab\x98\xe4\xb8\x8d\xe5\x8f\xaf\xe5\x8f\x8a\xef\xbc\x8c\xe5\xa4\xa7\xe5\x9c\xb0\xe4\xb9\x9f\xe5\x8f\x98\xe5\xbe\x97\xe5\x8e\x9a\xe5\xae\x9e\xe6\x97\xa0\xe6\xaf\x94\xe3\x80\x82\xe7\x9b\x98\xe5\x8f\xa4\xe7\x94\x9f\xe5\x89\x8d\xe5\xae\x8c\xe6\x88\x90\xe5\xbc\x80\xe5\xa4\xa9\xe8\xbe\x9f\xe5\x9c\xb0\xe7\x9a\x84\xe4\xbc\x9f\xe5\xa4\xa7\xe4\xb8\x9a\xe7\xbb\xa9\xef\xbc\x8c\xe6\xad\xbb\xe5\x90\x8e\xe6\xb0\xb8\xe8\xbf\x9c\xe7\x95\x99\xe7\xbb\x99\xe5\x90\x8e\xe4\xba\xba\xe6\x97\xa0\xe7\xa9\xb7\xe6\x97\xa0\xe5\xb0\xbd\xe7\x9a\x84\xe5\xae\x9d\xe8\x97\x8f\xef\xbc\x8c\xe6\x88\x90\xe4\xb8\xba\xe4\xb8\xad\xe5\x8d\x8e\xe6\xb0\x91\xe6\x97\x8f\xe5\xb4\x87\xe6\x8b\x9c\xe7\x9a\x84\xe8\x8b\xb1\xe9\x9b\x84\xe3\x80\x82\n']]beeprint:
[['\nThe sky and the earth were at first one blurred entity like an egg. Panguwas born into it.\n \n\tThe separation of the sky and the earth took...(12 hidden lines)','\n據(jù)民間神話傳說古時盤古生在黑暗團(tuán)中,他不能忍受黑暗,用神斧劈向四方,逐漸使天空高遠(yuǎn),大地遼闊。\n\t他為不使天地會重新合并,繼續(xù)施展法術(shù)。每當(dāng)盤古的...(3 hidden lines)',], ]beeprint.pp(o, output=True, max_depth=5, indent=2, width=80, sort_keys=True, config=None, **kwargs):
參數(shù)和 pprint 類似,多出了 sort_keys可以打印字典時是否按 key 排序( pprint 是默認(rèn)排序,不可選),另外還有控制文本裁剪等行為的參數(shù),可以從 beeprint.Config 里查看。
總結(jié)
以上是生活随笔為你收集整理的打印 Python 的一切 —— pprint beeprint的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中sys.argv方法的一些
- 下一篇: python中统计计数的几种方法和Cou