您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么打印Python對象”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“怎么打印Python對象”吧!
pprint 是“pretty printer”的簡寫,“pretty”的含義是“漂亮的、美觀的”,還有表示“相當(dāng)?shù)亍钡某潭日Z氣,因此它的含義便是:(相當(dāng))美觀的打印。
這是個相當(dāng)簡單卻有用的模塊,主要用于打印復(fù)雜的數(shù)據(jù)結(jié)構(gòu)對象,例如多層嵌套的列表、元組和字典等。
先看看 print() 打印的一個例子:
mylist = ["Beautiful is better than ugly.", "Explicit is better than implicit.", "Simple is better than complex.", "Complex is better than complicated."] print(mylist) # 結(jié)果如下: ['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.', 'Complex is better than complicated.']
這是一個簡單的例子,全部打印在一行里。
想象一下,如果對象中的元素是多層嵌套的內(nèi)容(例如復(fù)雜的 Json 數(shù)據(jù)),或者有超多的元素(例如在列表中存了很多 URL 鏈接),再打印出來會是怎樣?
那肯定是一團糟的,不好閱讀!
使用 pprint 模塊的 pprint() 替代 print(),可以解決如下痛點:
設(shè)置合適的行寬度,作適當(dāng)?shù)膿Q行
設(shè)置打印的縮進、層級,進行格式化打印
判斷對象中是否有無限循環(huán),并優(yōu)化打印內(nèi)容
1、簡單使用
語法:pprint(object, stream=None, indent=1, width=80, depth=None, *,compact=False)
默認的行寬度參數(shù)為 80,當(dāng)打印的字符(character)小于 80 時,pprint() 基本上等同于內(nèi)置函數(shù) print(),當(dāng)字符超出時,它會作美化,進行格式化輸出:
import pprint # 打印上例的 mylist pprint.pprint(mylist) # 打印的元素是換行的(因為超出80字符): ['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.', 'Complex is better than complicated.']
2、設(shè)置縮進為 4 個空格(默認為1)
pprint.pprint(mylist, indent=4) [ 'Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.', 'Complex is better than complicated.']
3、設(shè)置打印的行寬
mydict = {'students': [{'name':'Tom', 'age': 18},{'name':'Jerry', 'age': 19}]} pprint.pprint(mydict) # 未超長: {'students': [{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jerry'}]} pprint.pprint(mydict, width=20) # 超長1: {'students': [{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jerry'}]} pprint.pprint(mydict, width=70) # 超長2: {'students': [{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jerry'}]}
4、設(shè)置打印的層級(默認全打印)
newlist = [1, [2, [3, [4, [5]]]]] pprint.pprint(newlist, depth=3) # 超出的層級會用...表示 [1, [2, [3, [...]]]]
5、優(yōu)化循環(huán)結(jié)構(gòu)的打印
當(dāng)列表或其它數(shù)據(jù)結(jié)構(gòu)中出現(xiàn)循環(huán)引用時,要完整打印出所有內(nèi)容是不可能的。
所以 print 作了簡化處理,就像上例一樣,只打印外層的殼,而不打印內(nèi)層循環(huán)的東西。
這種處理方式是簡化了,但沒有指出是誰導(dǎo)致了循環(huán),還容易看漏。
pprint() 方法作了改進,遇到無限循環(huán)結(jié)構(gòu)時,會表示成<Recursion on typename with id=number> 的格式。
還有個 saferepr() 方法,也是這樣優(yōu)化,而且返回的是個字符串:
newlist = [1, 2] newlist.insert(0, newlist) # 列表元素指向列表自身,造成循環(huán)引用 # 直接 print 的結(jié)果是:[[...], 1, 2] pprint.pprint(newlist) # [<Recursion on list with id=1741283656456>, 1, 2] pprint.saferepr(newlist) # '[<Recursion on list with id=1741283656456>, 1, 2]'
6、判斷是否出現(xiàn)循環(huán)結(jié)構(gòu)
有兩個方法判斷一個對象中是否出現(xiàn)無限循環(huán):
pprint.isrecursive(newlist) # True pprint.isreadable(newlist) # False
isreadable() 除了能像 isrecursive() 一樣判斷循環(huán),還能判斷該格式化內(nèi)容是否可被 eval() 重構(gòu)。
以上就是 pprint 模塊的快捷入門介紹,除此之外,還有 pformat() 方法、PrettyPrinter 類,以及某些參數(shù)的使用等內(nèi)容,我覺得沒有大用,就不多說了。
最后,還有個小小的點:
用 pprint() 替換 print() 的技巧
在不考慮 print() 函數(shù)本身的參數(shù)的情況下,可以在引入 pprint 模塊后,寫上 “print = pprint.pprint”,令 print() 起到改頭換面的效果:
import pprint print = pprint.pprint mylist = ["Beautiful is better than ugly.", "Explicit is better than implicit.", "Simple is better than complex.", "Complex is better than complicated."] print(mylist) # 可對比本文開頭的例子 ['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.', 'Complex is better than complicated.']
到此,相信大家對“怎么打印Python對象”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。