python语言格式化输出_Python | 格式化输出字符串
一直以來,字符串的格式化輸出對于編程來說,尤其是新手,還是挺麻煩的。對于這部分的內(nèi)容,筆者的建議是,只要大致能滿足輸出要求,越簡單越好,別整那復(fù)雜的~(圖文無關(guān)[俏皮])
工具/原料
Python 2.7.11
問題
今天寫這個(gè)經(jīng)驗(yàn)的緣由是看到下面這個(gè)字符串輸出的提問
問:排版最后怎么是歪的呢!麻煩大神們看看為什么!
下面是具體代碼:(文末會解答這個(gè)問題)
END
背景知識
在Python我們有很方便的格式化字符串函數(shù)format。應(yīng)該說自從用了format函數(shù)以后,傳統(tǒng)的字符格式化筆者已經(jīng)不會再用了^_^。下圖是占位符用法
下面是簡單的格式化用法。應(yīng)該說掌握這兩部分內(nèi)容已經(jīng)可以處理大部分的字符串格式化問題了。更多的format函數(shù)的用法大家可以參考文末鏈接。
END
測試
1
我們先來看一下下面這部分代碼。看起來這是一份無懈可擊的代碼了,所有的打印輸出都是用相同的format函數(shù),并且每行字符的長度(還是個(gè)數(shù)?)都是相同的20
2
然而,通過運(yùn)行代碼,觀察結(jié)果,我們發(fā)現(xiàn),現(xiàn)實(shí)跟預(yù)想有差距。
我們發(fā)現(xiàn),所有含中文的格式化字符串的輸出在“長度”上都比英文字符要短。所以我們有理由推測,format函數(shù)里面的20表示的是字節(jié)數(shù)。因?yàn)?#xff0c;一個(gè)漢字是兩個(gè)字節(jié)的
3
所以按照上面的推測,我們重新調(diào)整了包含漢字的輸出代碼:
對11行代碼因?yàn)橛?個(gè)漢字,把需要的字節(jié)數(shù)增加到23
對12行代碼因?yàn)橛?個(gè)漢字,把需要的字節(jié)數(shù)增加到22
測試的結(jié)果,可以說,是完美的:)
END
解決步驟
1
現(xiàn)在我們回到原來的問題。我們看到,問題中的格式問題其實(shí)就是我們在上面的測試中發(fā)現(xiàn)的因中文引起的問題。
2
考慮到代碼中使用了兩種格式化字符串技術(shù),為了方便起見(簡單~),我們先調(diào)整一下代碼,把代碼轉(zhuǎn)換為使用format函數(shù)的寫法
3
好,現(xiàn)在我們按照測試的時(shí)候的方法,對于包含中文的字符串,增加打印的字節(jié)數(shù)。表頭表尾也不能忍,也一并改了。效果棒棒噠~
4
我們再一次review代碼,發(fā)現(xiàn)第三個(gè)的占位符里面有多余的代碼,于是刪除了。發(fā)現(xiàn)刪除后內(nèi)容部分最后一行的對齊方式發(fā)生了變化,還是漢字字?jǐn)?shù)的問題,再調(diào)整!
5
好,現(xiàn)在我們的問題在這里是解決了,完全的!
END
One More Thing
其實(shí)對于這個(gè)問題是有一種很簡單純粹也很暴力的方法了,推薦大家多多使用~
我們來看新的代碼
有兩個(gè)問題大家要注意。content這個(gè)變量是直接把打印內(nèi)容用三個(gè)引號括起來的,這樣里面的內(nèi)容就有了一個(gè)新名字“文本字符串”,而它里面的格式是真正所見即所得的,大家手動對齊就好了。打印出來就是這個(gè)效果。
對于另一個(gè)問題,是關(guān)于print函數(shù)的。我們知道print函數(shù)默認(rèn)是會換行的,所以如果換另外一種更直觀的寫法,我們需要在print函數(shù)后面加逗號。完。
END
注意事項(xiàng)
format官方介紹:https://docs.python.org/2/library/string.html#formatspec
經(jīng)驗(yàn)內(nèi)容僅供參考,如果您需解決具體問題(尤其法律、醫(yī)學(xué)等領(lǐng)域),建議您詳細(xì)咨詢相關(guān)領(lǐng)域?qū)I(yè)人士。
舉報(bào)作者聲明:本篇經(jīng)驗(yàn)系本人依照真實(shí)經(jīng)歷原創(chuàng),未經(jīng)許可,謝絕轉(zhuǎn)載。
展開閱讀全部
總結(jié)
以上是生活随笔為你收集整理的python语言格式化输出_Python | 格式化输出字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker镜像启动后端口号是多少_14
- 下一篇: python 协程可以嵌套协程吗_Pyt